- 基于 NestJS + TypeScript + MySQL + Redis 架构 - 完整的模块化设计(认证、用户、小组、游戏、预约等) - JWT 认证和 RBAC 权限控制系统 - Docker 容器化部署支持 - 添加 CLAUDE.md 项目开发指南 - 配置 .gitignore 忽略文件 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.3 KiB
5.3 KiB
部署指南
环境准备
开发环境
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env.development
# 启动开发服务器
npm run start:dev
生产环境
方式一:Docker部署(推荐)
- 配置环境变量
# 创建生产环境配置
cp .env.example .env.production
# 编辑 .env.production,设置以下关键参数:
# - DB_PASSWORD: 数据库密码
# - JWT_SECRET: JWT密钥(使用强密码)
# - CORS_ORIGIN: 允许的前端域名
- 构建和启动
# 构建镜像
docker-compose -f docker-compose.prod.yml build
# 启动服务
docker-compose -f docker-compose.prod.yml up -d
# 查看日志
docker-compose -f docker-compose.prod.yml logs -f backend
# 停止服务
docker-compose -f docker-compose.prod.yml down
- 数据库迁移
# 进入容器
docker exec -it gamegroup-backend-prod sh
# 运行迁移(如果需要)
npm run migration:run
方式二:传统部署
- 构建应用
# 安装依赖
npm ci --only=production
# 构建
npm run build:prod
- 配置PM2
# 安装PM2
npm install -g pm2
# 启动应用
pm2 start ecosystem.config.js --env production
# 查看状态
pm2 status
# 查看日志
pm2 logs gamegroup-backend
# 重启
pm2 restart gamegroup-backend
# 设置开机自启
pm2 startup
pm2 save
性能优化配置
数据库优化
- 创建索引
-- 用户表索引
CREATE INDEX idx_user_username ON user(username);
CREATE INDEX idx_user_email ON user(email);
CREATE INDEX idx_user_phone ON user(phone);
-- 小组表索引
CREATE INDEX idx_group_creator ON `group`(creatorId);
CREATE INDEX idx_group_active ON `group`(isActive);
-- 预约表索引
CREATE INDEX idx_appointment_group ON appointment(groupId);
CREATE INDEX idx_appointment_date ON appointment(eventDate);
CREATE INDEX idx_appointment_status ON appointment(status);
-- 小组成员表索引
CREATE INDEX idx_member_group_user ON group_member(groupId, userId);
CREATE INDEX idx_member_active ON group_member(isActive);
- 查询结果缓存 生产环境已自动启用数据库查询缓存(1分钟)
应用层缓存
应用已集成内存缓存,支持以下功能:
- 用户信息缓存(5分钟)
- 小组信息缓存(5分钟)
- 预约信息缓存(5分钟)
缓存会在数据更新时自动失效。
压缩
已启用HTTP响应压缩(gzip),自动压缩所有响应。
监控和日志
应用日志
# Docker环境
docker-compose -f docker-compose.prod.yml logs -f backend
# PM2环境
pm2 logs gamegroup-backend
健康检查
# 检查应用状态
curl http://localhost:3000/health
# 检查数据库连接
curl http://localhost:3000/health/db
性能监控
建议集成以下监控工具:
- APM: New Relic、Datadog、AppDynamics
- 日志: ELK Stack(Elasticsearch + Logstash + Kibana)
- 指标: Prometheus + Grafana
备份策略
数据库备份
# 手动备份
docker exec gamegroup-mysql-prod mysqldump -u root -p gamegroup > backup_$(date +%Y%m%d_%H%M%S).sql
# 设置定时备份(crontab)
0 2 * * * docker exec gamegroup-mysql-prod mysqldump -u root -p${DB_PASSWORD} gamegroup > /backups/backup_$(date +\%Y\%m\%d_\%H\%M\%S).sql
应用备份
- 代码仓库定期推送
- 配置文件加密存储
- 定期测试恢复流程
安全建议
-
环境变量
- 不要将 .env 文件提交到版本控制
- 使用强密码(JWT_SECRET、数据库密码)
- 定期轮换密钥
-
网络安全
- 使用HTTPS(配置SSL证书)
- 限制CORS来源
- 启用请求速率限制
-
数据库安全
- 使用非root用户连接
- 限制远程访问
- 定期更新密码
-
应用安全
- 及时更新依赖包
- 定期运行安全扫描(npm audit)
- 配置防火墙规则
扩展性
水平扩展
# 启动多个后端实例
docker-compose -f docker-compose.prod.yml up -d --scale backend=3
# 配置Nginx负载均衡
# 编辑 nginx.conf,添加upstream配置
Redis缓存(可选)
如果需要在多实例间共享缓存:
# 添加Redis服务到docker-compose.prod.yml
# 修改CacheService使用Redis替代内存存储
故障排查
常见问题
-
数据库连接失败
- 检查环境变量配置
- 确认MySQL服务已启动
- 验证网络连接
-
应用无法启动
- 查看日志
docker logs gamegroup-backend-prod - 检查端口占用
lsof -i :3000 - 验证环境变量
- 查看日志
-
性能问题
- 检查数据库慢查询日志
- 监控缓存命中率
- 分析API响应时间
更新部署
零停机更新
# 构建新镜像
docker-compose -f docker-compose.prod.yml build backend
# 滚动更新
docker-compose -f docker-compose.prod.yml up -d --no-deps backend
# 验证新版本
curl http://localhost:3000/health
# 如果有问题,回滚
docker-compose -f docker-compose.prod.yml restart backend
联系支持
如有部署问题,请参考:
- 项目文档: README.md
- 问题追踪: GitHub Issues
- 技术支持: [邮箱/联系方式]