eduardweb.
DeploymentIntermediar#nextjs#devops#pm2#nginx#vps

Cum depoliezi Next.js pe VPS cu PM2 și Nginx: Zero Downtime și Certbot

De Delia Petre, 8 aug. 2026 · 9 vizualizări · 3 like-uri

Postat 8 aug. 2026
javascript
module.exports = {
  apps: [
    {
      name: 'next-app',
      script: 'node_modules/next/dist/bin/next',
      args: 'start',
      instances: 'max',
      exec_mode: 'cluster',
      wait_ready: true,
      listen_timeout: 5000,
      kill_timeout: 3000,
      env: {
        PORT: 3000,
        NODE_ENV: 'production'
      }
    }
  ]
};

Sătul să plătești zeci de dolari pe Vercel pentru orice proiect secundar sau client zgomotos? Am mutat recent o aplicație cu ~12k utilizatori lunari pe un VPS Hetzner de 5 euro și am scăzut factura la infrastructură semnificativ, păstrând în același timp deploys fără niciun secundă de downtime. Iată setup-ul pe care îl folosesc în producție și la ce să fii atent.

Trade-off-ul cinstit: Vercel vs VPS

N-o să mint, Vercel e genial pe partea de DX. Dai git push și totul merge de la sine. Însă când începi să ai trafic constant sau folosești Image Optimization intensiv, costurile cresc exponențial.

Un VPS îți oferă resurse dedicate și predictibilitate financiară. Trade-off-ul? Tu devii sysadmin. Ești responsabil de securitate, actualizările de OS, certificatele SSL și curățatul logurilor. Dacă ești ok să aloci 30 de minute pentru setup-ul inițial, investiția se amortizează din prima lună.

PM2 și secretul pentru Zero Downtime

Greșeala clasică pe care o văd când cineva mută Next.js pe VPS este folosirea comenzilor npm run start într-un screen sau pm2 restart app. Rulând pm2 restart, aplicația ta va fi picată timp de 2-5 secunde la fiecare release, exact în fereastra în care procesul vechi moare și cel nou își face bind pe port.

Soluția este să folosești PM2 în modul cluster și comanda pm2 reload. În loc să oprească toate instanțele dintr-o dată, PM2 le repornește secvențial. Ca să meargă impecabil fără să pierzi request-uri pe drum, adaugi setările wait_ready și listen_timeout în fișierul de configurare PM2.

Nginx Reverse Proxy și SSL în câteva minute

Next.js rulează pe portul 3000, dar nu vrei să expui portul ăsta direct în internet. Nginx acționează ca un scut în fața Node.js: se ocupă de terminarea TLS, oferă caching eficient și gestionează conexiunile HTTP/2.

O configurație de bază în /etc/nginx/sites-available/app trebuie doar să trimită proxy_pass către http://127.0.0.1:3000 și să paseze corect headerele Host și X-Forwarded-For.

După ce Nginx e pornit, HTTPS-ul devine banal. Rulezi sudo certbot --nginx -d domeniul-tau.ro și Certbot își modifică singur fișierul de Nginx, adaugă redirecționarea de la HTTP la HTTPS și configurează un cronjob automat pentru reînnoirea certificatului la 90 de zile.

Logrotate: Cum să nu ți se umple SSD-ul la 3 dimineața

Am pățit-o pe pielea mea acum vreo 3 ani pe un server de staging: un console.log uitat într-un endpoint apelat des a generat un fișier de log de 35GB într-o singură săptămână. Rezultatul? SSD plin 100%, baza de date s-a oprit, aplicația a crăpat.

Ca să eviți dezastrul ăsta cu PM2, instalează modulul lor nativ de rotație:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 7

Asta va păstra maxim 7 fișiere de log de câte 50MB fiecare. Când se depășește limita, logurile vechi sunt șterse automat.

Setup-ul ăsta rulează extrem de stabil pe un VPS cu 2GB RAM, având un consum mediu de sub 300MB RAM în idle. Voi mai folosiți Vercel pentru proiecte de clienți sau preferați controlul total al unui server propriu?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.