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

Deployment Next.js pe VPS cu PM2 și Nginx: Ghid practic fără bătăi de cap

De Gabriela Neagu, 31 mai 2026 · 4 vizualizări · 2 like-uri

Postat 31 mai 2026
nginx
server {
    listen 80;
    server_name domeniul-tau.ro www.domeniul-tau.ro;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Să fim sinceri: Vercel e genial până când îți vine prima factură umflată de bandwidth sau serverless execution times. Am mutat recent un proiect de e-commerce cu vreo 12.000 de utilizatori unici pe lună de pe Vercel pe un VPS de 6 euro de la Hetzner și am redus costurile aproape de zero. În ghidul ăsta îți arăt cum să ridici un Next.js pe VPS-ul tău cu PM2, Nginx, SSL moca și loguri care nu-ți umplu discul.

De ce VPS și nu Vercel? Trade-off-ul sincer

Vercel îți oferă DX-ul ăla de vis: push to main și gata, site-ul e live. Pe VPS trebuie să îți configurezi singur reverse proxy-ul, să ai grijă de securitate și să gestionezi memoria. Merge super bine pentru bugete reduse și control total, dar e nasol dacă nu vrei să-ți bati capul cu update-uri de OS sau configurat firewalls.

Dacă ai imagini multe sau API-uri care rulează des, pe Vercel treci repede de free tier și ajungi la sute de dolari. Pe un VPS ieftin cu 4GB RAM, Next.js rulează brici dacă e optimizat cum trebuie.

PM2 pentru zero-downtime

Ca să nu moară procesul când dă o eroare random în producție, folosim PM2. Comanda clasică npm run start pornește un singur thread. Dacă ăla pică, s-a terminat joaca.

Cu PM2 pornim aplicația în cluster mode, ceea ce înseamnă că rulează pe mai multe nuclee ale procesorului. Creează un fișier ecosystem.config.js în rădăcina proiectului:

module.exports = {
  apps: [{
    name: "next-app",
    script: "node_modules/next/dist/bin/next",
    args: "start",
    instances: "max",
    exec_mode: "cluster",
    env: {
      PORT: 3000,
      NODE_ENV: "production"
    }
  }]
}

Când faci deploy la o versiune nouă, rulezi pm2 reload all. Comanda asta închide și redeschide procesele pe rând (rolling reload), deci utilizatorii nu vor vedea nicio secundă de downtime.

Nginx ca reverse proxy și HTTPS

Nginx stă în fața lui PM2. Preia traficul de pe portul 80 (sau 443) și îl trimite intern către portul 3000.

După ce ai instalat Nginx pe server (apt install nginx), configurează un server block nou. Ai un exemplu curat în secțiunea de cod de mai jos. Configul trimite corect IP-ul real al clientului, altfel în logurile aplicației o să vezi doar IP-ul intern 127.0.0.1.

După ce ai salvat configul și ai dat un restart la Nginx, rulează sudo certbot --nginx -d domeniul-tau.ro. Certbot își face singur magia: modifică fișierul de Nginx, adaugă certificatele Let's Encrypt și configurează redirect-ul automat de la HTTP la HTTPS. Totul moca.

Problema ignorată: Logurile care îți mănâncă discul

Am pățit-o la un proiect mai vechi. M-am trezit duminică dimineața cu serverul blocat complet pentru că PM2 scrisese 40GB de loguri în ~/.pm2/logs/combined.log. Next.js poate fi extrem de guraliv în producție.

Soluția e modulul pm2-logrotate. Îl instalezi cu o singură comandă:

pm2 install pm2-logrotate

Apoi îl configurezi să păstreze doar ultimele 10 fișiere de maxim 10MB fiecare:

pm2 set pm2-logrotate:max_size 10M pm2 set pm2-logrotate:retain 10

Simplu, curat, dormi liniștit noaptea fără frica de disk space full.

La final, ai un setup care te costă cât două cafele pe lună și duce mii de useri simultan fără să transpire. Voi ce folosiți pentru Next.js în producție? Rămâneți pe Vercel sau vă place să vă murdăriți pe mâini prin terminal?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

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