一个功能完整的多租户 SaaS 应用平台,包含后台管理系统和公共网站。
- Node.js 18+ - 运行时环境
- Express.js - Web 框架
- TypeScript - 类型安全
- PostgreSQL - 主数据库
- Prisma - ORM 和数据库迁移
- Redis - 缓存和会话管理
- JWT + Passport.js - 认证授权
- Zod - 数据验证
- Next.js 14 - React 框架 (App Router)
- TypeScript - 类型安全
- TailwindCSS - CSS 框架
- shadcn/ui - UI 组件库
- Zustand - 状态管理
- React Query - 数据获取和缓存
- Lucide React - 图标库
- Docker - 容器化
- Docker Compose - 本地开发环境
- PM2 - 生产环境进程管理
- Nginx - 反向代理
- 组织/工作区隔离
- 数据完全隔离
- 每个租户独立配置
- JWT Token 认证
- 基于角色的访问控制 (RBAC)
- 多角色支持:超级管理员、组织管理员、普通用户
- OAuth 2.0 集成准备
- 多种订阅计划
- 功能权限控制
- 使用量追踪
- 自动续费提醒
- 用户管理
- 组织管理
- 订阅管理
- 系统配置
- 审计日志
- 数据分析面板
- 产品展示页
- 定价页面
- 用户注册/登录
- 用户工作区
saasapp/
├── backend/ # 后端服务
│ ├── src/
│ │ ├── config/ # 配置文件
│ │ ├── controllers/ # 控制器
│ │ ├── middleware/ # 中间件
│ │ ├── models/ # 数据模型
│ │ ├── routes/ # 路由
│ │ ├── services/ # 业务逻辑
│ │ ├── utils/ # 工具函数
│ │ └── index.ts # 入口文件
│ ├── prisma/ # 数据库 schema 和迁移
│ ├── tests/ # 测试文件
│ └── package.json
│
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── app/ # Next.js App Router
│ │ │ ├── (admin)/ # 管理后台
│ │ │ ├── (public)/ # 公共网站
│ │ │ └── (app)/ # 用户工作区
│ │ ├── components/ # React 组件
│ │ ├── lib/ # 工具库
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── stores/ # 状态管理
│ │ └── types/ # TypeScript 类型
│ └── package.json
│
├── docker-compose.yml # Docker 编排
├── .env.example # 环境变量示例
└── docs/ # 文档目录
├── architecture.md # 架构文档
├── api.md # API 文档
└── deployment.md # 部署文档
根据您的需求选择合适的指南:
-
本地开发指南 ⭐ 推荐
- 代码在本地运行
- 连接远程服务器数据库
- 适合日常开发
-
- 完整本地环境(包含本地数据库)
- 使用 Docker 一键启动
- 适合快速体验
-
- 部署到 Rocky Linux 9 服务器
- 生产环境配置
- 适合正式上线
- Node.js 18+
- PostgreSQL 14+ (本地或远程)
- Redis 6+ (本地或远程)
- Docker & Docker Compose (可选)
- 克隆项目并安装依赖:
# 安装后端依赖
cd backend
npm install
# 安装前端依赖
cd ../frontend
npm install- 配置环境变量:
cp .env.example .env
# 编辑 .env 文件,配置数据库连接等信息- 启动服务:
# 启动 PostgreSQL 和 Redis
docker-compose up -d postgres redis
# 运行数据库迁移
cd backend
npm run migrate
# 启动后端服务
npm run dev
# 启动前端服务(新终端)
cd frontend
npm run dev- 访问应用:
- 前端: http://localhost:3000
- 后端 API: http://localhost:5000
- 管理后台: http://localhost:3000/admin
详见 部署文档
cd backend
# 创建新迁移
npm run migrate:create
# 运行迁移
npm run migrate
# 重置数据库
npm run migrate:reset# 运行 ESLint
npm run lint
# 格式化代码
npm run format
# 类型检查
npm run type-check# 运行单元测试
npm run test
# 运行集成测试
npm run test:integration
# 测试覆盖率
npm run test:coverage# 服务器配置
NODE_ENV=development
PORT=5000
API_URL=http://localhost:5000
# 数据库
DATABASE_URL=postgresql://user:password@localhost:5432/saasapp
# Redis
REDIS_URL=redis://localhost:6379
# JWT
JWT_SECRET=your-secret-key
JWT_EXPIRES_IN=7d
# 邮件服务
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-email@example.com
SMTP_PASS=your-passwordNEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_APP_NAME=SaaS Platform- 构建应用
# 构建后端
cd backend
npm run build
# 构建前端
cd frontend
npm run build- 使用 Docker
docker-compose -f docker-compose.prod.yml up -d- 使用 PM2
# 后端
cd backend
pm2 start ecosystem.config.js
# 前端
cd frontend
pm2 start npm --name "frontend" -- start详细部署说明请参考 部署文档
API 文档使用 Swagger/OpenAPI 规范,启动后端服务后访问:
- Swagger UI: http://localhost:5000/api-docs
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
MIT License
如有问题,请提交 Issue 或联系开发团队。