85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
/**
|
|
* ═══════════════════════════════════════════════════════════
|
|
* 🛡️ 铸渊运维守卫 · PM2 生态系统配置
|
|
* ═══════════════════════════════════════════════════════════
|
|
*
|
|
* 编号: ZY-OPS-001
|
|
* 端口: 3950
|
|
* 签发: 铸渊 · ICE-GL-ZY001
|
|
* 版权: 国作登字-2026-A-00037559
|
|
*
|
|
* 使用: pm2 start ops-agent/ecosystem.config.js
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
/**
|
|
* 加载 .env 文件为对象
|
|
*/
|
|
function loadEnvFile(filePath) {
|
|
const env = {};
|
|
try {
|
|
if (fs.existsSync(filePath)) {
|
|
const lines = fs.readFileSync(filePath, 'utf-8').split('\n');
|
|
for (const line of lines) {
|
|
const trimmed = line.trim();
|
|
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
const idx = trimmed.indexOf('=');
|
|
if (idx > 0) {
|
|
const key = trimmed.substring(0, idx).trim();
|
|
let val = trimmed.substring(idx + 1).trim();
|
|
if ((val.startsWith('"') && val.endsWith('"')) ||
|
|
(val.startsWith("'") && val.endsWith("'"))) {
|
|
val = val.slice(1, -1);
|
|
}
|
|
env[key] = val;
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error(`[OPS-PM2] 加载环境变量失败: ${e.message}`);
|
|
}
|
|
return env;
|
|
}
|
|
|
|
// 环境变量加载链(后面的覆盖前面的)
|
|
const envChain = [
|
|
path.join(__dirname, '..', '.env'),
|
|
path.join(__dirname, '..', '.env.app'),
|
|
'/opt/zhuyuan/app/.env.app',
|
|
path.join(__dirname, '.env.ops-agent'),
|
|
];
|
|
|
|
let mergedEnv = {};
|
|
for (const envFile of envChain) {
|
|
Object.assign(mergedEnv, loadEnvFile(envFile));
|
|
}
|
|
|
|
module.exports = {
|
|
apps: [{
|
|
name: 'ops-agent',
|
|
script: 'index.js',
|
|
cwd: __dirname,
|
|
instances: 1,
|
|
autorestart: true,
|
|
watch: false,
|
|
max_memory_restart: '128M',
|
|
env: {
|
|
NODE_ENV: 'production',
|
|
OPS_AGENT_PORT: 3950,
|
|
OPS_CHECK_INTERVAL_FAST: 300000,
|
|
OPS_CHECK_INTERVAL_DEEP: 3600000,
|
|
OPS_MAX_REPAIR_RETRIES: 3,
|
|
...mergedEnv
|
|
},
|
|
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
|
error_file: '/opt/zhuyuan/data/logs/ops-agent-error.log',
|
|
out_file: '/opt/zhuyuan/data/logs/ops-agent-out.log',
|
|
merge_logs: true,
|
|
exp_backoff_restart_delay: 100,
|
|
max_restarts: 15,
|
|
restart_delay: 3000
|
|
}]
|
|
};
|