Skip to content

codehermit/saasapp

Repository files navigation

SaaS Application Platform

一个功能完整的多租户 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 - 图标库

DevOps

  • 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     # 部署文档

快速开始

📚 开发文档

根据您的需求选择合适的指南:

  1. 本地开发指南 ⭐ 推荐

    • 代码在本地运行
    • 连接远程服务器数据库
    • 适合日常开发
  2. 快速开始指南

    • 完整本地环境(包含本地数据库)
    • 使用 Docker 一键启动
    • 适合快速体验
  3. 部署文档

    • 部署到 Rocky Linux 9 服务器
    • 生产环境配置
    • 适合正式上线

前置要求

  • Node.js 18+
  • PostgreSQL 14+ (本地或远程)
  • Redis 6+ (本地或远程)
  • Docker & Docker Compose (可选)

使用 Docker Compose (推荐)

  1. 克隆项目并安装依赖:
# 安装后端依赖
cd backend
npm install

# 安装前端依赖
cd ../frontend
npm install
  1. 配置环境变量:
cp .env.example .env
# 编辑 .env 文件,配置数据库连接等信息
  1. 启动服务:
# 启动 PostgreSQL 和 Redis
docker-compose up -d postgres redis

# 运行数据库迁移
cd backend
npm run migrate

# 启动后端服务
npm run dev

# 启动前端服务(新终端)
cd frontend
npm run dev
  1. 访问应用:

手动安装

详见 部署文档

开发指南

数据库迁移

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

环境变量

后端 (.env)

# 服务器配置
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-password

前端 (.env.local)

NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_APP_NAME=SaaS Platform

部署

生产环境部署

  1. 构建应用
# 构建后端
cd backend
npm run build

# 构建前端
cd frontend
npm run build
  1. 使用 Docker
docker-compose -f docker-compose.prod.yml up -d
  1. 使用 PM2
# 后端
cd backend
pm2 start ecosystem.config.js

# 前端
cd frontend
pm2 start npm --name "frontend" -- start

详细部署说明请参考 部署文档

API 文档

API 文档使用 Swagger/OpenAPI 规范,启动后端服务后访问:

贡献指南

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

许可证

MIT License

支持

如有问题,请提交 Issue 或联系开发团队。

About

SaaS application

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages