# 部署指南 ## 环境准备 ### 开发环境 ```bash # 安装依赖 npm install # 配置环境变量 cp .env.example .env.development # 启动开发服务器 npm run start:dev ``` ### 生产环境 #### 方式一:Docker部署(推荐) 1. **配置环境变量** ```bash # 创建生产环境配置 cp .env.example .env.production # 编辑 .env.production,设置以下关键参数: # - DB_PASSWORD: 数据库密码 # - JWT_SECRET: JWT密钥(使用强密码) # - CORS_ORIGIN: 允许的前端域名 ``` 2. **构建和启动** ```bash # 构建镜像 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 ``` 3. **数据库迁移** ```bash # 进入容器 docker exec -it gamegroup-backend-prod sh # 运行迁移(如果需要) npm run migration:run ``` #### 方式二:传统部署 1. **构建应用** ```bash # 安装依赖 npm ci --only=production # 构建 npm run build:prod ``` 2. **配置PM2** ```bash # 安装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. **创建索引** ```sql -- 用户表索引 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); ``` 2. **查询结果缓存** 生产环境已自动启用数据库查询缓存(1分钟) ### 应用层缓存 应用已集成内存缓存,支持以下功能: - 用户信息缓存(5分钟) - 小组信息缓存(5分钟) - 预约信息缓存(5分钟) 缓存会在数据更新时自动失效。 ### 压缩 已启用HTTP响应压缩(gzip),自动压缩所有响应。 ## 监控和日志 ### 应用日志 ```bash # Docker环境 docker-compose -f docker-compose.prod.yml logs -f backend # PM2环境 pm2 logs gamegroup-backend ``` ### 健康检查 ```bash # 检查应用状态 curl http://localhost:3000/health # 检查数据库连接 curl http://localhost:3000/health/db ``` ### 性能监控 建议集成以下监控工具: - **APM**: New Relic、Datadog、AppDynamics - **日志**: ELK Stack(Elasticsearch + Logstash + Kibana) - **指标**: Prometheus + Grafana ## 备份策略 ### 数据库备份 ```bash # 手动备份 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) - 配置防火墙规则 ## 扩展性 ### 水平扩展 ```bash # 启动多个后端实例 docker-compose -f docker-compose.prod.yml up -d --scale backend=3 # 配置Nginx负载均衡 # 编辑 nginx.conf,添加upstream配置 ``` ### Redis缓存(可选) 如果需要在多实例间共享缓存: ```bash # 添加Redis服务到docker-compose.prod.yml # 修改CacheService使用Redis替代内存存储 ``` ## 故障排查 ### 常见问题 1. **数据库连接失败** - 检查环境变量配置 - 确认MySQL服务已启动 - 验证网络连接 2. **应用无法启动** - 查看日志 `docker logs gamegroup-backend-prod` - 检查端口占用 `lsof -i :3000` - 验证环境变量 3. **性能问题** - 检查数据库慢查询日志 - 监控缓存命中率 - 分析API响应时间 ## 更新部署 ### 零停机更新 ```bash # 构建新镜像 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 - 技术支持: [邮箱/联系方式]