PM2 ile Node.js Süreç Yönetimi ve Otomatik Yeniden Başlatma Rehberi

PM2 ile Node.js Süreç Yönetimi ve Otomatik Yeniden Başlatma Rehberi - Corelux
8 Haz 2026
Paylaş:

PM2 ile Node.js Süreç Yönetimi ve Otomatik Yeniden Başlatma Rehberi

Son Güncelleme: Mayıs 2026

PM2 (Process Manager - süreç yöneticisi) Node.js uygulamalarının sürekliliğini, izlenmesini ve otomatik yeniden başlatılmasını sağlayan güçlü bir araçtır. Bu makalede PM2'nin ne olduğunu, kurulumu, yapılandırma örnekleri, otomasyon (systemd ile), izleme ve log yönetimi ile sunucu üzerinde pratik kullanım senaryolarını öğrenerek VPS/VDS veya kiralık sunucu ortamlarınızı nasıl daha dayanıklı hale getirebileceğinizi öğreneceksiniz.

İçindekiler

PM2 Nedir?

PM2, Node.js uygulamaları için geliştirilmiş açık kaynaklı bir süreç yöneticisidir (process manager). Aşağıdaki temel işlevleri sağlar:

  • Sürekli Çalışma: Uygulama çökse bile otomatik yeniden başlatma ile uptime (çalışırlık süresi) sağlar.
  • Cluster Mode: Çok çekirdekli CPU'larda ölçeklendirme için birden fazla işlem (process) başlatır.
  • Log Yönetimi: Çıktı ve hata loglarını dosyalara yönlendirir ve günlükler üzerinde kolayca işlem yapılmasını sağlar.
  • İzleme: Bellek ve CPU kullanımını izler, dashboard veya CLI ile anlık bilgi sunar.

PM2; VPS, VDS, bulut sunucu veya kiralık sunucu (bare-metal) üzerinde Node.js uygulamalarını yönetmek için idealdir. Corelux uygulama sunucularında PM2 ile çalıştırılan uygulamalar yüksek erişilebilirlik elde eder. Daha ölçekli uygulamalar için Corelux'in Uygulama Sunucuları ve Sanal Sunucu hizmetleri düşünülebilir.

Kurulum ve Başlangıç

PM2 kurulumu genellikle Linux (Ubuntu, CentOS vb.) üzerinde npm ile yapılır. Aşağıda hızlı bir başlangıç adımı bulunmaktadır.

  1. Node.js ve npm Yükleme: Sunucunuzda node ve npm yüklü olmalıdır.
  2. PM2 Yükleme: Aşağıdaki komutla PM2'yi global olarak yükleyin:
sudo npm install -g pm2

Uygulamayı Başlatma: Örnek bir uygulamayı başlatmak için:

pm2 start app.js --name my-app

Çalışan Süreçleri Listeleme:

pm2 ls
pm2 status

Logları Görüntüleme:

pm2 logs my-app

Yapılandırma ve ecosystem.config.js

PM2'nin en güçlü özelliklerinden biri ecosystem.config.js dosyası ile prosedürlerin (process) merkezi olarak yönetilmesidir. Bu dosya içinde ortam değişkenleri (environment variables), yeniden başlatma davranışları ve cluster ayarları tanımlanır.

module.exports = {
  apps: [
    {
      name: "my-app",
      script: "app.js",
      instances: "max",
      exec_mode: "cluster",
      env: {
        NODE_ENV: "production"
      },
      max_memory_restart: "500M"
    }
  ]
}

Açıklamalar:

  • instances: "max" değeri CPU çekirdek sayısına göre otomatik ölçeklendirir.
  • exec_mode: "cluster" veya "fork" seçenekleriyle işlem modu belirlenir.
  • max_memory_restart: Bellek sınırı aşılırsa süreç tekrar başlatılır (örn. bellek sızıntılarına karşı koruma).

Ecosystem Dosyası ile Başlatma:

pm2 start ecosystem.config.js
pm2 save

pm2 save komutu mevcut süreç listesini kaydeder; otomatik yeniden başlatma için kullanılacaktır.

Monitoring ve Log Yönetimi

PM2; temel CLI araçlarına ek olarak pm2 monit ile anlık metrikler gösterir ve pm2 logs ile uygulama çıktılarını takip eder. Ayrıca PM2'nin Keymetrics (PM2 Plus) entegrasyonu ile uzak izleme yapılabilir.

  • pm2 monit: CPU ve bellek gibi metrikleri anlık gösterir.
  • pm2 logs: stdout ve stderr loglarını birleştirerek gösterir.

Log dosyalarının konumu genellikle şöyle görünür:

~/.pm2/logs/my-app-out.log
~/.pm2/logs/my-app-error.log

Log Döndürme (Log Rotation): Uzun süreli çalışan sistemlerde log dosyalarını döndürmek (rotate) önemlidir. PM2 Logrotate modülü kullanılabilir:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
  • Döndürme boyutu.
  • Saklanacak dosya sayısı (gün).

Otomatik Başlatma (systemd)

Sunucu yeniden başlatıldığında PM2 süreçlerinin otomatik başlaması için systemd entegrasyonu yapılmalıdır. PM2'nin sağladığı komutla systemd servis dosyası oluşturulabilir.

sudo pm2 startup systemd -u youruser --hp /home/youruser
# Ardından
pm2 save

Bu komut, /etc/systemd/system altında pm2-youruser.service benzeri bir servis oluşturur ve sunucu açılışında PM2'yi başlatır. Alternatif olarak manuel systemd unit dosyası şöyle olabilir:

[Unit]
Description=PM2 process manager
After=network.target

[Service]
User=youruser
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/bin:/usr/local/bin
Environment=PM2_HOME=/home/youruser/.pm2
ExecStart=/usr/local/bin/pm2 resurrect
ExecReload=/usr/local/bin/pm2 reload all
ExecStop=/usr/local/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Not: PM2_HOME dizinini doğru ayarlayın. systemd ile entegrasyon, özellikle otomatik yeniden başlatma ve sunucu bakımı sırasında kritik öneme sahiptir.

Kullanım Senaryoları

Aşağıda gerçek dünya senaryoları ve öneriler yer almaktadır.

  • Yüksek Trafikli API Sunucusu: Cluster modunda CPU çekirdek sayısı kadar instance çalıştırarak yatay ölçek sağlayın.
  • Uzun Süreli Arka Plan İşlemleri (Worker): Worker süreçlerini ayrı bir uygulama tanımı olarak yönetin; bellek sınırı belirleyin.
  • Zero Downtime Deploy (Kesintisiz Güncelleme): pm2 reload ile mevcut bağlantıları kesmeden kod güncellemesi yapın.
  • Log Merkezi Yönetimi: PM2 loglarını Filebeat/Fluentd ile toplayarak merkezi log yönetimi sağlayın.

Örnek Deploy Komutları:

git pull origin main
npm install --production
pm2 reload ecosystem.config.js --env production

PM2 vs systemd vs Docker (Kısa Karşılaştırma)

Özellik PM2 systemd Docker
İşlem Yönetimi Application-aware (Node.js odaklı) Genel servis yönetimi İzolasyon + paketleme
Otomatik Yeniden Başlatma Evet (pm2 resurrect, save) Evet (Restart=always) Evet (restart policy)
Log Yönetimi Yerel log ve modüller journald entegrasyonu Container stdout/stderr
Ölçeklenebilirlik Cluster mode ile yatay ölçek Servis tabanlı ölçekleme Container orchestration (Kubernetes) ile güçlü

Sıkça Sorulan Sorular

PM2 ile uygulamam neden sürekli yeniden başlatılıyor?

Genellikle uncaught exception (yakalanmamış istisna) ya da bellek sınırı nedeniyle max_memory_restart tetiklenmiş olabilir. pm2 logs ile stderr çıktısını kontrol edin ve pm2 show <app> ile restart sayısını inceleyin.

PM2 cluster modunda oturum bazlı (session) kullanıcı verileri nasıl yönetilir?

Cluster modunda her işlem kendi hafızasını kullanır; bu nedenle session verilerini paylaştırmak için Redis gibi merkezi bir oturum deposu kullanın (session store).

pm2 save ne işe yarar?

pm2 save, mevcut süreç listesini PM2 tarafından saklanan bir konfigürasyona yazar. Sunucu yeniden başladığında pm2 resurrect ile bu liste geri yüklenir; systemd startup komutuyla birlikte otomatik açılış sağlar.

PM2 logrotate nasıl yapılandırılır?

PM2'nin pm2-logrotate modülünü yükleyin ve boyut, saklama süresi gibi parametreleri pm2 set ile belirtin. Örnek: pm2 set pm2-logrotate:max_size 10M.

PM2 ile güvenlik için hangi önlemleri almalıyım?

PM2'yi çalıştıran kullanıcıyı sınırlayın, PM2_HOME izinlerini kontrol edin, process environment içinde gizli anahtarları koymayın (bunları vault veya ortam değişkeni yönetimi ile saklayın) ve sunucuda genel güvenlik sertleştirme (firewall, SELinux/AppArmor) uygulayın.

Sonuç

PM2, Node.js uygulamalarını yönetmek, ölçeklendirmek ve izlemek için eksiksiz bir çözümdür. Cluster modu, log yönetimi ve systemd entegrasyonu sayesinde hem küçük hem de büyük ölçekli projelerde uptime ve yönetim kolaylığı sağlar. Üretim ortamına geçirirken ecosystem.config.js ile yapılandırma, logrotate ile disk yönetimi ve systemd ile otomatik başlatma adımlarını uygulamanız önerilir.

Corelux olarak uygulama barındırma ihtiyaçlarınızda PM2 ile optimize edilmiş çözümler sunuyoruz. Daha ölçekli dağıtımlar veya yönetilen sunucu ihtiyaçlarınız için Uygulama Sunucuları sayfamızı veya Sanal Sunucu seçeneklerimizi inceleyebilirsiniz.

Yazar

Boran BAR

Chat on WhatsApp