llm-gateway/deploy/ecosystem.config.cjs

118 lines
3.9 KiB
JavaScript

/**
* PM2 Ecosystem Config — LLM Gateway on Erik (217.154.82.179)
*
* Deploy: pm2 start deploy/ecosystem.config.cjs
* Reload: pm2 reload llm-gateway llm-learning
* Logs: pm2 logs llm-gateway
* Status: pm2 status
*/
module.exports = {
apps: [
{
name: 'llm-gateway',
script: 'packages/gateway/dist/server.js',
cwd: '/opt/llm-gateway',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
PORT: 3103,
DATABASE_URL: process.env.DATABASE_URL || 'postgresql://llm:llm_secure_2026@82.165.222.127:5432/llm_gateway',
TIP_DATABASE_URL: process.env.TIP_DATABASE_URL || 'postgresql://tip:tip_prod_2026@217.154.82.179:5433/transceiver_db',
OLLAMA_URL: 'http://192.168.178.213:11434',
LOG_LEVEL: 'info',
GITEA_URL: 'http://192.168.178.196:3000',
GITEA_TOKEN: '',
// LLM Provider Configuration
CLAUDE_BRIDGE_URL: 'http://localhost:3250',
CLAUDE_BRIDGE_ENABLED: 'true',
CLAUDE_CODE_URL: 'http://localhost:3250',
OPENAI_BRIDGE_URL: 'http://localhost:3251',
CHATGPT_BRIDGE_URL: 'http://localhost:3251',
COPILOT_BRIDGE_URL: 'http://localhost:3252',
LLM_PROVIDERS: 'claude,openai,chatgpt,copilot,cerebras,groq,mistral,nvidia',
// Subscription API Keys (add as needed)
OPENAI_API_KEY: '',
GITHUB_CODEX_TOKEN: '',
// Free LLM APIs (add keys as needed)
CEREBRAS_API_KEY: '',
GROQ_API_KEY: '',
MISTRAL_API_KEY: '',
NVIDIA_API_KEY: '',
OPENROUTER_API_KEY: '',
},
// Restart on crash, but not on intentional stop
autorestart: true,
watch: false,
max_memory_restart: '512M',
// Graceful shutdown: wait up to 10s for in-flight requests
kill_timeout: 10000,
// Log rotation
error_file: '/var/log/llm-gateway/error.log',
out_file: '/var/log/llm-gateway/out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
},
{
name: 'openai-bridge',
script: '/opt/openai-bridge/server.js',
cwd: '/opt/openai-bridge',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
OPENAI_BRIDGE_PORT: 3251,
OPENAI_API_KEY: '',
OPENAI_MODEL: 'gpt-4-turbo',
},
autorestart: true,
watch: false,
max_memory_restart: '256M',
kill_timeout: 5000,
error_file: '/var/log/llm-gateway/openai-bridge-error.log',
out_file: '/var/log/llm-gateway/openai-bridge-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
},
{
name: 'copilot-bridge',
script: '/opt/copilot-bridge/server.js',
cwd: '/opt/copilot-bridge',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
COPILOT_BRIDGE_PORT: 3252,
COPILOT_API_INTERNAL_PORT: 4141,
},
autorestart: true,
watch: false,
max_memory_restart: '256M',
kill_timeout: 5000,
error_file: '/var/log/llm-gateway/copilot-bridge-error.log',
out_file: '/var/log/llm-gateway/copilot-bridge-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
},
{
name: 'llm-learning',
script: 'packages/learning/src/index.ts',
interpreter: 'node',
interpreter_args: '--import tsx/esm',
cwd: '/opt/llm-gateway',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
DATABASE_URL: process.env.DATABASE_URL || 'postgresql://llm:llm_secure_2026@82.165.222.127:5432/llm_gateway',
GATEWAY_URL: 'http://localhost:3103',
},
autorestart: true,
watch: false,
max_memory_restart: '256M',
kill_timeout: 5000,
error_file: '/var/log/llm-gateway/learning-error.log',
out_file: '/var/log/llm-gateway/learning-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
},
],
}