项目架构
架构概述
Better SaaS 采用现代化、可扩展的架构构建,遵循行业最佳实践。本文档深入介绍了应用程序中使用的系统设计、组件和架构模式。
系统架构
高级架构
核心组件
1. 前端层 (Next.js App Router)
- 页面和路由: 使用国际化路由的 App Router
- 组件: 基于 Radix UI 的可重用 UI 组件
- 状态管理: 使用 Zustand 进行客户端状态管理
- 样式: 使用自定义设计系统的 Tailwind CSS
- 数据获取: 使用 SWR 进行缓存和同步
2. 后端层 (Next.js API Routes)
- API 端点: 具有类型安全路由的 RESTful API
- 身份认证: 支持多提供商的 Better Auth
- 数据库: 使用 PostgreSQL 的 Drizzle ORM
- 文件处理: 安全的上传和存储管理
- 支付处理: 带有 Webhook 的 Stripe 集成
3. 数据层
- 数据库: 具有优化模式的 PostgreSQL
- ORM: 用于类型安全数据库操作的 Drizzle
- 缓存: 用于会话和数据缓存的 Redis
- 文件存储: 用于静态资源的 Cloudflare R2
身份认证流程
多提供商身份认证
身份认证功能
- 会话管理: 数据库持久化会话,可配置过期时间
- 基于角色的访问控制: 管理员、用户和自定义角色权限
- 社交登录: GitHub、Google OAuth 集成
- 安全: 密码哈希、CSRF 保护、安全 Cookie
- 密码重置: 基于邮箱的密码恢复流程
数据库设计
核心表
用户表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255),
image TEXT,
role VARCHAR(50) DEFAULT 'user',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
会话表
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
token VARCHAR(255) UNIQUE NOT NULL,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
文件表
CREATE TABLE files (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
filename VARCHAR(255) NOT NULL,
original_name VARCHAR(255) NOT NULL,
mime_type VARCHAR(100) NOT NULL,
size INTEGER NOT NULL,
url TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
支付表
CREATE TABLE payments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
stripe_customer_id VARCHAR(255),
stripe_subscription_id VARCHAR(255),
status VARCHAR(50) NOT NULL,
plan VARCHAR(50) NOT NULL,
amount INTEGER NOT NULL,
currency VARCHAR(3) DEFAULT 'usd',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
数据库关系
文件管理架构
上传流程
文件管理功能
- 安全上传: 验证、大小限制和类型限制
- 图像处理: 缩略图生成和优化
- 访问控制: 基于用户的文件权限
- 云存储: 与 Cloudflare R2/AWS S3 集成
- 元数据跟踪: 文件信息和使用分析
支付系统架构
Stripe 集成
支付功能
- 订阅管理: 多种计划和计费周期
- Webhook 处理: 实时支付事件处理
- 发票生成: 自动计费和收据
- 试用期: 可配置的免费试用功能
- 支付恢复: 失败支付重试逻辑
测试架构
测试结构
- 单元测试: 组件逻辑和工具函数
- 集成测试: API 端点和数据库操作
- E2E 测试: 完整的用户工作流程和场景
- 视觉测试: UI 一致性的截图比较
- 性能测试: 负载测试和优化
国际化架构
i18n 结构
i18n 功能
- 基于路由的本地化: 自动语言检测
- 消息管理: 集中化翻译文件
- 动态内容: 运行时语言切换
- SEO 优化: 本地化元标签和 URL
- 回退处理: 默认语言回退
安全架构
安全层
-
应用程序安全
- 使用令牌的 CSRF 保护
- 使用清理的 XSS 防护
- 使用 ORM 的 SQL 注入保护
- API 端点的速率限制
-
身份认证安全
- 安全密码哈希 (bcrypt)
- JWT 令牌验证
- 使用安全 Cookie 的会话管理
- OAuth 提供商集成
-
数据安全
- 数据库静态加密
- 安全文件上传验证
- 环境变量保护
- API 密钥管理
-
基础设施安全
- HTTPS 强制执行
- 安全头部 (CSP, HSTS)
- 依赖漏洞扫描
- 定期安全更新
性能优化
前端优化
- 代码分割: 动态导入和基于路由的分割
- 图像优化: 使用 WebP 的 Next.js Image 组件
- 缓存: 浏览器缓存和 CDN 优化
- 包分析: Tree shaking 和死代码消除
后端优化
- 数据库索引: 优化查询和索引
- API 缓存: 使用 Redis 的响应缓存
- 连接池: 数据库连接优化
- 懒加载: 按需资源加载
部署架构
生产部署
部署功能
- 自动化部署: GitHub Actions CI/CD 流水线
- 环境管理: 测试和生产环境
- 健康监控: 应用程序性能监控
- 回滚功能: 部署问题的快速回滚
- 可扩展性: 基于流量的自动扩展
监控与分析
应用程序监控
- 错误跟踪: 实时错误监控和警报
- 性能指标: 响应时间和资源使用
- 用户分析: 用户行为和参与度跟踪
- 业务指标: 收入、转化率和增长指标
这种架构为构建可扩展、安全和可维护的 SaaS 应用程序提供了坚实的基础。模块化设计允许根据特定业务需求轻松扩展和自定义。