199 lines
4.2 KiB
Markdown
199 lines
4.2 KiB
Markdown
# 通过 ecosystem.config.json 配置不同服务的示例
|
||
|
||
## 📋 基本原理
|
||
|
||
你可以完全通过修改 `ecosystem.config.json` 文件来配置不同数量和不同配置的服务,无需 `.env` 文件。
|
||
|
||
## 🎯 配置策略
|
||
|
||
### 1. 增加或减少服务数量
|
||
|
||
在 `apps` 数组中添加或删除服务配置:
|
||
|
||
```json
|
||
{
|
||
"apps": [
|
||
// 保留需要的服务,删除不需要的
|
||
{
|
||
"name": "jimeng-api-3302",
|
||
// ... 配置
|
||
},
|
||
{
|
||
"name": "jimeng-api-3303",
|
||
// ... 配置
|
||
}
|
||
// 删除 jimeng-api-3304 或添加更多服务
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2. 不同环境配置
|
||
|
||
每个服务都有 `env` (开发环境) 和 `env_production` (生产环境) 两套配置:
|
||
|
||
```json
|
||
{
|
||
"env": {
|
||
"MONGODB_URL": "mongodb://localhost:27017/jimeng-api",
|
||
"TOS_BUCKET_NAME": "dev-bucket"
|
||
},
|
||
"env_production": {
|
||
"MONGODB_URL": "mongodb://prod-server:27017/jimeng-api",
|
||
"TOS_BUCKET_NAME": "prod-bucket"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 个性化服务配置
|
||
|
||
你可以为每个服务设置不同的配置:
|
||
|
||
```json
|
||
{
|
||
"apps": [
|
||
{
|
||
"name": "jimeng-api-internal",
|
||
"env_production": {
|
||
"SERVICE_ID": "jimeng-internal",
|
||
"PORT": 3302,
|
||
"TOS_BUCKET_NAME": "internal-bucket",
|
||
"HEARTBEAT_INTERVAL": 30
|
||
}
|
||
},
|
||
{
|
||
"name": "jimeng-api-external",
|
||
"env_production": {
|
||
"SERVICE_ID": "jimeng-external",
|
||
"PORT": 3303,
|
||
"TOS_BUCKET_NAME": "external-bucket",
|
||
"HEARTBEAT_INTERVAL": 60
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 🚀 启动命令
|
||
|
||
### 启动所有服务
|
||
```bash
|
||
pm2 start ecosystem.config.json --env production
|
||
```
|
||
|
||
### 启动单个服务
|
||
```bash
|
||
pm2 start ecosystem.config.json --only jimeng-api-3302 --env production
|
||
```
|
||
|
||
### 启动多个指定服务
|
||
```bash
|
||
pm2 start ecosystem.config.json --only "jimeng-api-3302,jimeng-api-3303" --env production
|
||
```
|
||
|
||
## 💡 实际配置示例
|
||
|
||
### 示例1: 2个服务,不同TOS配置
|
||
```json
|
||
{
|
||
"apps": [
|
||
{
|
||
"name": "jimeng-api-images",
|
||
"env_production": {
|
||
"SERVICE_ID": "jimeng-images",
|
||
"PORT": 3302,
|
||
"TOS_BUCKET_NAME": "images-bucket",
|
||
"HEARTBEAT_INTERVAL": 30
|
||
}
|
||
},
|
||
{
|
||
"name": "jimeng-api-videos",
|
||
"env_production": {
|
||
"SERVICE_ID": "jimeng-videos",
|
||
"PORT": 3303,
|
||
"TOS_BUCKET_NAME": "videos-bucket",
|
||
"HEARTBEAT_INTERVAL": 60
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 示例2: 单个服务
|
||
```json
|
||
{
|
||
"apps": [
|
||
{
|
||
"name": "jimeng-api-main",
|
||
"env_production": {
|
||
"SERVICE_ID": "jimeng-main",
|
||
"PORT": 3302,
|
||
"TOS_BUCKET_NAME": "main-bucket"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 示例3: 5个服务,负载分散
|
||
```json
|
||
{
|
||
"apps": [
|
||
{
|
||
"name": "jimeng-api-3302",
|
||
"env_production": { "PORT": 3302, "SERVICE_ID": "jimeng-3302" }
|
||
},
|
||
{
|
||
"name": "jimeng-api-3303",
|
||
"env_production": { "PORT": 3303, "SERVICE_ID": "jimeng-3303" }
|
||
},
|
||
{
|
||
"name": "jimeng-api-3304",
|
||
"env_production": { "PORT": 3304, "SERVICE_ID": "jimeng-3304" }
|
||
},
|
||
{
|
||
"name": "jimeng-api-3305",
|
||
"env_production": { "PORT": 3305, "SERVICE_ID": "jimeng-3305" }
|
||
},
|
||
{
|
||
"name": "jimeng-api-3306",
|
||
"env_production": { "PORT": 3306, "SERVICE_ID": "jimeng-3306" }
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## ⚙️ 关键配置项说明
|
||
|
||
| 配置项 | 作用 | 示例 |
|
||
|--------|------|------|
|
||
| `name` | PM2进程名称 | `"jimeng-api-3302"` |
|
||
| `SERVICE_ID` | 心跳服务中的唯一标识 | `"jimeng-api-3302"` |
|
||
| `PORT` | 服务端口 | `3302` |
|
||
| `MONGODB_URL` | 数据库连接 | `"mongodb://localhost:27017/jimeng-api"` |
|
||
| `TOS_BUCKET_NAME` | 对象存储桶 | `"your-bucket"` |
|
||
| `HEARTBEAT_INTERVAL` | 心跳间隔(秒) | `30` |
|
||
|
||
## 🔄 动态管理
|
||
|
||
### 修改配置后重新加载
|
||
```bash
|
||
pm2 reload ecosystem.config.json --env production
|
||
```
|
||
|
||
### 只重启特定服务
|
||
```bash
|
||
pm2 restart jimeng-api-3302
|
||
```
|
||
|
||
### 删除服务后清理
|
||
```bash
|
||
pm2 delete jimeng-api-3304
|
||
```
|
||
|
||
## ✅ 优势
|
||
|
||
1. **集中管理** - 所有配置在一个文件中
|
||
2. **版本控制** - 可以提交到Git中
|
||
3. **环境隔离** - dev和production环境分离
|
||
4. **灵活扩展** - 随时增减服务数量
|
||
5. **配置差异** - 每个服务可以有不同配置 |