Files
leaudit-platform-frontend/MULTI-CLIENT-DEPLOYMENT.md
T

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环境部署

  1. 检查环境依赖

    node --version
    npm --version
    pm2 --version
    
  2. 使用部署脚本

    # 完整部署
    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. 使用部署脚本
    chmod +x deploy-multi-client.sh
    
    # 完整部署(包含Nginx配置)
    ./deploy-multi-client.sh deploy
    
    # 检查状态
    ./deploy-multi-client.sh status
    

手动部署步骤

  1. 构建项目

    npm install
    npm run build
    
  2. 启动PM2应用

    pm2 start ecosystem.config.cjs
    pm2 save
    pm2 startup
    
  3. 配置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

故障排除

常见问题

  1. 端口被占用

    # 查看端口占用
    netstat -tlnp | grep :51703
    
    # 杀死占用进程
    kill -9 <PID>
    
  2. PM2应用启动失败

    # 查看详细错误日志
    pm2 logs docreview-main --lines 50
    
    # 重新加载配置
    pm2 reload ecosystem.config.cjs
    
  3. Nginx代理失败

    # 检查nginx配置
    sudo nginx -t
    
    # 查看nginx错误日志
    sudo tail -f /var/log/nginx/error.log
    
  4. 客户端配置不生效

    • 检查CLIENT_ID环境变量是否正确设置
    • 确认api-config.ts中的客户端配置是否正确
    • 重启相关PM2应用

调试模式

启用调试模式查看详细日志:

# 设置调试环境变量
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. 日志文件中的错误信息

部署完成后,可以通过以下地址访问不同客户端: