module.exports = {
apps: [
{
name: 'my-next-app',
script: 'node_modules/next/dist/bin/next',
args: 'start',
instances: 2,
exec_mode: 'cluster',
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
PORT: 3000
}
}
]
};Vercel e comod: dai un push pe main și pleci la bere. Dar când am primit o factură de 380$ la un client cu vreo 14k sesiuni pe zi — mare parte cost de bandwidth pe imagini și serverless execution — am zis pas. Am mutat tot stack-ul pe o instanță de 12 euro de la Hetzner (4 vCPU, 8GB RAM), iar consumul mediu stă lejer sub 20%.
Nu e fizică cuantică, dar dacă sari peste câțiva pași de bază o să ai downtime la fiecare deploy sau o să-ți umpli discul cu loguri.
PM2 în cluster mode: secretul pentru zero downtime
Mulți fac greșeala să pornească Next.js pe VPS cu un simplu pm2 start npm --name "app" -- start. Dacă faci asta, la fiecare update pe care dai pm2 restart app, serverul Node se oprește complet vreo 3-4 secunde până pornește noul build. Userii care dau refresh în secunda aia văd un frumos 502 Bad Gateway.
Soluția este fișierul ecosystem.config.js configurat în mod cluster. În loc de restart, folosim pm2 reload ecosystem.config.js. PM2 pornește procesul nou, așteaptă să devină activ pe portul lui intern, direcționează traficul către el și abia apoi îl omoară elegant pe cel vechi. Pentru mașini mici, 2 instanțe sunt suficiente ca să acopere reload-ul fără să sufoce memoria.
Nginx și Certbot: reverse proxy curat
Nginx stă în față și preia tot traficul de pe porturile 80 și 443. Pentru Next.js, cel mai mare câștig de performanță îl ai dacă lași Nginx să servească folderul de statice direct din disc, sau măcar să pui un cache agresiv pe ruta /_next/static/.
Node.js e groaznic la servit fișiere statice mari la scară; e mult mai eficient să-l lași să facă doar SSR și API routes. Certbot rezolvă SSL-ul în fix două comenzi prin certbot --nginx -d domeniu.ro. Nu te complica cu certificate manuale, cronjob-ul generat de certbot își face singur renew când expiră termenul.
Atenție la discuri: modulul de logrotate
Am pățit acum vreo patru ani o fază clasică la un proiect de black friday: la 3 dimineața a crăpat tot pentru că fișierul ~/.pm2/logs/app-out.log ajunsese la 40 GB și a umplut partiția de root. Când Linux nu mai are spațiu să scrie fișiere temporare, crapă tot, inclusiv baza de date locală dacă o ai pe aceeași mașină.
Instalează imediat modulul intern din PM2: pm2 install pm2-logrotate. Îl setezi să facă rotire la fiecare 10MB și să păstreze maxim 7 arhive comprimate. Îți ia 30 de secunde și dormi liniștit.
Merită deranjul?
Trade-off-ul e sincer: pe VPS devii tu sysadmin. Dacă pică rețeaua în datacenter, dacă iese un zero-day în OpenSSL sau dacă uiți să faci un snapshot înainte de un apt upgrade, problema e exclusiv a ta. Pe Vercel sau Cloudflare Pages dai bani pentru liniște sufletească.
Dar dacă ai un proiect stabil, trafic constant și nu vrei să plătești o rată de leasing lunar doar pe serverless invocations, combinația asta e imbatabilă.
Voi mai țineți producția pe VPS sau ați cedat complet platformelor managed?