# 多客户端部署方案说明 ## 概述 本方案实现了基于PM2和Nginx的多客户端部署架构,允许不同地区的客户通过不同端口访问同一个应用服务。 ## 架构设计 ``` 客户端A (51701) ──┐ 客户端B (51702) ──┼── Nginx反向代理 ──→ 主服务 (51703) 客户端C (51704) ──┘ ``` ### 端口分配 - **主服务**: `10.79.97.17:51703` - 核心应用服务 - **客户端A**: `10.79.97.17:51701` - 地区A客户访问 - **客户端B**: `10.79.97.17:51702` - 地区B客户访问 - **客户端C**: `10.79.97.17:51704` - 地区C客户访问 ## 文件说明 ### 1. ecosystem.config.cjs PM2部署配置文件,定义了4个应用实例: - `docreview-main`: 主服务 (端口51703) - `docreview-client-a`: 客户端A代理 (端口51701) - `docreview-client-b`: 客户端B代理 (端口51702) - `docreview-client-c`: 客户端C代理 (端口51704) ### 2. api-config.ts 应用配置文件,支持根据`CLIENT_ID`环境变量加载不同客户端配置: - 默认配置 (main) - 客户端A配置 (client-a) - 客户端B配置 (client-b) - 客户端C配置 (client-c) ### 3. nginx-multi-client.conf Nginx反向代理配置文件,为每个客户端端口配置独立的代理规则。 ### 4. 部署脚本 - `deploy-multi-client.sh`: Linux/macOS部署脚本 - `deploy-multi-client.bat`: Windows部署脚本 ## 部署步骤 ### Windows环境部署 1. **检查环境依赖** ```bash node --version npm --version pm2 --version ``` 2. **使用部署脚本** ```bash # 完整部署 deploy-multi-client.bat deploy # 仅构建项目 deploy-multi-client.bat build # 仅部署PM2 deploy-multi-client.bat pm2 # 检查状态 deploy-multi-client.bat status ``` 3. **手动配置Nginx** (Windows) - 安装Nginx for Windows - 将`nginx-multi-client.conf`内容添加到nginx配置中 - 重启Nginx服务 ### Linux/macOS环境部署 1. **使用部署脚本** ```bash chmod +x deploy-multi-client.sh # 完整部署(包含Nginx配置) ./deploy-multi-client.sh deploy # 检查状态 ./deploy-multi-client.sh status ``` ### 手动部署步骤 1. **构建项目** ```bash npm install npm run build ``` 2. **启动PM2应用** ```bash pm2 start ecosystem.config.cjs pm2 save pm2 startup ``` 3. **配置Nginx** ```bash # 复制配置文件 sudo cp nginx-multi-client.conf /etc/nginx/sites-available/docreview-multi-client sudo ln -s /etc/nginx/sites-available/docreview-multi-client /etc/nginx/sites-enabled/ # 测试配置 sudo nginx -t # 重载配置 sudo systemctl reload nginx ``` ## 配置说明 ### 客户端特定配置 每个客户端可以有独立的配置,在`api-config.ts`中定义: ```typescript const clientConfigs = { 'client-a': { baseUrl: 'http://10.79.97.17:51701/api', uploadUrl: 'http://10.79.97.17:51701/api/upload', oauth: { serverUrl: 'http://10.79.97.17:51701/oauth', clientId: 'client-a-id', // ... 其他配置 } }, // ... 其他客户端配置 }; ``` ### 环境变量 每个PM2应用实例都有独立的环境变量: - `CLIENT_ID`: 客户端标识 (main, client-a, client-b, client-c) - `PROXY_TARGET`: 代理目标地址 (仅客户端实例) - `PORT`: 监听端口 ## 监控和管理 ### PM2管理命令 ```bash # 查看所有应用状态 pm2 status # 查看特定应用日志 pm2 logs docreview-main pm2 logs docreview-client-a # 重启应用 pm2 restart docreview-main pm2 restart all # 停止应用 pm2 stop docreview-main pm2 stop all # 删除应用 pm2 delete docreview-main pm2 delete all ``` ### 日志文件位置 **PM2日志**: - 主服务: `logs/main-out.log`, `logs/main-error.log` - 客户端A: `logs/client-a-out.log`, `logs/client-a-error.log` - 客户端B: `logs/client-b-out.log`, `logs/client-b-error.log` - 客户端C: `logs/client-c-out.log`, `logs/client-c-error.log` **Nginx日志**: - 客户端A: `/var/log/nginx/client-a-access.log`, `/var/log/nginx/client-a-error.log` - 客户端B: `/var/log/nginx/client-b-access.log`, `/var/log/nginx/client-b-error.log` - 客户端C: `/var/log/nginx/client-c-access.log`, `/var/log/nginx/client-c-error.log` ### 健康检查 每个客户端端口都提供健康检查接口: ```bash # 检查各端口状态 curl http://10.79.97.17:51701/health # 客户端A curl http://10.79.97.17:51702/health # 客户端B curl http://10.79.97.17:51703/health # 主服务 curl http://10.79.97.17:51704/health # 客户端C ``` ## 故障排除 ### 常见问题 1. **端口被占用** ```bash # 查看端口占用 netstat -tlnp | grep :51703 # 杀死占用进程 kill -9 ``` 2. **PM2应用启动失败** ```bash # 查看详细错误日志 pm2 logs docreview-main --lines 50 # 重新加载配置 pm2 reload ecosystem.config.cjs ``` 3. **Nginx代理失败** ```bash # 检查nginx配置 sudo nginx -t # 查看nginx错误日志 sudo tail -f /var/log/nginx/error.log ``` 4. **客户端配置不生效** - 检查`CLIENT_ID`环境变量是否正确设置 - 确认`api-config.ts`中的客户端配置是否正确 - 重启相关PM2应用 ### 调试模式 启用调试模式查看详细日志: ```bash # 设置调试环境变量 export DEBUG=* # 重启应用 pm2 restart all ``` ## 扩展和优化 ### 添加新客户端 1. 在`ecosystem.config.cjs`中添加新的应用配置 2. 在`api-config.ts`中添加客户端特定配置 3. 在`nginx-multi-client.conf`中添加新的server块 4. 重新部署应用 ### 性能优化 1. **启用Nginx缓存** 2. **配置负载均衡** 3. **启用Gzip压缩** 4. **配置SSL/TLS** ### 安全加固 1. **配置防火墙规则** 2. **启用访问控制** 3. **配置SSL证书** 4. **设置访问频率限制** ## 联系支持 如果在部署过程中遇到问题,请检查: 1. 系统依赖是否完整安装 2. 端口是否被其他服务占用 3. 配置文件语法是否正确 4. 日志文件中的错误信息 部署完成后,可以通过以下地址访问不同客户端: - 客户端A: http://10.79.97.17:51701 - 客户端B: http://10.79.97.17:51702 - 客户端C: http://10.79.97.17:51704 - 主服务: http://10.79.97.17:51703