PM2 ile Node.js uygulamasını arka planda çalıştırma ve otomatik başlatma

Linux Sunucu (SSH) 57 görüntülenme Markdown

Node.js uygulamanızı SSH penceresinde node index.js diye çalıştırırsanız pencereyi kapattığınızda durur. Sunucu yeniden başlayınca kendiliğinden açılmaz. PM2, Node.js uygulamaları için yazılmış bir süreç yöneticisidir: uygulamayı arka planda çalıştırır, çökerse yeniden başlatır, günlükleri toplar ve sunucu açılışında otomatik başlatır. Python gibi diğer diller için systemd daha uygundur: Gunicorn ve systemd.

1. Node.js ve PM2 kurulumu

sudo apt install -y nodejs npm
node -v
sudo npm install -g pm2
pm2 -v

Ubuntu deposundaki Node.js sürümü eski olabilir; güncel bir sürüm gerekiyorsa Node.js'in resmi depo yönergesini izleyin. Sürümünüzü uygulamanızın package.json dosyasındaki engines alanıyla karşılaştırın.

2. Uygulamayı başlatma

cd /srv/bot
npm install
pm2 start index.js --name bot

--name ile tanıdık bir ad verirsiniz. Komutun çıktısında uygulamanın durumu (online), kullandığı bellek ve işlemci tablosu görünür. Uygulamanızı npm start ile başlatıyorsanız: pm2 start npm --name bot -- start. Ortam değişkenlerini (token gibi) kod yerine .env dosyasında ya da PM2 ayar dosyasında tutun: token güvenliği.

3. Sunucu açılışında otomatik başlatma

pm2 startup
pm2 save

pm2 startup bir komut yazdırır (sudo env PATH=... pm2 startup systemd -u kullanici --hp /home/kullanici gibi); o komutu olduğu gibi kopyalayıp çalıştırın. Bu, PM2'yi systemd servisi yapar. pm2 save o anda çalışan uygulamaların listesini kaydeder; sunucu yeniden başlayınca aynı listeyi ayağa kaldırır. Yeni bir uygulama ekledikten sonra pm2 save'i yeniden çalıştırmayı unutmayın, aksi halde yeniden başlatmada o uygulama gelmez.

Günlük kullanım

pm2 list                  # çalışanların listesi
pm2 logs bot --lines 50   # günlükler (Ctrl+C ile çık)
pm2 restart bot           # yeniden başlat
pm2 stop bot              # durdur
pm2 delete bot            # listeden kaldır
pm2 monit                 # canlı kaynak izleme

Kodu güncellediğinizde (git pull, npm install) pm2 restart bot yeterlidir. Kesinti olmadan yeniden yükleme için küme modunda pm2 reload kullanılır.

Günlük dosyaları büyümesin

PM2 günlüklerini ~/.pm2/logs/ altında tutar ve varsayılan olarak döndürmez; uzun süre sonra diski doldurabilir. Döndürme eklentisi kurun: pm2 install pm2-logrotate. Disk dolarsa: log yönetimi.

Sık sorunlar

  • Uygulama sürekli yeniden başlıyor: pm2 logs bot hatayı yazar. PM2 çökmeyi görüp yeniden başlatır ama sebebi çözmez. Eksik paket, yanlış port, bellek yetmemesi (pm2 monit) en sık nedenlerdir.
  • pm2 startup sonrası yeniden başlatınca uygulama gelmedi: pm2 save yapılmamıştır, ya da startup farklı bir kullanıcıyla çalıştırılmıştır. Uygulamayı hangi kullanıcıyla başlattıysanız aynısıyla startup ve save yapın.
  • Dışarıdan erişemiyorum: Port güvenlik duvarında kapalıdır ya da uygulama yalnızca yerelde dinliyordur. Önüne Nginx koymak daha düzgündür: Nginx ters proxy.

Bu işlerle uğraşmak istemiyorsanız Discord botları ve küçük Node.js uygulamaları için hazır panelli çözümümüz var: Bot ve Uygulama Hosting. Kendi sunucunuz için: Linux VDS.

Sık sorulanlar

PM2 mi systemd mi?

İkisi de çalışır. PM2 Node.js için kolaydır ve izleme ekranı sunar; systemd dile bağımsızdır ve tek araçla her şeyi yönetirsiniz. Birden fazla Node uygulamanız varsa PM2 pratiktir.

PM2 root olarak mı çalışmalı?

Hayır; uygulamayı yetkisiz bir kullanıcıyla çalıştırın. root ile çalışırsa uygulamadaki bir açık sunucuyu tehlikeye atar.

npm install -g izin hatası veriyor.

Genel kurulum yönetici yetkisi ister: komutun başına sudo ekleyin ya da npm için kullanıcıya özel bir kurulum dizini ayarlayın.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.