279 lines
6.2 KiB
Markdown
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 |