jimeng-free-api/PM2_CONFIG_GUIDE.md

4.2 KiB
Raw Blame History

通过 ecosystem.config.json 配置不同服务的示例

📋 基本原理

你可以完全通过修改 ecosystem.config.json 文件来配置不同数量和不同配置的服务,无需 .env 文件。

🎯 配置策略

1. 增加或减少服务数量

apps 数组中添加或删除服务配置:

{
  "apps": [
    // 保留需要的服务,删除不需要的
    {
      "name": "jimeng-api-3302",
      // ... 配置
    },
    {
      "name": "jimeng-api-3303", 
      // ... 配置
    }
    // 删除 jimeng-api-3304 或添加更多服务
  ]
}

2. 不同环境配置

每个服务都有 env (开发环境) 和 env_production (生产环境) 两套配置:

{
  "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. 个性化服务配置

你可以为每个服务设置不同的配置:

{
  "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
      }
    }
  ]
}

🚀 启动命令

启动所有服务

pm2 start ecosystem.config.json --env production

启动单个服务

pm2 start ecosystem.config.json --only jimeng-api-3302 --env production

启动多个指定服务

pm2 start ecosystem.config.json --only "jimeng-api-3302,jimeng-api-3303" --env production

💡 实际配置示例

示例1: 2个服务不同TOS配置

{
  "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: 单个服务

{
  "apps": [
    {
      "name": "jimeng-api-main",
      "env_production": {
        "SERVICE_ID": "jimeng-main",
        "PORT": 3302,
        "TOS_BUCKET_NAME": "main-bucket"
      }
    }
  ]
}

示例3: 5个服务负载分散

{
  "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

🔄 动态管理

修改配置后重新加载

pm2 reload ecosystem.config.json --env production

只重启特定服务

pm2 restart jimeng-api-3302

删除服务后清理

pm2 delete jimeng-api-3304

优势

  1. 集中管理 - 所有配置在一个文件中
  2. 版本控制 - 可以提交到Git中
  3. 环境隔离 - dev和production环境分离
  4. 灵活扩展 - 随时增减服务数量
  5. 配置差异 - 每个服务可以有不同配置