FischerX
Fischer公司开发底座 — 适配国内运行环境的全栈Monorepo项目,理念对标John Rush的Mars Stack/Mars Foundation。
技术栈
前端
- 框架: Next.js 14+ (App Router)
- 语言: TypeScript (严格模式)
- 样式: Tailwind CSS
- UI组件: Shadcn UI
- 状态管理: Zustand + React Query
- 表单: React Hook Form + Zod
- 测试: Vitest + Playwright
后端
- 框架: NestJS
- ORM: Prisma
- 数据库: PostgreSQL
- 缓存: Redis
- 认证: JWT + Passport
- 测试: Jest
基础设施
- 容器化: Docker + Docker Compose
- 编排: Kubernetes (阿里云ACK)
- IaC: Terraform
- CI/CD: GitHub Actions
- 监控: Prometheus + Grafana + Loki + Jaeger
工具链
- 包管理: pnpm
- 构建系统: Turborepo
- 代码规范: ESLint + Prettier
- CLI工具: @fischerx/cli
核心模块
| 模块 |
说明 |
状态 |
| 用户管理 |
用户CRUD、头像上传 |
✅ 完成 |
| 认证授权 |
JWT、Session、手机号登录、微信/支付宝OAuth、实名认证、MFA |
✅ 完成 |
| 权限控制 |
RBAC模型、角色管理、权限分配、装饰器守卫 |
✅ 完成 |
| 文件存储 |
阿里云OSS、腾讯云COS、MinIO、图片处理、CDN |
✅ 完成 |
| 支付系统 |
支付宝、微信支付、银联适配器、退款、对账 |
✅ 完成 |
| 消息通知 |
邮件、短信、推送、站内信(适配器模式) |
✅ 完成 |
| 内容管理 |
文章、分类、标签、评论、版本控制 |
✅ 后端完成 |
| 监控告警 |
Prometheus + Grafana + AlertManager + Loki + Jaeger |
✅ 完成 |
| CLI工具 |
项目初始化、代码生成、部署命令 |
✅ 完成 |
快速开始
环境要求
- Node.js >= 18.0.0
- pnpm >= 8.0.0
- Docker & Docker Compose
- PostgreSQL 15+
- Redis 7+
安装
# 克隆项目
git clone http://8.153.107.96/fischer/fischerX.git
cd fischerX
# 安装依赖
pnpm install
本地开发
# 1. 启动基础设施(PostgreSQL + Redis)
docker-compose up -d postgres redis
# 2. 配置环境变量
cp services/api/.env.example services/api/.env
# 编辑 .env 填入数据库连接、Redis连接、JWT密钥等
# 3. 运行数据库迁移
cd services/api
npx prisma migrate dev
cd ../..
# 4. 启动后端API服务
cd services/api
pnpm start:dev
# 5. 启动前端Web应用
cd apps/web
pnpm dev
访问地址
项目结构
FischerX/
├── apps/ # 应用层
│ ├── web/ # Web应用 (Next.js)
│ └── admin/ # 管理后台 (占位)
├── packages/ # 共享包
│ ├── core/ # 核心业务逻辑 (@fischerx/core)
│ ├── ui/ # 共享UI组件 (@fischerx/ui)
│ ├── utils/ # 工具函数 (@fischerx/utils)
│ ├── types/ # 类型定义 (@fischerx/types)
│ ├── config/ # 配置管理 (@fischerx/config)
│ └── constants/ # 常量定义 (@fischerx/constants)
├── services/ # 后端服务
│ └── api/ # API服务 (NestJS)
│ ├── prisma/ # 数据库Schema
│ └── src/modules/ # 业务模块
│ ├── auth/ # 认证授权
│ ├── rbac/ # 权限控制
│ ├── user/ # 用户管理
│ ├── file/ # 文件存储
│ ├── payment/ # 支付系统
│ ├── notification/ # 消息通知
│ ├── content/ # 内容管理
│ ├── health/ # 健康检查
│ ├── cache/ # 缓存服务
│ └── monitoring/ # 监控集成
├── infra/ # 基础设施
│ ├── db/ # 数据库Docker配置
│ ├── k8s/ # Kubernetes配置
│ ├── monitoring/ # 监控栈 (Prometheus/Grafana/Loki/Jaeger)
│ ├── terraform/ # 阿里云资源管理
│ └── envs/ # 多环境配置 (dev/test/prod)
├── tools/ # 开发工具
│ └── cli/ # CLI工具 (@fischerx/cli)
├── docs/ # 文档
│ ├── architecture/ # 架构文档
│ ├── requirements/ # 需求文档
│ ├── design/ # 设计文档
│ ├── development/ # 开发文档
│ ├── api/ # API文档
│ ├── testing/ # 测试文档
│ ├── deployment/ # 部署文档
│ ├── operations/ # 运维文档
│ ├── user/ # 用户文档
│ └── templates/ # 文档模板
├── .github/workflows/ # CI/CD (8个Workflow)
├── docker-compose.yml # Docker Compose
├── turbo.json # Turborepo配置
├── pnpm-workspace.yaml # pnpm工作空间
└── package.json # 根package.json
API端点
认证授权
| 方法 |
路径 |
说明 |
| POST |
/api/v1/auth/register |
用户注册 |
| POST |
/api/v1/auth/login |
密码登录 |
| POST |
/api/v1/auth/sms/send |
发送验证码 |
| POST |
/api/v1/auth/sms/login |
验证码登录 |
| POST |
/api/v1/auth/wechat/login |
微信OAuth登录 |
| POST |
/api/v1/auth/alipay/login |
支付宝OAuth登录 |
| POST |
/api/v1/auth/realname/verify |
实名认证 |
| POST |
/api/v1/auth/mfa/enable |
启用MFA |
| POST |
/api/v1/auth/mfa/verify |
验证MFA |
用户管理
| 方法 |
路径 |
说明 |
| GET |
/api/v1/users/me |
当前用户信息 |
| PUT |
/api/v1/users/me |
更新用户信息 |
| POST |
/api/v1/users/me/avatar |
上传头像 |
| GET |
/api/v1/users |
用户列表 (管理员) |
权限控制
| 方法 |
路径 |
说明 |
| CRUD |
/api/v1/roles |
角色管理 |
| CRUD |
/api/v1/permissions |
权限管理 |
| POST |
/api/v1/roles/:id/permissions |
分配权限 |
| POST |
/api/v1/users/:id/roles |
分配角色 |
支付系统
| 方法 |
路径 |
说明 |
| POST |
/api/v1/payment/orders |
创建支付订单 |
| GET |
/api/v1/payment/orders/:id |
查询订单 |
| POST |
/api/v1/payment/refunds |
申请退款 |
| POST |
/api/v1/payment/callback/:channel |
支付回调 |
文件存储
| 方法 |
路径 |
说明 |
| POST |
/api/v1/files/upload |
上传文件 |
| GET |
/api/v1/files |
文件列表 |
| GET |
/api/v1/files/:id |
文件详情 |
| DELETE |
/api/v1/files/:id |
删除文件 |
消息通知
| 方法 |
路径 |
说明 |
| POST |
/api/v1/notifications |
发送通知 |
| GET |
/api/v1/notifications |
通知列表 |
| PUT |
/api/v1/notifications/:id/read |
标记已读 |
底座使用方式
方式一:Monorepo模式(推荐)
在FischerX Monorepo中创建新应用,自动继承共享包:
fischerx create-app my-crm --type=admin
方式二:独立项目模式
从FischerX模板创建独立项目:
fischerx init client-project --template=standalone
方式三:API服务模式
部署FischerX作为共享服务,通过API调用底座功能。
CLI工具
# 安装
cd tools/cli && pnpm install && pnpm build
# 项目管理
fischerx init <project-name> # 初始化新项目
fischerx create-app <app-name> # 创建新应用
fischerx create-package <pkg-name> # 创建新共享包
# 代码生成
fischerx generate page <name> # 生成页面
fischerx generate component <name> # 生成组件
fischerx generate api <name> # 生成API
fischerx generate module <name> # 生成完整模块
# 部署
fischerx deploy --env dev # 部署到开发环境
fischerx deploy --env prod # 部署到生产环境
# 其他
fischerx doctor # 检查项目健康
fischerx info # 显示项目信息
国内环境适配
| 维度 |
适配方案 |
| 云服务 |
阿里云(首选)、腾讯云(备选)、华为云(备选) |
| 认证 |
手机号验证码、微信OAuth、支付宝OAuth、实名认证 |
| 支付 |
微信支付、支付宝、银联 |
| 存储 |
阿里云OSS、腾讯云COS、MinIO私有化 |
| 短信 |
阿里云短信 |
| 邮件 |
SMTP / 阿里云邮件 |
| 监控 |
Prometheus + Grafana / 阿里云ARMS |
| 日志 |
Loki / 阿里云SLS |
| 部署 |
阿里云ACK / 自建K8s |
| CDN |
阿里云CDN |
可用脚本
| 脚本 |
说明 |
pnpm install |
安装所有依赖 |
pnpm build |
构建所有包和应用 |
pnpm dev |
启动开发服务器 |
pnpm lint |
运行ESLint检查 |
pnpm test |
运行所有测试 |
pnpm format |
使用Prettier格式化代码 |
待完善功能
| 优先级 |
功能 |
说明 |
| P0 |
订单系统模块 |
独立Order模块,订单状态机 |
| P0 |
企业微信通知 |
WeComChannelService适配器 |
| P0 |
邮件真实发送 |
集成Nodemailer/阿里云邮件 |
| P0 |
短信真实发送 |
集成阿里云短信SDK |
| P1 |
用户管理前端页面 |
用户列表/编辑/删除 |
| P1 |
通知中心前端页面 |
通知列表/设置 |
| P1 |
订单前端页面 |
订单列表/详情 |
| P2 |
支付真实SDK集成 |
支付宝/微信支付真实SDK |
| P2 |
内容审核 |
阿里云绿网内容安全 |
| P2 |
@fischerx/client-sdk |
客户端SDK包 |
License
Private - Fischer Company