Emriva.net

Node.js Uygulamasını VDS’e Deploy Etme (PM2 + Nginx)

Node.js uygulamasını Emriva VDS üzerinde PM2 ve Nginx reverse proxy ile yayınlayın. Adım adım yazılım deploy rehberi.

Yazılım & Deploy2 dk okumaSon güncelleme: 2026-08-15

Yazar

Yunus Emre Derin · Kurucu

Emriva Bilişim Medya Ve Reklamcılık kurucusu. VDS, dedicated sunucu ve web hosting altyapısı üzerinde ürün ve operasyon deneyimi.

Node.js uygulaması VDS’te nasıl durur?

Node süreci systemd veya PM2 altında yaşar; SSH kapanınca ölmeyecek. Nginx (veya Caddy) 80/443’ü alıp reverse proxy ile 127.0.0.1:3000’e iletir. Node’u root ve 80’de çalıştırmayın. Ortam değişkenleri .env, chmod 600.

Boyut: küçük API 2 vCPU / 2–4 GB. SSR (Next.js) ve build aynı makinede 4–8 GB. Build’i CI’da yapıp imaj/artifact kopyalamak üretim RAM’ini korur. next start yerine node server.js custom server ise PORT’u Nginx ile eşleyin. sharp ve puppeteer sistem kütüphanesi ister (libnss, fonts); apt logs okuyun. CLUSTER_WORKERS=1 ile başlayın. .env.production ve .env.local karışmasın. healthcheck 30 saniyede bir 200 dönmeli; 502’de Nginx upstream’i işaretler. Log’a istek gövdesi (kart, şifre) basmayın.

Node kurulumu ve uygulama ayağa kaldırma

nvm: curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash sonra nvm install --lts. Sistem paketi: NodeSource veya distro nodejs (sürüm eski olabilir). git clone, npm ci --omit=dev, npm run build (varsa).

Doğrudan: node dist/server.js. PM2: pm2 start dist/server.js --name api -i 1 (cluster’ı bellek yeteneğine göre). pm2 save && pm2 startup systemd. Port: PORT=3000. journalctl / pm2 logs. NODE_ENV=production unutulursa Next.js geliştirme bellek yer. native modül (bcrypt, sharp) için apt install -y build-essential python3. PM2 ecosystem.config.cjs içinde env_production ve max_memory_restart: '512M' kaçakları keser. cluster mode (-i max) websocket sticky olmadan oturum dağıtır; sticky veya Redis session kullanın. health endpoint /healthz Nginx health_check veya dış probe için. Uncaught exception için process.on loglayın ama sessizce yutmayın.

Nginx reverse proxy ve SSL

server { listen 443 ssl; server_name api.ornek.com; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } WebSocket için Upgrade başlıkları şarttır.

certbot --nginx -d api.ornek.com. ufw allow OpenSSH && ufw allow 'Nginx Full'. nginx -t && systemctl reload nginx. Uygulama 0.0.0.0 yerine 127.0.0.1 dinlesin ki Node portu dışarı açık kalmasın.

Teşhis ve boyut tablosu

502: Node düşmüş (pm2 status). 504: uzun istek, proxy_read_timeout. EADDRINUSE: eski süreç. native addon: build-essential ve python. UnhandledRejection süreci öldürür; PM2 kaldırır ama kök neden logdadır.

UygulamaRAMSüreçNot
Küçük Express API2 GB1 forkXeon giriş
Next.js SSR4–8 GB1–2build ayrı
Queue worker + API8 GBayrı PM2 appRedis
Çok uygulama16 GBsystemd sliceRyzen

Emriva ürün eşlemesi

Bu bölüm ürün eşlemesidir. Node üretim Xeon veya paralel işte Ryzen VDS, Ubuntu şablonu. Nginx reverse proxy ve Certbot yazıları tamamlayıcıdır. cPanel Node seçenekleri paylaşımlı pakette sınırlıdır; gerçek süreç VDS’tedir.

Destekte pm2 list, nginx -t ve dinlenen portu yazın; .env içeriğini yazmayın.