Add PM2 ecosystem config for server deployment

Runs `next start` under PM2 (fork mode, autorestart, 1G memory cap).
Config is .cjs because the package is ESM.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Julio Ruiz 2026-08-13 21:02:01 -05:00
parent e1bd3c7949
commit d9d156d0a8
2 changed files with 48 additions and 0 deletions

3
.gitignore vendored
View File

@ -46,6 +46,9 @@ next-env.d.ts
/media /media
/pastor-letters /pastor-letters
# PM2 logs
/logs
# SQLite database files # SQLite database files
*.db *.db
*.db-shm *.db-shm

45
ecosystem.config.cjs Normal file
View File

@ -0,0 +1,45 @@
// PM2 process definition for db-ministerial (Next.js + Payload CMS).
//
// The package is ESM ("type": "module"), so this config MUST be .cjs.
//
// Deploy flow on the server:
// pnpm install --frozen-lockfile
// cp .env.example .env # then set a real PAYLOAD_SECRET
// pnpm build # production build (.next/)
// pnpm import:pastors # one-time: load pastors from the CSV
// pm2 start ecosystem.config.cjs
// pm2 save # persist across reboots (see `pm2 startup`)
//
// Env vars (DATABASE_URI, PAYLOAD_SECRET, …) are read from the project's .env
// by Next.js automatically. Anything set in `env` below overrides that.
module.exports = {
apps: [
{
name: 'db-ministerial',
// Run the Next.js binary directly so PM2 doesn't depend on pnpm being
// on its PATH. Equivalent to `next start`.
script: 'node_modules/next/dist/bin/next',
args: 'start',
cwd: __dirname,
instances: 1,
exec_mode: 'fork',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
NODE_OPTIONS: '--no-deprecation',
PORT: 3000,
},
// Logs (relative to cwd). Create ./logs or change these paths.
error_file: './logs/db-ministerial-error.log',
out_file: './logs/db-ministerial-out.log',
merge_logs: true,
time: true,
},
],
}