# 通过 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. **配置差异** - 每个服务可以有不同配置