Ana içeriğe geç

🚀 Node.js PM2 Kurulumu: Ubuntu VPS Üzerinde Üretim Ortamı Yapılandırması

Node.js uygulamalarını node app.js ile çalıştırmak geliştime için yeterlidir.
Ama üretim ortamlarında çökme, yeniden başlatma ve bakım anlarında kesinti yaşanır.
İşte PM2 bu noktada devreye girer:

PM2 = otomatik yeniden başlatma + küme modu + log yönetimi + kesintisiz deploy.

Bu rehberde Ubuntu VPS üzerinde PM2 kullanarak tam üretim ortamı kurulumu yapacağız.


📌 Bu Rehberde Ne Öğreneceksiniz?

  • PM2’nin ne olduğu ve neden üretimde zorunlu olduğu
  • Cluster Mode ile tüm CPU çekirdeklerini kullanma
  • Sıfır kesintili deploy (pm2 reload)
  • Sunucu reboot sonrası otomatik başlatma
  • Ecosystem dosyasıyla kurumsal yapılandırma
  • Güvenlik: reverse proxy, UFW, root dışı kullanıcı
  • pm2-logrotate ve izleme araçları
  • SSS + sorun çözme ipuçları

1. Ön Koşullar ve PM2 Kurulumu

Ön Koşullar

  • Ubuntu VPS
  • Sudo yetkili, root olmayan kullanıcı
  • Node.js + npm (tercihen NVM ile kurulu)
  • Güvenlik duvarı (UFW) yapılandırılmış

PM2 Kurulumu

npm install -g pm2

Bu komut PM2’yi sistem genelinde kullanıma açar.

Kurulum kontrolü:


pm2 --version

2. Node.js Uygulaması Oluşturma ve PM2 ile Başlatma

Dizin Oluşturma


mkdir rabisu-app
cd rabisu-app

Express Kurulumu


npm init -y
npm install express

app.js dosyası


// app.js
const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
res.send("Rabisu PM2 Testi");
});

// Zarif kapanış için gerekli
process.on('SIGINT', () => {
console.log("SIGINT alındı. Zarifçe kapanıyor.");
process.exit(0);
});

app.listen(PORT, () => {
console.log(`Sunucu ${PORT} portunda dinliyor`);
});

Bu dosya basit bir HTTP server kurar. SIGINT handler’ı kesintisiz güncelleme için gereklidir.

PM2 ile Başlatma


pm2 start app.js

3. PM2 Yönetim & İzleme

Temel Komutlar

KomutAçıklama
pm2 listTüm süreçleri gösterir
pm2 stop <id/name>Süreci durdurur
pm2 restart <id/name>Yeniden başlatır
pm2 reload <id/name>Kesintisiz (zero-downtime) reload
pm2 logs <id/name>Canlı log çıktısını gösterir
pm2 monitCPU ve bellek kullanımını izler
pm2 delete <id/name>Süreci tamamen siler

Hata ayıklamada en önemli komut:


pm2 logs app

4. Üretim İçin PM2 Yapılandırması

A. Küme Modu (Cluster Mode)

Node.js tek çekirdek kullanır. Cluster Mode → tüm CPU çekirdeklerini otomatik kullanır.


pm2 start app.js -i max

B. Sıfır Kesintili Güncelleme (Zero-Downtime Reload)


pm2 reload app

Reload → her worker’ı teker teker günceller. Kullanıcı kesinti yaşamaz.

C. Sunucu Reboot Sonrası Otomatik Başlatma

SYSTEMD betiği üret:


pm2 startup

PM2’nin verdiği komutu aynen çalıştır.

Çalışan süreçleri kaydet:


pm2 save

D. ecosystem.config.js ile Kurumsal Yapılandırma


pm2 ecosystem

Örnek dosya:


module.exports = {
apps: [{
name: "rabisu-app",
script: "./app.js",
instances: "max",
exec_mode: "cluster",
watch: false,
env_production: {
NODE_ENV: "production",
PORT: 3000
}
}]
}

Başlatma:


pm2 start ecosystem.config.js --env production

5. Güvenlik ve En İyi Uygulamalar

A. Uygulama Root Olarak Çalışmasın

Yeni kullanıcı oluşturun ve PM2’yi o kullanıcıya bağlayın.


pm2 startup -u rabisu

B. Reverse Proxy (Nginx) KULLANIN

Node.js portuna direkt erişim yasak olmalı. Trafiği Nginx yönetmeli.

Güvenlik duvarı:


sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

C. Ortam Değişkenleri – .env Kullanımı


DB_PASS=supersecret
API_KEY=xxxxxx

.gitignore içine ekle:


.env

D. pm2-logrotate ile Logların Disk Doldurmasını Engelle


pm2 install pm2-logrotate

6. Sıkça Sorulan Sorular (SSS)

1. PM2 ile Docker birlikte kullanılmalı mı?

Evet. En iyi pratik: Docker içinde pm2-runtime.

2. pm2 restart yerine neden pm2 reload?

Restart → kesinti. Reload → sıfır kesinti.

3. pm2 save ne zaman çalıştırılır?

Her yeni uygulama eklediğinde veya kaldırdığında.

4. Cluster Mode ne işe yarar?

Tüm CPU çekirdeklerini otomatik kullanır → 3–5 kat daha yüksek performans.

5. PM2 neden üretim için zorunlu?

Node tek işlemli olduğundan çökme, reboot, deploy gibi durumlarda PM2 olmadan sürekli kesinti olur.


🎯 Sonuç

Bu birleşik ve geliştirilmiş rehber ile Node.js uygulamanızı kesintisiz çalışan, ölçeklenebilir ve güvenli bir üretim mimarisine dönüştürmüş olursunuz.

Dilersen Rabisu Bulut üzerinde bir VPS oluşturup bu yapılandırmayı hemen uygulayabilirsin. 🚀🔥