PM2 Nedir? Node.js Uygulamalarını Yönetme

PM2 Nedir? Node.js Uygulamalarını Yönetme

Kisaca

PM2, Node.js uygulamalarini uretimde 7/24 ayakta tutan acik kaynak bir surec yoneticisidir: uygulama coktuginde otomatik kaldirir, sunucu yeniden baslayinca tekrar ayaga kaldirir, tum cekirdekleri kullanan kume (cluster) modu ve sifir kesintiyle guncelleme saglar. Bu rehberde kurulumdan ekosistem dosyasina, izlemeden log yonetimine kadar pratik kullanimi adim adim isliyoruz.

  • Tek komutla baslat, listele, yeniden baslat; pm2 startup + pm2 save ile reboot dayanikli hale getir.
  • ecosystem.config.js ile tum ayarlari versiyonlanabilir tek dosyada topla.
  • Kume modu + pm2 reload ile cok cekirdekten yararlan ve kesintisiz dagitim yap.

PM2, Node.js uygulamalarını üretimde çalıştırmak için tasarlanmış güçlü bir süreç yöneticisidir (process manager). Uygulamanızı arka planda (daemon) çalıştırır, çöktüğünde otomatik yeniden başlatır, sunucu yeniden başladığında tekrar ayağa kaldırır ve log yönetimi sağlar. Node.js ile üretime geçen herkesin bilmesi gereken temel araçtır. Bu rehberde PM2’nin ne işe yaradığını, nasıl kurulup yapılandırıldığını ve üretimde nasıl doğru kullanılacağını adım adım anlatıyoruz.

PM2 ile uygulamalarınızı kesintisiz çalıştırmak için root erişimi olan bir VPS/sunucu idealdir; paylaşımlı bir ortamda kalıcı daemon çalıştırma esnekliği genelde olmaz.

PM2 Ne İşe Yarar?

node app.js ile başlatılan bir uygulama, terminal kapanınca durur ve çökerse kendiliğinden geri gelmez. PM2 bu sorunları çözer: uygulamayı kalıcı bir servis gibi çalıştırır, beklenmedik hatalarda otomatik yeniden başlatır, birden fazla kopya (cluster) çalıştırarak çok çekirdekten yararlanır ve merkezi log tutar. Böylece Node.js uygulamanız üretim kalitesinde, kesintisiz çalışır.

Özetle PM2’nin çözdüğü dört temel sorun şudur:

Mail hosting 1 ay ücretsiz
  • Kalıcılık: Uygulama, SSH oturumu kapansa da arka planda çalışmaya devam eder.
  • Dayanıklılık: Süreç çökerse saniyeler içinde otomatik yeniden başlatılır; sunucu reboot olursa tekrar ayağa kalkar.
  • Ölçeklenebilirlik: Kume modu sayesinde tek bir Node sürecinin tek çekirdekle sınırlı kalması sorunu aşılır, tüm CPU çekirdekleri kullanılır.
  • Gözlemlenebilirlik: Merkezi loglar, gerçek zamanlı CPU/bellek izleme ve süreç durumu tek yerden takip edilir.

PM2 Kurulumu ve Temel Komutlar

PM2, npm üzerinden global olarak kurulur. Önce sunucunuzda güncel bir Node.js sürümü bulunduğundan emin olun, ardından:

# Global kurulum
npm install pm2@latest -g

# Uygulamayi baslat (isimlendirmek iyi bir aliskanliktir)
pm2 start app.js --name api

# Calisan surecleri listele
pm2 list

# Tek bir surecin detayli durumu
pm2 show api

# Canli loglari izle
pm2 logs

# Yeniden baslat / durdur / sil
pm2 restart api
pm2 stop api
pm2 delete api

pm2 list çıktısında her uygulama için durum (online/stopped/errored), yeniden başlatma sayısı, CPU ve bellek kullanımı gibi bilgileri tek bakışta görürsünüz. --name ile isim vermek, ileride komutları PID yerine okunaklı bir adla çalıştırmanızı sağlar.

ecosystem.config.js: Tüm Ayarları Tek Dosyada Toplayın

Komut satırından bayrak bayrak ayar girmek küçük projelerde yeterli olsa da, üretimde tercih edilen yöntem bir ekosistem dosyası kullanmaktır. Bu dosya, uygulamanızın tüm yapılandırmasını sürüm kontrolüne (git) eklenebilir, tekrarlanabilir tek bir yerde toplar. Dosya adının .config.js ile bitmesi gerekir ki PM2 onu yapılandırma dosyası olarak tanısın.

// ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "api",
      script: "./app.js",
      instances: "max",          // tum CPU cekirdeklerini kullan
      exec_mode: "cluster",      // sifir kesintili reload icin sart
      max_memory_restart: "500M",// bellek bu siniri asarsa yeniden baslat
      watch: false,              // uretimde kapali tutun
      merge_logs: true,          // tum worker'lar ayni log dosyasina yazsin
      env: {
        NODE_ENV: "production",
        PORT: 3000
      }
    }
  ]
};

Bu dosyayla artık tek komutla başlatabilirsiniz:

pm2 start ecosystem.config.js

Buradaki max_memory_restart ayarı önemlidir: uygulamanızda yavaş bir bellek sızıntısı (memory leak) varsa, süreç belirlediğiniz sınırı aştığında PM2 onu otomatik yeniden başlatarak sunucuyu koruma altına alır. Değerler K (kilobayt), M (megabayt) veya G (gigabayt) birimiyle verilir.

Kume (Cluster) Modu ve Sıfır Kesintili Güncelleme

Node.js varsayılan olarak tek iş parçacığıyla çalışır; yani 8 çekirdekli bir sunucuda tek node app.js süreci yalnızca bir çekirdeği kullanır. PM2’nin kume modu, uygulamanızın birden çok kopyasını çalıştırıp gelen istekleri bunlar arasında dağıtarak bu sorunu çözer:

# Mevcut cekirdek sayisi kadar kopya baslat
pm2 start app.js -i max

# Belirli sayida kopya (orn. 4)
pm2 start app.js -i 4

Kume modunun ikinci büyük faydası sıfır kesintili dağıtımdır. Üretimde yeni bir sürüm yayınlarken pm2 restart yerine pm2 reload kullanın:

# Kesintisiz guncelleme: yeni worker'lar hazir olunca eskiler kapatilir
pm2 reload api

Aradaki fark şudur: restart süreci durdurup yeniden başlatır ve bu kısacık an boyunca istekler düşer. reload ise önce yeni worker’ları ayağa kaldırır, hazır olmalarını bekler, ardından eskileri kapatır; kullanıcılar hiçbir kesinti hissetmez. Bu özellik yalnızca exec_mode: "cluster" ayarıyla çalışır.

Sunucu Yeniden Başlasa Bile Çalışsın

Uygulamanın sunucu reboot’unda otomatik ayağa kalkması için sıralama önemlidir:

# 1) Onyukleme scriptini uret (ciktidaki komutu calistir)
pm2 startup

# 2) Uygulamalari baslat (yukarida yaptiysaniz atlayin)

# 3) Mevcut surec listesini dondur
pm2 save

Önce pm2 startup çalıştırıp çıktıdaki komutu (genelde sudo ile başlayan systemd kaydı) uygulamalı, sonra pm2 save ile mevcut durumu kaydetmelisiniz; aksi hâlde reboot sonrası uygulamalar gelmez. pm2 save, o anda çalışan süreç listesini diske yazar ve sunucu açıldığında PM2 bu listeyi geri yükler.

İzleme ve Log Yönetimi

PM2, terminalden ayrılmadan gerçek zamanlı izleme sunar. Etkileşimli bir pano açmak için:

# Gercek zamanli CPU/bellek panosu
pm2 monit

# Belirli bir uygulamanin loglari
pm2 logs api --lines 100

Loglar varsayılan olarak ~/.pm2/logs altında, her uygulama için ayrı çıktı (out) ve hata (error) dosyaları biçiminde tutulur. Uzun süre çalışan uygulamalarda bu dosyalar şişebilir; bunun önüne geçmek için pm2-logrotate modülünü kurmanız önerilir:

# Log dondurme modulu
pm2 install pm2-logrotate

# Ornek ayarlar: 10 MB'da bol, 7 dosya tut, sikistir
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true

Bu modül, log dosyaları belirlenen boyuta ulaştığında otomatik olarak yenisini açar, eskilerini sıkıştırır ve diskin dolmasını engeller. Üretim sunucularında neredeyse zorunlu bir adımdır.

PM2’yi Diğer Yöntemlerle Karşılaştırma

Node.js’i üretimde ayakta tutmanın tek yolu PM2 değildir. Hangi aracın size uygun olduğunu görmek için kısa bir karşılaştırma:

Özellik PM2 systemd Forever
Otomatik yeniden başlatma Var Var Var
Reboot dayanıklılığı pm2 startup + save Doğal (unit dosyası) Ek yapılandırma gerekir
Kume (cluster) modu Yerleşik Yok Yok
Sıfır kesintili reload Var (cluster) Sınırlı Yok
Gerçek zamanlı izleme (CPU/bellek) pm2 monit Harici araç gerekir Yok
Kurulum kolaylığı Çok kolay (npm) Orta (unit dosyası) Kolay
Ek kaynak yükü Daemon çalışır Yok (OS bileşeni) Düşük
Geliştirme/bakım durumu Aktif Aktif Pasif (önerilmez)

Pratik özet: Node geliştiricilerinin çoğu için en zengin ve en pratik seçenek PM2’dir; kurulumu dakikalar sürer ve kume, izleme, log yönetimi gibi işleri tek araçta toplar. Saf işletim sistemi entegrasyonu ve sıfır ek yük istiyorsanız systemd sağlam bir alternatiftir. Forever ise artık aktif geliştirilmediğinden yeni projeler için önerilmez.

Dikkat Edilmesi Gerekenler

  • Reboot dayanıklılığı için sıra: önce pm2 startup (çıktıdaki komutu çalıştır), sonra uygulamaları başlat, en son pm2 save.
  • pm2 startup bir komut üretir; o komutu çalıştırmazsanız otomatik başlatma aktif olmaz.
  • PM2’yi güncellediğinizde bellekteki daemon’ı da güncelleyin: pm2 update.
  • Üretimde watch özelliğini kapalı tutun; dosya değişikliğinde yeniden başlatma, geliştirme ortamı içindir.
  • Yeni sürüm yayınlarken kesintiyi önlemek için pm2 restart yerine pm2 reload tercih edin (cluster modunda).
  • Disk dolmaması için pm2-logrotate modülünü kurmayı ihmal etmeyin.

PM2’yi bir ters proxy (Nginx gibi) arkasında çalıştırıp uygulamanızı doğrudan internete açmak yerine 443/80 portunu proxy üzerinden yönlendirmek hem güvenlik hem de SSL yönetimi açısından iyi bir uygulamadır. SSL ihtiyacınız için SSL sertifikası seçeneklerine göz atabilirsiniz.

Sıkça Sorulan Sorular

PM2 ücretsiz mi?

Evet, PM2 açık kaynaklı ve ücretsizdir. Çekirdek tüm özellikleri (kume modu, otomatik yeniden başlatma, log yönetimi, izleme) ücretsiz sürümde yer alır; PM2 Plus adlı isteğe bağlı bulut tabanlı izleme servisi ise ayrı ve ücretlidir.

PM2 sadece Node.js için mi?

Ağırlıklı olarak Node.js için tasarlanmıştır, ancak Python, PHP, Ruby gibi diğer dillerle yazılmış süreçleri de yönetebilir. Yine de en güçlü olduğu yer Node.js ekosistemidir.

Reboot sonrası uygulamam gelmiyor, ne yapmalıyım?

Sıralamayı kontrol edin: önce pm2 startup çalıştırıp çıktıdaki komutu uygulamalı, uygulamalarınız çalışır durumdayken pm2 save ile listeyi kaydetmelisiniz. pm2 save yapılmadan reboot olursa, PM2 hangi uygulamaları başlatacağını bilemez.

Kume (cluster) modu nedir?

Uygulamanın birden çok kopyasını aynı anda çalıştırıp gelen istekleri bu kopyalar arasında dağıtarak çok çekirdekli sunucularda tüm CPU gücünü kullanma modudur. pm2 start app.js -i max ile etkinleştirilir.

pm2 restart ile pm2 reload arasındaki fark nedir?

restart süreci durdurup yeniden başlatır ve bu kısa an boyunca kesinti olur. reload ise önce yeni worker’ları ayağa kaldırıp hazır olmalarını bekler, sonra eskileri kapatır; böylece sıfır kesintiyle güncelleme yapılır. reload yalnızca cluster modunda çalışır.

Logları nerede görürüm?

Canlı logları pm2 logs ile izlersiniz. Dosyalar ise genellikle ~/.pm2/logs altında, her uygulama için ayrı çıktı ve hata dosyaları olarak tutulur.

Log dosyaları çok büyüyor, nasıl yönetirim?

pm2 install pm2-logrotate komutuyla log döndürme modülünü kurun. Bu modül, log dosyaları belirlediğiniz boyuta ulaştığında otomatik olarak yenisini açar, eskilerini sıkıştırır ve diskin dolmasını önler.

ecosystem.config.js dosyası şart mı?

Zorunlu değildir; küçük projelerde komut satırı yeterlidir. Ancak üretimde önerilir; tüm ayarları (isim, kume, bellek sınırı, ortam değişkenleri) sürüm kontrolüne eklenebilen tek bir dosyada toplar ve pm2 start ecosystem.config.js ile tutarlı başlatma sağlar.

PM2 için nasıl bir sunucuya ihtiyacım var?

PM2’nin kalıcı bir daemon çalıştırması ve sistem servisi kaydı yapması gerektiğinden, root/sudo erişimi olan bir VPS veya sunucu uygundur. Paylaşımlı hosting ortamlarında bu esneklik genellikle bulunmaz.

Kesintisiz Node.js İçin Sunucu

PM2 ile uygulamalarınızı 7/24 çalıştırın; root erişimi, güçlü işlemci ve %99.9 uptime ile Alastyr VPS altyapısında.

VPS/Sunucu Çözümleri →

Türkiye'nin En Çok Tavsiye Edilen Domain, Hosting ve Bulut Servis Sağlayıcısı
İnternet sitesi Alastyr İnternet Sitesi
Yazı oluşturuldu 497

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön