Files
gongxue-base/ecosystem.config.cjs
T
wangziqi 3bcad138a1 fix(ops): 加固部署/代理/迁移脚本,生产环境安全默认
由 OCR(open-codereview.ai,deepseek-v4-flash)审查驱动修复:
- serve-proxy:API_TARGET 生效、SPA 404 语义、流式静态文件、hop-by-hop/超时/断连/穿越防护
- migrate.sh:密码不进 argv/不泄漏 pm2、原子锁防重入、DML-only 事务说明、就绪诊断
- deploy.sh/CI:保护 .env、总是 npm ci(迁移依赖 devDeps)、健康检查、并发锁
- ecosystem/oxlint/.env.example:优雅停机、React 版本对齐、TRUST_PROXY 说明

Reviewed-by: OCR (open-codereview.ai)
2026-08-09 21:29:22 +08:00

39 lines
1.2 KiB
JavaScript

// PM2 进程配置 — 恭学教育
// 用法: pm2 startOrReload ecosystem.config.cjs --update-env
// 前提: 在项目根目录执行;也可通过 DEPLOY_DIR 指定项目目录
// 生产环境配置写在项目根目录 .env,由 Nest ConfigModule 读取
// 前端构建产物 apps/admin/dist 交给 Nginx 托管,不再用 PM2 启动前端
const path = require('path');
const DEPLOY_DIR = process.env.DEPLOY_DIR || __dirname;
const LOG_DIR = path.join(DEPLOY_DIR, 'logs');
module.exports = {
apps: [
{
name: 'gongxue-backend',
cwd: DEPLOY_DIR,
script: 'apps/server/dist/main.js',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
},
// 内存限制
max_memory_restart: '512M',
max_restarts: 10,
restart_delay: 5000,
// 优雅停机:给 Nest 时间排空请求/连接
kill_timeout: 5000,
listen_timeout: 8000,
// 日志(绝对路径,与启动目录无关)
error_file: path.join(LOG_DIR, 'backend-error.log'),
out_file: path.join(LOG_DIR, 'backend-out.log'),
log_date_format: 'YYYY-MM-DD HH:mm:ss',
autorestart: true,
watch: false,
},
],
};