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

Cum am mutat un proiect Next.js de pe Vercel pe un VPS de 6$: PM2, Nginx și zero downtime

De Florin Manea, 23 iun. 2026 · 22 vizualizări · 3 like-uri

Postat 23 iun. 2026
javascript
module.exports = {
  apps: [
    {
      name: 'next-app',
      script: 'node_modules/next/dist/bin/next',
      args: 'start',
      instances: 'max',
      exec_mode: 'cluster',
      env_production: {
        NODE_ENV: 'production',
        PORT: 3000
      }
    }
  ]
};

Dacă te-ai săturat să plătești zeci de dolari pe Vercel pentru proiecte care abia au trecut de faza de MVP, mutarea pe un VPS este cel mai logic pas. Am făcut recent tranziția asta pentru un SaaS local cu aproape 15k utilizatori activi lunar. Am trecut de la o factură de $40 pe Vercel la un VPS de $6 la Hetzner, iar performanța e identică, dacă nu chiar mai bună.

Evident, pierzi confortul de a da doar git push și gata. Acum trebuie să te ocupi singur de procese, SSL și loguri, dar odată ce ai scriptul pus la punct, totul rulează brici.

De ce PM2 și cum obținem zero downtime?

Next.js rulează nativ ca un server de Node.js. Dacă dai doar npm run start și închizi terminalul, aplicația moare. Aici intervine PM2. El ține procesul activ și îl repornește dacă crapă ceva prin cod.

Dar cum facem deploy fără ca userii să vadă o eroare 502 timp de 10 secunde în timp ce se face build-ul?

Greșeala pe care o face multă lume e să ruleze npm run build direct pe server, pe același proces activ. Asta îți va bloca CPU-ul (mai ales pe un VPS cu 1 vCPU) și va opri aplicația. Soluția este să pornim aplicația în Cluster Mode. PM2 va rula mai multe instanțe ale aplicației și le va face restart pe rând (rolling restart) când facem deploy la codul nou.

Am lăsat mai jos un exemplu de ecosystem.config.js pe care îl folosesc în producție. Comanda de reload este simplă: pm2 reload ecosystem.config.js --env production.

Configurația de Nginx ca Reverse Proxy

PM2 rulează aplicația local pe portul 3000 (sau ce port ai ales tu). Nu vrei ca utilizatorii tăi să acceseze site-ul prin http://ip-ul-tau:3000. Nginx va sta în față, va prelua traficul de pe portul 80/443 și îl va trimite intern către portul 3000.

Iată un bloc simplu de configurație pentru Nginx (/etc/nginx/sites-available/default):

server {
    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;
    }
}

După ce salvezi, dai un nginx -t ca să te asiguri că nu ai greșit vreo virgulă, apoi systemctl restart nginx.

Trade-off-ul sincer: VPS vs Serverless

Să fim realiști. Pe VPS ai control total și costuri fixe mici. În schimb, dacă baza de date pică sau dacă proxy-ul se blochează, ești singur în fața monitorului la 2 dimineața. Pe Vercel ai infrastructură globală și edge functions fără să ridici un deget. Pentru proiecte mici și medii, VPS-ul bate însă orice la preț.

Cum eviți să îți umpli discul: Logrotate

Am pățit la un proiect vechi să mă trezesc cu site-ul blocat complet. Când am dat df -h, discul era 100% plin. Vinovatul? Logurile PM2 care adunaseră 15GB în câteva luni.

Pentru asta, instalează modulul de logrotate direct în PM2. E o singură comandă care îți va salva nopțile:

pm2 install pm2-logrotate

Acesta va tăia automat fișierele de loguri când ajung la 10MB și va păstra doar ultimele 30 de backup-uri. Nu trebuie să configurezi nimic altceva în plus.

SSL gratuit în 2 minute cu Certbot

Nici nu te gândi să plătești pentru un certificat SSL. Rulezi două comenzi și Certbot configurează automat HTTPS-ul în Nginx și își pune și un cronjob de auto-renew:

sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d domeniul-tau.ro -d www.domeniul-tau.ro

Alege opțiunea de redirect automat al traficului HTTP către HTTPS.

Voi ce folosiți pentru deployment-urile de Next.js? Rămâneți pe Vercel pentru ușurință sau preferați controlul unui VPS?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

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