🚀 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ı
| Komut | Açıklama |
|---|---|
pm2 list | Tü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 monit | CPU ve RAM izleme paneli |
pm2 delete <isim> | Süreci listeden kaldırır |
pm2 reloadkomutu 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 maxtü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.