Yazılım

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

Talha Aslan 15 dakikalık okuma 6 görüntülenme

PM2 nedir?

PM2, Node.js uygulamalarını arka planda çalıştıran, çöktüklerinde yeniden başlatan ve loglarını, çekirdek dağılımını, açılışta otomatik başlamayı yöneten bir süreç yöneticisidir. Terminali kapatsanız bile uygulama ayakta kalır. Tek bir komut satırı aracıyla uygulamaları başlatır, izler ve güncellersiniz.

Bir Node.js uygulaması normalde tek bir süreçtir. Süreç hata verip kapanırsa site de kapanır. PM2 bu süreci sürekli gözler ve düştüğünde yeniden ayağa kaldırır. Böylece gece yarısı çöken bir uygulama sabaha kadar kapalı kalmaz.

PM2 nedir diye araştıran okur çoğunlukla iki şeyi merak eder: kurulumu zor mu, hangi durumda gerekli? Kurulum tek komuttur. Gereklilik ise uygulamanın önemine bağlıdır. Deneme projesinde terminal yeterli olabilir; müşteri trafiği alan bir sitede ise süreç yöneticisi neredeyse zorunlu hale gelir.

Biz dijital pazarlama ve web ekibiyiz, hosting firması değiliz. Bu yazıdaki anlatım PM2, Node.js ve systemd belgelerine dayanır. Komutları her zaman önce bir test ortamında deneyin, sonra canlıya alın.

Node.js kurulumunu ve uygulamanın sunucuya aktarılmasını burada anlatmıyoruz. Bu yazı, uygulama sunucuda çalışmaya başladıktan sonraki işletme tarafına odaklanır. Sunucu tarafı kodun ne olduğunu merak ediyorsanız back-end nedir yazımıza göz atın.

PM2 nedir ve neden doğrudan node komutu yetmez?

Terminalde node app.js yazdığınızda uygulama o terminal oturumuna bağlı çalışır. SSH bağlantısı koptuğunda ya da pencereyi kapattığınızda süreç genellikle sonlanır. Üstelik uygulama hata verip çıkarsa kimse onu yeniden başlatmaz.

Canlı bir sitede bu iki durum da kabul edilemez. Ayrıca sunucu yeniden başladığında uygulamanın kendiliğinden açılması gerekir. İşte PM2 bu üç boşluğu kapatır:

  • Uygulamayı oturumdan bağımsız, arka planda çalıştırır.
  • Çöken süreci otomatik olarak yeniden başlatır.
  • Sunucu açıldığında uygulamayı tekrar ayağa kaldırır.
  • Logları tek yerde toplar ve canlı izlemenizi sağlar.

Yani PM2 uygulamanızın kodunu değiştirmez. Kodun etrafına bir işletme katmanı ekler. Kodunuzu yazan ekip ile sunucuyu işleten kişi farklıysa, bu katman iki tarafın ortak diline dönüşür.

PM2 ile bir uygulamayı nasıl başlatırsınız?

PM2 resmi belgesine göre npm ile global olarak kurulur. Ardından uygulamanızın giriş dosyasını verip başlatırsınız. Aşağıdaki komutlar örnektir; dosya ve uygulama adlarını kendi projenize göre değiştirin.

npm install pm2@latest -g
pm2 start app.js --name example-app
pm2 list
pm2 logs example-app

İlk komut PM2'yi kurar. İkinci komut uygulamayı başlatır ve arka plana alır. Üçüncü komut yönetilen tüm uygulamaları listeler. Dördüncü komut ise o uygulamanın loglarını canlı akıtır.

Başlatırken kullanabileceğiniz başka bayraklar da vardır. Örneğin belgede geçen --watch dosya değişince yeniden başlatır, --max-memory-restart ise bellek eşiği aşılınca süreci yeniler. Bu bayrakları aşağıda ayrı ayrı değerlendireceğiz.

Global kurulum yetki gerektirebilir. Yetkiniz yoksa ya da paylaşımlı hosting kullanıyorsanız, kurulumu kendiniz zorlamayın. Sağlayıcınıza Node.js uygulamalarını nasıl çalıştırdıklarını sorun.

start, restart, reload, stop ve delete arasındaki fark nedir?

Bu beş komut ilk bakışta benzer görünür, ancak sonuçları farklıdır. Özellikle restart ile reload arasındaki ayrım canlı sitede önem taşır. Resmi belgedeki tanımlara göre kısa bir karşılaştırma şöyle:

KomutNe yapar?Ne zaman kullanırsınız?
pm2 startUygulamayı başlatır ve PM2 listesine eklerİlk açılışta
pm2 restartSüreci durdurup yeniden başlatırAyar ya da kod değişince, kısa kesinti sorun değilse
pm2 reloadAğ uygulamaları için kesintisiz yeniden başlatma hedeflerCluster modunda canlı güncellemede
pm2 stopSüreci durdurur, listeden silmezGeçici bakımda
pm2 deleteSüreci PM2 listesinden kaldırırUygulamayı tamamen bıraktığınızda

Bu tablodan çıkan pratik sonuç şudur: sadece durdurmak istiyorsanız stop kullanın, delete'e yalnızca listeden çıkarmak istediğinizde başvurun. Aksi halde uygulamayı yanlışlıkla kaldırabilirsiniz.

Ecosystem dosyası nedir, nasıl yazarsınız?

Uzun komut satırı bayraklarını her seferinde hatırlamak zordur. Bu yüzden PM2 ayarları bir yapılandırma dosyasında toplamanıza izin verir. Belgede bu dosya ecosystem.config.js adıyla geçer. pm2 ecosystem komutu bir şablon üretir.

Dosya, apps adlı bir dizi tutan bir module.exports nesnesidir. Her uygulama için bir nesne yazarsınız. Aşağıdaki örnek, belgedeki alan adlarıyla hazırlanmış kısa bir yapıdır.

module.exports = {
  apps: [{
    name: "example-app",
    script: "./app.js",
    cwd: "/srv/example-app",
    instances: 1,
    exec_mode: "fork",
    max_memory_restart: "300M",
    env: { NODE_ENV: "development" },
    env_production: { NODE_ENV: "production" }
  }]
}

Bu dosyayı pm2 start ecosystem.config.js komutuyla çalıştırırsınız. Dosyayı projenizle birlikte sürüm kontrolünde tutmanız, ayarların ekip içinde izlenebilir kalmasını sağlar.

apps dizisi birden fazla nesne alabilir. Örneğin web arayüzünü ve arka plan işçisini aynı dosyada ayrı uygulamalar olarak tanımlarsınız. Böylece tek komutla ikisini birlikte başlatır, gerektiğinde yalnızca birini yenilersiniz. Dosyayı sade tutmak, altı ay sonra dönüp baktığınızda da işinizi kolaylaştırır.

Belge ayrıca ecosystem dosyasında bir deployment bölümü olduğunu söyler; SSH bilgileri, Git referansları ve dağıtım öncesi ya da sonrası komutlar burada tanımlanır. Kod aktarımı ve sürüm dağıtımı ayrı bir konu olduğundan bu yazıda ele almıyoruz.

Ecosystem dosyasında hangi ayarlar işinize yarar?

Belge pek çok alan listeler. Günlük işletmede en sık dokunacağınız alanları aşağıda topladık. Değerleri örnek olarak düşünün; kendi uygulamanızın ihtiyacına göre belirleyin.

  • name: Uygulamanın PM2 içindeki adıdır; komutlarda bu adı kullanırsınız.
  • script: Uygulamanın giriş dosyasının yoludur.
  • cwd: Uygulamanın başlatılacağı çalışma klasörüdür.
  • instances ve exec_mode: Süreç sayısını ve fork ya da cluster modunu belirler.
  • autorestart: Çökünce yeniden başlatmayı açar; belgeye göre varsayılan değeri true'dur.
  • watch: Dosya değişince otomatik yeniden yükler.
  • max_memory_restart: Bellek eşiği aşılınca süreci yeniler, örneğin "150M".
  • error_file, out_file ve log_date_format: Log dosyalarının yerini ve zaman biçimini belirler.

watch ayarını canlı ortamda açmanızı önermiyoruz. Çünkü yükleme klasörü ya da log gibi dosyalar değiştikçe uygulama gereksiz yere yeniden başlayabilir. Geliştirme makinesinde kullanışlıdır.

Ortam değişkenlerini ve production ayarını nasıl yönetirsiniz?

Belgeye göre env alanı varsayılan değişkenleri, env_production ve env_development ise ortama özel değişkenleri tutar. Canlıda şu komutla çalıştırırsınız:

pm2 start ecosystem.config.js --env production

Böylece aynı dosya hem test hem canlı ortamda kullanılır. Yalnızca seçtiğiniz ortamın değerleri öne çıkar. Bu yaklaşım, ortamlar arasında kod kopyalamayı önler.

PM2 nedir sorusuna ortam yönetimi açısından bakarsanız cevap basittir: aynı uygulamayı farklı ayarlarla, tek bir dosyadan çalıştıran bir araçtır. Yine de canlıya geçmeden önce hangi değişkenin hangi ortamda okunduğunu bir kez kontrol edin.

Ancak parola, API anahtarı ve veritabanı bilgisi gibi gizli değerleri ecosystem dosyasına yazıp depoya göndermeyin. Bu dosya genellikle sürüm kontrolüne girer. Gizli değerleri sunucudaki korumalı bir yapılandırma kaynağında tutun.

Gizli bilgi yönetimi sizi aşıyorsa, bunu sunucuyu işleten kişiyle birlikte kurgulayın. Yanlış yönetilen bir anahtar, tek başına ciddi bir güvenlik açığı olabilir. OWASP Top 10 yazımız bu konudaki yaygın hataları özetliyor.

Cluster modu nedir, ne zaman kullanırsınız?

Node.js uygulaması varsayılan olarak tek bir çekirdekte çalışır. Sunucuda dört çekirdek varsa üçü boşta kalabilir. PM2'nin cluster modu, Node.js'in yerleşik cluster modülünü kullanarak uygulamanızı birden fazla çekirdeğe yayar. Kodunuzu değiştirmeniz gerekmez.

pm2 start app.js -i max

Belgeye göre instances değeri 0 ya da max ise tüm CPU'lar kullanılır. Eksi bir değeri, çekirdek sayısından bir eksik süreç demektir. Belirli bir sayı verirseniz tam o kadar süreç açılır.

Node.js belgesine göre cluster modülü, Windows dışındaki sistemlerde bağlantıları işçi süreçlere sırayla (round-robin) dağıtır. İşçilerin hepsi aynı portu paylaşır. Yani ayrı port ya da ek bir yük dengeleyici tanımlamanız gerekmez.

Küçük bir sitede tek süreç çoğu zaman yeterlidir. Cluster modunu yoğun trafik ya da CPU yükü gördüğünüzde düşünün. Önce ölçün, sonra çoğaltın.

Süreç sayısını çalışırken değiştirmek için belgedeki pm2 scale komutunu kullanırsınız. Örneğin pm2 scale example-app 2 komutu, ilgili uygulamanın işçi sayısını ikiye ayarlar. PM2 nedir sorusunun en güçlü yanıtlarından biri budur: ölçeği kod yazmadan değiştirebilirsiniz.

Cluster modunda uygulamanız neden stateless olmalı?

PM2 belgesi cluster modu için açık bir şart koyar: uygulama stateless olmalıdır. Yani oturum, WebSocket bağlantısı ya da yerel veri süreç belleğinde tutulmamalıdır. Sebebi basittir: ardışık iki istek farklı süreçlere gidebilir.

Örneğin kullanıcı oturumunu birinci süreç bellekte tutarsa, ikinci istek ikinci sürece düştüğünde kullanıcı çıkış yapmış gibi görünür. E-ticaret sitesinde bu, sepetin boşalması anlamına gelir. Dönüşüm kaybı doğrudan buradan gelir.

Çözüm, paylaşılan durumu süreçlerin dışına taşımaktır. Belge bunun için Redis ya da MongoDB gibi harici depoları anar. Redis ve Memcached farkını önbellekleme yazımızda ayrıntılı anlattık; burada tekrar etmiyoruz.

Uygulamanız stateless değilse cluster modunu açmadan önce yazılım ekibinize danışın. Bu karar bir PM2 ayarından çok bir mimari karardır.

reload ile kesintisiz güncelleme nasıl çalışır?

PM2 belgesine göre reload komutu, cluster modunda süreçleri sırayla yeniler. Böylece bir süreç yeniden başlarken diğerleri istek almaya devam eder. restart ise süreci hemen öldürüp yeniden oluşturur ve kısa bir kesinti doğurabilir.

pm2 reload example-app

Belge reload'ı cluster bağlamında anlatır. Fork modunda tek süreç olduğundan, kesintisizlik beklentisini kendi ortamınızda test etmeden varsaymayın. Test için önce bir hazırlık ortamı kurmanızı öneririz.

Kapanırken temizlik yapmak da önemlidir. Belge, SIGINT sinyalini yakalayıp veritabanı bağlantılarını kapatmak gibi işleri yapmanızı önerir. Bu sayede yarım kalan işlemler azalır.

Bununla birlikte reload, veritabanı şeması değişikliğini ya da uyumsuz kod sürümünü kendiliğinden çözmez. İki sürüm bir süre yan yana çalışacağından, değişikliklerin geriye dönük uyumlu olması gerekir.

PM2 logları nerede durur, nasıl okursunuz?

Belgeye göre PM2 logları varsayılan olarak $HOME/.pm2/logs klasörüne yazar. pm2 logs komutu hepsini canlı akıtır. Tek uygulamayı izlemek için adını da verebilirsiniz.

pm2 logs
pm2 logs example-app
pm2 logs --lines 200

Başlatırken -o ile çıktı dosyasını, -e ile hata dosyasını belirleyebilirsiniz. --time bayrağı satırlara zaman damgası ekler. Cluster modunda --merge-logs, süreçlerin loglarını tek dosyada birleştirir.

Hata ayıklarken ilk bakacağınız yer hata dosyasıdır. Çökme öncesindeki son satırlar çoğu zaman nedeni gösterir. Ayrıca erişim loglarını incelemek isterseniz log analiz aracımızı deneyebilirsiniz.

Loglara parola ya da kişisel veri yazdırmayın. Bu bilgiler dosyalarda yıllarca kalabilir. KVKK ve GDPR açısından da gereksiz risk oluşturur.

Makine tarafından okunabilir çıktıya ihtiyaç duyarsanız belgedeki pm2 logs --json seçeneği işinize yarar. Böylece log satırlarını bir analiz aracına ya da betiğe daha kolay aktarırsınız. Ancak ham logları üçüncü taraf bir hizmete göndermeden önce içeriğini mutlaka gözden geçirin.

Log dosyaları diski doldurmasın diye ne yaparsınız?

Loglar sürekli büyür. Döndürme (rotation) kurmazsanız dosyalar günün birinde diski doldurur ve uygulama çöker. Bu, çoğu zaman gözden kaçan sessiz bir risktir.

Belgede iki yol geçer. Birincisi, topluluk modülü pm2-logrotate'tir:

pm2 install pm2-logrotate

İkincisi, sistemin kendi döndürme aracını kullanmaktır. Belgeye göre sudo pm2 logrotate -u kullanici komutu, /etc/logrotate.d/pm2-kullanici yolunda haftalık döndürme ve sıkıştırma içeren bir yapılandırma üretir. Burada kullanici yerine kendi kullanıcı adınızı yazarsınız.

pm2 flush komutu ise tüm log dosyalarını temizler. Geçmişi silmek istemediğinizde bu komutu dikkatle kullanın. Ayrıca belge, out_file ve error_file alanlarını /dev/null yaparak disk loglamayı kapatabileceğinizi söyler; ancak hata ayıklamayı zorlaştırdığı için önermiyoruz.

pm2 startup sunucu yeniden başlayınca uygulamayı nasıl ayağa kaldırır?

Sunucu bakım için ya da beklenmedik şekilde yeniden başlayabilir. Bu durumda PM2 de kapanır. pm2 startup komutu, init sisteminizi tanıyarak açılışta PM2'yi başlatacak bir betik üretir.

Belgeye göre komut bir sudo satırı yazdırır. Bu satırı olduğu gibi kopyalayıp çalıştırmanız gerekir. Ardından mevcut uygulama listesini pm2 save ile kaydedersiniz.

pm2 startup
pm2 save

Belgeye göre kaydedilen listeyi elle geri yüklemek için pm2 resurrect, bu yapıyı tamamen kaldırmak için pm2 unstartup kullanılır. Açılışta otomatik geri yükleme sırası bu kayda dayanır.

Önemli bir ayrıntı: yeni bir uygulama eklediğinizde ya da sildiğinizde pm2 save'i tekrar çalıştırın. Aksi halde yeniden başlatmada eski liste geri gelir. Bunu unutmak, en sık görülen sürprizlerden biridir.

Belgeye göre PM2 init sistemini kendisi algılar. Desteklenenler arasında systemd, upstart, launchd, openrc, rcd ve systemv bulunur. Çoğu güncel Linux dağıtımı systemd kullandığından, genellikle systemd için bir betik üretildiğini görürsünüz. Yani PM2 açılış işini kendi yapmaz; işletim sisteminin mekanizmasına bir kayıt bırakır.

Node.js sürümünü güncelledikten sonra startup'ı neden yenilersiniz?

Startup betiği, kurulum anındaki Node.js yolunu kullanır. Belgenin uyarısı açıktır: Node.js'i yükselttikten sonra önce pm2 unstartup, ardından yeniden pm2 startup çalıştırın. Böylece PM2 güncel ikili dosyayı kullanır.

Bu adımı atlarsanız ilk bakışta her şey normal görünür. Ancak sunucu yeniden başladığında PM2 eski yolu arayabilir ve uygulama açılmayabilir. Kesinti, tam da en az beklediğiniz anda ortaya çıkar.

Belge ayrıca -u ve --hp seçenekleriyle farklı bir kullanıcı adına çalışmayı mümkün kılar. Bizim önerimiz uygulamayı root olarak çalıştırmamaktır. Yalnızca o uygulamaya ayrılmış, sınırlı yetkili bir kullanıcı kullanın.

Sürüm yükseltmesi uygulamanın bağımlılıklarını da etkileyebilir. Bu yüzden yükseltmeyi önce hazırlık ortamında deneyin. Güncel kararlı sürümü Node.js sitesinden kontrol edin.

PM2 ile uygulamayı nasıl izlersiniz?

PM2 izleme için birkaç yerleşik araç sunar. pm2 list durumu özetler. pm2 monit terminalde canlı bir pano açar. pm2 describe ile bir sürecin ayrıntılarına bakarsınız.

  • pm2 list: Uygulamaların durumunu gösterir.
  • pm2 monit: Terminalde canlı izleme panosu sunar.
  • pm2 describe 0: Sıfır numaralı sürecin ayrıntısını verir.
  • pm2 plus: Belgeye göre birden fazla sunucuyu web üzerinden izleyen ayrı bir arayüzdür.

max_memory_restart bir güvenlik ağıdır. Bellek sızıntısı olan bir uygulamayı eşik aşılınca yeniler. Ancak sızıntıyı çözmez, yalnızca belirtiyi örter. Asıl düzeltmeyi yazılım ekibi yapmalıdır.

İzlemenin sahibi belli olmalıdır. Uyarı geldiğinde kimin bakacağını, kimden destek isteyeceğinizi önceden yazın. Çünkü PM2 nedir sorusunu bilmek tek başına yetmez; gece üçte çöken bir uygulamanın kime haber vereceğini de bilmek gerekir. Basit bir iletişim listesi bile büyük fark yaratır.

Dışarıdan bakmak da önemlidir. Süreç ayakta olsa bile site yanıt vermiyor olabilir. Site çöktü mü aracımızla sayfanızın dışarıdan erişilebilir olup olmadığını kontrol edebilirsiniz.

PM2 nedir, systemd ile aynı işi mi yapar?

Kısmen evet. İkisi de bir süreci ayakta tutar ve çökünce yeniden başlatır. Ancak systemd Linux'un kendi init sistemidir, PM2 ise yalnızca Node.js için yazılmış bir araçtır. Bu fark kararınızı belirler.

ÖlçütPM2systemd
KapsamNode.js süreçleriHer tür servis
Cluster moduYerleşik, tek bayraklaYok; uygulamada kurgulamanız gerekir
Log yönetimipm2 logs, kendi klasörüjournalctl ile sistem günlüğü
Açılışta başlamapm2 startup ve pm2 saveServis dosyası ve enable
Ek bağımlılıknpm ile PM2 kurulumuLinux'ta hazır gelir
Ekip bilgisiNode.js geliştiricisi için tanıdıkSistem yöneticisi için tanıdık

Özetle: PM2 Node.js geliştiricisine kolaylık, systemd ise her servis için tek tip yönetim sunar. İkisini aynı uygulamada birlikte çalıştırmak genellikle gereksizdir.

systemd ile aynı Node.js uygulamasını nasıl çalıştırırsınız?

PM2 kullanmak istemezseniz systemd tek başına yeterli olabilir. Bir servis dosyası yazarsınız. Aşağıdaki örnek systemd belgesindeki alan adlarını kullanır; yollar ve kullanıcı adı varsayımdır.

[Unit]
Description=Example Node.js app
After=network.target

[Service]
User=exampleuser
WorkingDirectory=/srv/example-app
ExecStart=/usr/bin/node app.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

Belgeye göre Restart varsayılan olarak no değerindedir; yani servis çökünce yeniden başlamaz. Bu yüzden on-failure ya da always yazmanız gerekir. RestartSec ise yeniden başlamadan önceki bekleme süresidir.

node ikili dosyasının yolunu command -v node ile bulabilirsiniz. Servis dosyasını yerleştirdikten sonra systemctl daemon-reload ve systemctl enable --now komutlarını kullanırsınız. Logları journalctl -u ile okursunuz.

Gizli değerleri servis dosyasına yazmak yerine Environment ayarının kardeşi olan EnvironmentFile ile bir dosyadan okutabilirsiniz. Dosyanın iznini yalnızca servis kullanıcısı okuyacak şekilde kısıtlayın. Ayrıca bu dosyayı depoya eklemeyin. Böylece hem sürüm kontrolü temiz kalır hem de anahtarlar daha az kişiye açılır.

PM2, systemd ve Docker arasında nasıl seçersiniz?

Doğru seçim ekibinize ve altyapınıza bağlıdır. Küçük, tek sunuculu bir Node.js uygulamasında PM2 hızlı ve tanıdık bir çözümdür. Sunucuda zaten çok sayıda servis varsa systemd tek tip yönetim getirir.

Uygulamayı kapsayıcıya aldıysanız tablo değişir. Docker'ın kendi yeniden başlatma politikaları vardır ve genellikle süreç yöneticisini kapsayıcının dışına taşır. Ayrıntı için Docker rehberimize bakın; burada tekrar anlatmıyoruz.

  • Tek sunucu, Node.js ağırlıklı ekip: PM2 genellikle yeterlidir.
  • Karma servisler, sistem yöneticisi bulunan ekip: systemd düşünün.
  • Birden fazla ortam ve tekrarlanabilir kurulum: kapsayıcıyı değerlendirin.

Hangisini seçerseniz seçin, üç soruyu yanıtlayın: çökünce yeniden başlıyor mu, sunucu açılınca ayağa kalkıyor mu, loglar diski dolduruyor mu? Üçüne de evet diyemiyorsanız kurulum eksiktir.

Bu üç soru, araç ne olursa olsun geçerlidir. Ayrıca karar verirken ekibinizin bilgisini hesaba katın. Sistemi gece yarısı müdahaleyle kurtaracak kişi hangi aracı tanıyorsa, çoğu zaman o araç daha doğru seçimdir. En gelişmiş kurulum bile kimsenin anlamadığı bir kurulumsa risktir.

PM2 yönetimini ne zaman kendiniz yapmamalısınız?

Dürüst olalım: her işi kendiniz yapmak zorunda değilsiniz. Paylaşımlı hosting ya da yönetilen bir pakette sunucu erişiminiz yoksa PM2 kurmaya çalışmayın. Sağlayıcınızın Node.js desteği varsa onu kullanın.

Bu bir yetersizlik değil, doğru iş bölümüdür. Pazarlama ve ürün tarafında zamanınızı değerlendirmek, sunucu güvenliğini bir uzmana bırakmaktan çoğu zaman daha verimlidir. PM2 nedir ve nasıl çalışır sorusunu öğrenmeniz, sağlayıcınızla daha doğru konuşmanıza yardım eder; her şeyi kendiniz yapmanız gerektiği anlamına gelmez.

VPS kullanıyor olsanız bile bazı kararları uzmana bırakmak daha güvenlidir. Güvenlik duvarı, SSL, kullanıcı yetkileri ve yedekleme bunların başında gelir. Yanlış bir ayar siteyi kapatabilir ya da açığa çıkarabilir.

  • Uygulamayı doğrudan internete açmak yerine bir ters vekil arkasına almayı sağlayıcınızla konuşun.
  • SSL sertifikası ve yenileme düzeni için SSL sertifikası yazımıza bakın.
  • Veritabanı yedeği olmadan canlıda yapısal değişiklik yapmayın; yedekleme stratejisi yazımız yol gösterir.
  • Saldırı ya da olağan dışı trafik görürseniz hemen hosting sağlayıcınızdan destek isteyin.

Hosting seçimini henüz yapmadıysanız, hosting seçimi rehberimiz ölçütleri sıralar. Destek talebinize log örneklerini ve yaptığınız adımları ekleyin.

Uygulama kesintisi pazarlama bütçenizi nasıl etkiler?

Teknik bir konu gibi görünse de kesinti doğrudan pazarlamayı etkiler. Reklam tıklaması çalışmayan bir sayfaya düşerse bütçe boşa gider. Ziyaretçi de markaya dair kötü bir ilk izlenim edinir.

Ayrıca hızlı ve kararlı bir sunucu, arama deneyiminin parçasıdır. Site hızının SEO'ya etkisini ve sayfa hızının e-ticaret satışlarına etkisini ayrı yazılarda ele aldık. PM2 bu zincirin en alt halkasıdır: uygulama ayakta mı, değil mi?

Bu yüzden büyük bir kampanya öncesinde şu kontrolü öneririz:

  1. Uygulama çökünce otomatik yeniden başlıyor mu, test edin.
  2. Sunucuyu yeniden başlatıp uygulamanın kendiliğinden açıldığını doğrulayın.
  3. Log klasörünün boyutunu ve döndürme ayarını kontrol edin.
  4. Siteyi dışarıdan bir araçla ölçün.

Bu liste kısa, ancak kampanya günü yaşanabilecek en pahalı sürprizlerin çoğunu önler. Daha kapsamlı bir yazılım ve altyapı desteği için özel yazılım geliştirme hizmetimize göz atabilirsiniz.

PM2 kullanırken en sık yapılan hatalar neler?

Aşağıdaki liste, belgedeki özelliklerin yanlış anlaşılmasından doğan hataları toplar. Hepsi önlenebilir.

  • pm2 save çalıştırmamak: Yeniden başlatmada uygulama geri gelmez.
  • Node.js'i güncelleyip startup'ı yenilememek: Açılış betiği eski yolda kalır.
  • watch ayarını canlıda açmak: Gereksiz yeniden başlatmalara yol açar.
  • Log döndürme kurmamak: Disk dolar, uygulama durur.
  • Stateless olmayan uygulamayı cluster modunda çalıştırmak: Oturumlar kaybolur.
  • Gizli anahtarları ecosystem dosyasına yazmak: Depoya sızabilir.
  • Uygulamayı root ile çalıştırmak: Olası bir açık, tüm sunucuyu etkiler.

Bu listeyi bir kontrol listesi gibi kullanın. Her maddeyi kendi kurulumunuzda tek tek doğrulayın.

Ekipler genellikle bu hataları ilk kesintiden sonra fark eder. Oysa PM2 nedir ve ne yapar sorusunun cevabını baştan bilen bir ekip, aynı kontrolleri kesinti yaşamadan yapabilir. Kısacası maliyeti en düşük bakım, önceden yapılan kontroldür.

PM2 kurulumunu devreye almadan önce hangi adımları izlersiniz?

Sıralı ve küçük adımlarla ilerlemek en güvenli yoldur. Aşağıdaki akış, yukarıdaki bölümleri tek bir plana indirger. Her adımı önce hazırlık ortamında deneyin.

  1. Uygulamayı pm2 start ile adlandırarak başlatın ve pm2 list ile doğrulayın.
  2. Ayarları ecosystem dosyasına taşıyın ve --env production ile çalıştırın.
  3. Gerekirse instances ayarıyla cluster modunu açın; önce stateless olduğunu doğrulayın.
  4. pm2 startup ve pm2 save ile açılışta otomatik başlamayı kurun.
  5. Log döndürmeyi kurun ve disk kullanımını izleyin.
  6. Sunucuyu bir kez yeniden başlatıp her şeyin geri geldiğini görün.

Son adım çoğu zaman atlanır. Oysa asıl güvence, gerçek bir yeniden başlatmadan sonra uygulamanın kendiliğinden geri gelmesidir. Bunu görmeden kurulumu bitmiş saymayın.

Sonuç olarak PM2 nedir sorusunun pratik cevabı şudur: Node.js uygulamanızı yaşatan, izleten ve güncellemenizi kolaylaştıran bir işletme katmanı. Bu katmanı doğru kurduğunuzda site daha az kesinti yaşar. Kurmadığınızda ise ilk çöküşte öğrenirsiniz.

Sıkça Sorulan Sorular

PM2 ücretsiz mi, ne işe yarar?
PM2 açık kaynaklı bir Node.js süreç yöneticisidir ve temel özellikleri komut satırından kullanırsınız. Uygulamanızı arka planda çalıştırır, çökünce yeniden başlatır, logları toplar ve cluster modunu sağlar. Ayrıca pm2 plus gibi web tabanlı izleme seçenekleri ayrıdır; bunların koşullarını resmi sayfadan kontrol edin, çünkü kapsamları değişebilir.
PM2 ile nodemon arasındaki fark nedir?
nodemon geliştirme sırasında dosya değişince uygulamayı yeniden başlatan bir araçtır. PM2 ise canlı ortam için tasarlanmıştır: çökünce yeniden başlatır, logları yönetir, cluster modunu sunar ve açılışta başlamayı kurar. Yani geliştirmede nodemon, sunucuda PM2 ya da systemd kullanmak yaygın bir ayrımdır. Kararınızı ekibinizin alışkanlığına göre verin.
reload ile restart arasındaki fark nedir?
Belgeye göre restart süreci hemen durdurup yeniden başlatır, bu yüzden kısa bir kesinti oluşabilir. reload ise cluster modunda süreçleri sırayla yenileyerek kesintisiz güncelleme hedefler. Ancak fork modunda tek süreç vardır. Bu yüzden kesintisizlik beklentisini canlıya almadan önce hazırlık ortamında test etmenizi öneririz.
Sunucu yeniden başlayınca PM2 uygulamam neden açılmıyor?
Büyük olasılıkla pm2 startup ya da pm2 save eksiktir. pm2 startup açılışta PM2'yi başlatacak betiği kurar, pm2 save ise çalışan uygulama listesini kaydeder. Node.js sürümünü yükselttiyseniz belgeye göre önce pm2 unstartup, sonra pm2 startup çalıştırın. Çözemezseniz sunucuyu işleten kişiden destek alın.
PM2 yerine systemd kullanabilir miyim?
Evet, kullanabilirsiniz. systemd Linux'ta hazır gelir ve servis dosyasında Restart ayarıyla çökünce yeniden başlatmayı sağlar. Ancak cluster modu gibi Node.js'e özel kolaylıklar yoktur. Tek süreçli basit bir uygulamada systemd yeterli olabilir. Birden çok çekirdek istiyorsanız PM2 cluster modunu ya da başka bir mimariyi değerlendirin.
PM2 kurulumunu kendim mi yapmalıyım, yoksa hosting sağlayıcıma mı bırakmalıyım?
Sunucuya tam erişiminiz ve komut deneyiminiz varsa, önce hazırlık ortamında deneyip kendiniz kurabilirsiniz. Paylaşımlı hostingte erişiminiz yoksa zorlamayın. Güvenlik duvarı, SSL, yetkiler ve yedekleme gibi riskli kararları sağlayıcınıza ya da deneyimli bir sistem yöneticisine bırakın. Destek talebine log örneklerini ekleyin.
  • pm2
  • node.js
  • süreç yöneticisi
  • cluster modu
  • systemd
  • ecosystem dosyası
  • log yönetimi
Paylaş:
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Talebiniz doğrudan Talha Aslan ve ekibine ulaşır: stratejiyi Talha kurar, uygulamayı deneyimli ekip yürütür. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla döneriz.