Skip to main content

🚀 PM2 ile Ubuntu Üzerinde Node.js Ortamı Kurulumu ve Yönetimi


💡 Bu Rehberde Ne Öğreneceksiniz

Bu rehberde, Node.js uygulamalarınızı Ubuntu sanal sunucularda (örnek: Rabisu Bulut Sanal Makinesi) güvenli, ölçeklenebilir ve kesintisiz çalışacak hale getirmeyi öğreneceksiniz. PM2’nin Küme Modu ile tüm CPU çekirdeklerini kullanarak performansı artıracak, pm2 reload komutuyla sıfır kesintili güncellemeler yapacak ve log ile güvenlik yapılandırmalarını en iyi şekilde uygulayacaksınız.


⚙️ Gereksinimler

  • Ubuntu 22.04+ sanal sunucu
  • Root olmayan, sudo yetkili kullanıcı
  • Node.js ve npm (tercihen nvm ile kurulmuş)
  • Uygulama dizini (örnek: /var/www/rabisu-node-app)
  • Güvenlik duvarı (UFW)

🔧 Adım 1: PM2 Kurulumu

PM2’yi global olarak yükleyin:

npm install pm2 -g

Kurulumu doğrulayın:

pm2 --version

PM2 sürümünü gösteriyorsa, kurulum başarıyla tamamlanmıştır.


🌐 Adım 2: Test İçin Node.js Uygulaması Oluşturma

Bir test uygulaması dizini oluşturun:

mkdir tr-pm2-app && cd tr-pm2-app
npm init -y
npm install express

app.js dosyasını oluşturun:

const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req, res) => res.send('PM2 ile Merhaba!'));

process.on('SIGINT', () => {
console.log('SIGINT alındı. Sunucu kapatılıyor.');
process.exit(0);
});

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

PM2 ile başlatın:

pm2 start app.js

Durumu kontrol edin:

pm2 list

Uygulama “online” olarak görünüyorsa başarıyla çalışıyordur.


⚙️ Adım 3: Temel PM2 Komutları

KomutAçıklama
pm2 listTüm uygulamaları listeler
pm2 stop <isim>Uygulamayı durdurur
pm2 restart <isim>Yeniden başlatır
pm2 reload <isim>Kesintisiz yeniden başlatma
pm2 logs <isim>Gerçek zamanlı log takibi
pm2 monitCPU ve RAM izleme paneli
pm2 delete <isim>Süreci listeden kaldırır

pm2 reload komutu cluster modda zero-downtime (kesintisiz) yeniden yükleme sağlar.


💪 Adım 4: Küme (Cluster) Modu

Sunucunuzda birden fazla CPU çekirdeği varsa, PM2 bunları otomatik olarak kullanabilir:

pm2 start app.js -i max

-i max tüm çekirdekleri kullanarak yük dengelemesi yapar.

Uygulama güncellemesinden sonra:

pm2 reload app

PM2, her iş parçacığını sırayla yeniden başlatarak trafik kesintisi olmadan kodu yeniler.


🔁 Adım 5: Sunucu Yeniden Başlatıldığında Otomatik Çalışma

Sunucu yeniden açıldığında uygulamanın otomatik başlaması için:

pm2 startup

Komut çıktısında yer alan sudo env PATH=... satırını çalıştırın. Sonra süreci kaydedin:

pm2 save

Bu işlemden sonra PM2, sistem açılışında uygulamaları otomatik başlatacaktır.


⚙️ Adım 6: ecosystem.config.js ile Yapılandırma

Uygulama yapılandırmasını merkezi bir dosyada yönetmek için:

pm2 ecosystem

Dosyayı düzenleyin:

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

Çalıştırın:

pm2 start ecosystem.config.js --env production
pm2 save

watch: false, üretim ortamında gereksiz yeniden başlatmaları önler.


🧱 Adım 7: Log Yönetimi

Log dosyaları zamanla büyür; disk alanını korumak için döngü modülünü kurun:

pm2 install pm2-logrotate

Bu modül logları otomatik döndürür ve eski dosyaları siler.


🔒 Adım 8: Güvenlik ve Üretim Önerileri

Root Olmayan Kullanıcıyla Çalışın: Root hesabı yerine uygulama özelinde bir kullanıcı oluşturun:

adduser nodeapp

UFW Güvenlik Duvarı: Yalnızca gerekli portları açın:

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

Reverse Proxy (Nginx) Kullanın:

  • HTTPS trafiğini yönetin
  • Node.js uygulamasını doğrudan internete açmayın
  • Statik içerikleri hızlıca servis edin

.env Dosyası ile Gizli Veriler: Veritabanı şifreleri ve API anahtarlarını .env dosyasında saklayın ve .gitignore ekleyin.


❓ Sıkça Sorulan Sorular (SSS)

1. PM2 neden tercih edilir?

Node.js uygulamalarını sürekli çevrimiçi tutar, hata sonrası otomatik yeniden başlatır ve cluster mod desteği sağlar.

2. Sunucu açılışında uygulama neden başlamıyor?

pm2 startup ve pm2 save komutlarını eksiksiz çalıştırdığınızdan emin olun.

3. PM2 ve Docker farkı nedir?

PM2 süreçleri yönetir, Docker ortamı izole eder. En iyi yöntem: Docker içinde PM2 (pm2-runtime) kullanmaktır.

4. Loglar diski dolduruyor, ne yapmalıyım?

pm2 install pm2-logrotate modülüyle log döngüsünü etkinleştirin.

5. Küme modu performansı nasıl etkiler?

Sunucudaki tüm çekirdekleri kullanarak CPU verimliliğini %100’e çıkarır.


🏁 Sonuç

Tebrikler 🎉 Artık Node.js uygulamanız PM2 ile tam anlamıyla üretim ortamına hazır! Sıfır kesintiyle yeniden yükleme, log döngüsü, otomatik başlatma ve güvenlik önlemleriyle sağlam bir yapı kurdunuz.

💡 Uygulamanızı şimdi Rabisu Bulut Platformu üzerinde birkaç dakika içinde yayınlayabilirsiniz.