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

279 lines
6.2 KiB
Markdown

# 多客户端部署方案说明
## 概述
本方案实现了基于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 <PID>
```
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