🚀 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
| Komut | Açıklama |
|---|---|
pm2 list | Tü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 monit | CPU 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. 🚀🔥