由 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)
39 lines
1.2 KiB
JavaScript
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,
|
||
},
|
||
],
|
||
};
|