Files
gamegroup/doc/deployment/DEPLOYMENT.md
UGREEN USER b25aa5b143 初始化游戏小组管理系统后端项目
- 基于 NestJS + TypeScript + MySQL + Redis 架构
- 完整的模块化设计(认证、用户、小组、游戏、预约等)
- JWT 认证和 RBAC 权限控制系统
- Docker 容器化部署支持
- 添加 CLAUDE.md 项目开发指南
- 配置 .gitignore 忽略文件

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-28 10:42:06 +08:00

5.3 KiB
Raw Blame History

部署指南

环境准备

开发环境

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env.development

# 启动开发服务器
npm run start:dev

生产环境

方式一Docker部署推荐

  1. 配置环境变量
# 创建生产环境配置
cp .env.example .env.production

# 编辑 .env.production设置以下关键参数
# - DB_PASSWORD: 数据库密码
# - JWT_SECRET: JWT密钥使用强密码
# - CORS_ORIGIN: 允许的前端域名
  1. 构建和启动
# 构建镜像
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
  1. 数据库迁移
# 进入容器
docker exec -it gamegroup-backend-prod sh

# 运行迁移(如果需要)
npm run migration:run

方式二:传统部署

  1. 构建应用
# 安装依赖
npm ci --only=production

# 构建
npm run build:prod
  1. 配置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

性能优化配置

数据库优化

  1. 创建索引
-- 用户表索引
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. 查询结果缓存 生产环境已自动启用数据库查询缓存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 StackElasticsearch + 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

应用备份

  • 代码仓库定期推送
  • 配置文件加密存储
  • 定期测试恢复流程

安全建议

  1. 环境变量

    • 不要将 .env 文件提交到版本控制
    • 使用强密码JWT_SECRET、数据库密码
    • 定期轮换密钥
  2. 网络安全

    • 使用HTTPS配置SSL证书
    • 限制CORS来源
    • 启用请求速率限制
  3. 数据库安全

    • 使用非root用户连接
    • 限制远程访问
    • 定期更新密码
  4. 应用安全

    • 及时更新依赖包
    • 定期运行安全扫描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替代内存存储

故障排查

常见问题

  1. 数据库连接失败

    • 检查环境变量配置
    • 确认MySQL服务已启动
    • 验证网络连接
  2. 应用无法启动

    • 查看日志 docker logs gamegroup-backend-prod
    • 检查端口占用 lsof -i :3000
    • 验证环境变量
  3. 性能问题

    • 检查数据库慢查询日志
    • 监控缓存命中率
    • 分析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
  • 技术支持: [邮箱/联系方式]