6.2 KiB
6.2 KiB
多客户端部署方案说明
概述
本方案实现了基于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环境部署
-
检查环境依赖
node --version npm --version pm2 --version -
使用部署脚本
# 完整部署 deploy-multi-client.bat deploy # 仅构建项目 deploy-multi-client.bat build # 仅部署PM2 deploy-multi-client.bat pm2 # 检查状态 deploy-multi-client.bat status -
手动配置Nginx (Windows)
- 安装Nginx for Windows
- 将
nginx-multi-client.conf内容添加到nginx配置中 - 重启Nginx服务
Linux/macOS环境部署
- 使用部署脚本
chmod +x deploy-multi-client.sh # 完整部署(包含Nginx配置) ./deploy-multi-client.sh deploy # 检查状态 ./deploy-multi-client.sh status
手动部署步骤
-
构建项目
npm install npm run build -
启动PM2应用
pm2 start ecosystem.config.cjs pm2 save pm2 startup -
配置Nginx
# 复制配置文件 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中定义:
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管理命令
# 查看所有应用状态
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
健康检查
每个客户端端口都提供健康检查接口:
# 检查各端口状态
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
故障排除
常见问题
-
端口被占用
# 查看端口占用 netstat -tlnp | grep :51703 # 杀死占用进程 kill -9 <PID> -
PM2应用启动失败
# 查看详细错误日志 pm2 logs docreview-main --lines 50 # 重新加载配置 pm2 reload ecosystem.config.cjs -
Nginx代理失败
# 检查nginx配置 sudo nginx -t # 查看nginx错误日志 sudo tail -f /var/log/nginx/error.log -
客户端配置不生效
- 检查
CLIENT_ID环境变量是否正确设置 - 确认
api-config.ts中的客户端配置是否正确 - 重启相关PM2应用
- 检查
调试模式
启用调试模式查看详细日志:
# 设置调试环境变量
export DEBUG=*
# 重启应用
pm2 restart all
扩展和优化
添加新客户端
- 在
ecosystem.config.cjs中添加新的应用配置 - 在
api-config.ts中添加客户端特定配置 - 在
nginx-multi-client.conf中添加新的server块 - 重新部署应用
性能优化
- 启用Nginx缓存
- 配置负载均衡
- 启用Gzip压缩
- 配置SSL/TLS
安全加固
- 配置防火墙规则
- 启用访问控制
- 配置SSL证书
- 设置访问频率限制
联系支持
如果在部署过程中遇到问题,请检查:
- 系统依赖是否完整安装
- 端口是否被其他服务占用
- 配置文件语法是否正确
- 日志文件中的错误信息
部署完成后,可以通过以下地址访问不同客户端:
- 客户端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