PM2 Uygulaması Sunucu Yeniden Başlayınca Nasıl Otomatik Açılır?
PM2 ile çalışan Node.js uygulamalarının sunucu yeniden başlatıldığında otomatik açılması için temel olarak uygulamayı PM2 ile başlatmak, process listesini pm2 save ile kaydetmek ve pm2 startup ile işletim sisteminin başlangıç servisini yapılandırmak gerekir.
En sık kullanılan işlem sırası şöyledir:
pm2 start app.jspm2 savepm2 startupAncak
pm2 startup komutunun ekrana verdiği komutu da çalıştırmanız gerekebilir. Yalnızca pm2 start kullanmak uygulamanın sunucu reboot sonrasında otomatik başlayacağını garanti etmez.PM2 neden sunucu yeniden başlayınca uygulamayı açmıyor?
PM2 uygulamanızı çalıştırıyor olabilir ancak sistem başlangıcına bağlanmamışsa VPS veya VDS yeniden başlatıldığında PM2 process'i otomatik olarak ayağa kalkmayabilir.
Örneğin:
pm2 start app.jskomutunu çalıştırıp uygulamayı başlatmanız mevcut oturum için yeterlidir.
Ancak sunucu reboot olduğunda process bellekte artık bulunmaz.
Bu nedenle PM2'nin işletim sisteminin başlangıç mekanizmasına eklenmesi gerekir.
1. Önce uygulamanın PM2 ile çalıştığını kontrol edin
PM2 process listesini görmek için:
pm2 listveya:
pm2 statuskullanabilirsiniz.
Uygulamanız listede görünmüyorsa önce başlatın.
Örneğin:
pm2 start app.js --name uygulamamUygulamanın giriş dosyası projenize göre:
-
app.js-
server.js-
index.jsveya başka bir dosya olabilir.
2. PM2 process listesini kaydedin
Çalışmasını istediğiniz uygulamalar hazır olduğunda:
pm2 savekomutunu çalıştırın.
Bu işlem mevcut PM2 process listesini kaydeder.
Başarılı işlem sonrasında PM2'nin process listesini dump dosyasına kaydettiğine ilişkin mesaj görebilirsiniz.
Bu adım önemlidir çünkü PM2 yeniden başladığında hangi uygulamaları geri yüklemesi gerektiğini bu kayıt üzerinden belirleyebilir.
3. PM2 startup komutunu çalıştırın
Ardından:
pm2 startupkomutunu çalıştırın.
Linux dağıtımınıza göre PM2 uygun başlangıç sistemini tespit etmeye çalışır.
Modern Linux sunucularında bu çoğunlukla
systemd olabilir.Komut size buna benzer ek bir komut gösterebilir:
sudo env PATH=$PATH:/... pm2 startup systemd -u kullanici --hp /home/kullaniciBuradaki gerçek komut sisteminize ve PM2'nin kurulu olduğu konuma göre değişebilir.
Terminalde PM2'nin size verdiği komutu aynen kendi sisteminizdeki çıktıya göre çalıştırın.
İnternetteki başka bir sunucuya ait startup komutunu doğrudan kopyalamayın.
4. Tekrar pm2 save çalıştırın
Startup yapılandırmasından sonra mevcut process listesini tekrar kaydetmek faydalıdır:
pm2 saveBöylece reboot sonrasında geri gelmesini istediğiniz uygulamaların güncel listesi kaydedilmiş olur.
5. Sunucuyu yeniden başlatmadan önce kontrol edin
Önce:
pm2 listile uygulamaların doğru durumda olduğunu kontrol edin.
Ardından:
pm2 saveçalıştırın.
Üretim sunucusunda reboot yapmadan önce:
- Güncel yedek bulunduğundan
- SSH erişiminizin çalıştığından
- Uygulamanın doğru portta çalıştığından
- Nginx yapılandırmasının doğru olduğundan
emin olmak faydalıdır.
6. Reboot sonrasında PM2 nasıl kontrol edilir?
Sunucu yeniden açıldıktan sonra SSH ile bağlanıp:
pm2 listkomutunu çalıştırın.
Uygulamalar:
onlinedurumunda görünüyorsa otomatik başlangıç sistemi çalışıyor demektir.
Ayrıca uygulamanın gerçekten dışarıdan erişilebilir olduğunu da kontrol edin.
PM2'nin
online göstermesi tek başına Nginx veya ağ yapılandırmasının doğru olduğunu garanti etmez.pm2 save ne işe yarar?
pm2 save, mevcut process listesini kaydeder.Örneğin PM2 üzerinde:
- forum
- API
- worker
olmak üzere üç uygulama çalışıyorsa
pm2 save sonrasında bu liste kaydedilebilir.Daha sonra PM2 bu kayıt üzerinden uygulamaları yeniden ayağa kaldırabilir.
pm2 startup ne işe yarar?
pm2 startup, PM2'nin işletim sistemi açılırken çalıştırılması için gerekli başlangıç entegrasyonunu oluşturur.Basitçe:
pm2 save→ Hangi uygulamaların geri gelmesi gerektiğini kaydeder.
pm2 startup→ PM2'nin sistem açılışında çalışmasını sağlar.
Bu nedenle iki işlem farklı görevler yapar.
pm2 resurrect nedir?
PM2'nin daha önce kaydedilmiş process listesini manuel olarak geri yüklemek için:
pm2 resurrectkullanılabilir.
Örneğin process'ler kayboldu ancak daha önce
pm2 save yapılmışsa bu komut kayıtlı listeyi tekrar yüklemeye yardımcı olabilir.Ancak kalıcı reboot çözümü için startup servisinin de doğru yapılandırılması gerekir.
Uygulama reboot sonrası neden yine başlamıyor?
Startup kurulmuş olmasına rağmen uygulama açılmıyorsa birkaç farklı neden olabilir:
-
pm2 save yapılmamış olabilir.- Startup yanlış kullanıcı için oluşturulmuş olabilir.
- Node.js yolu değişmiş olabilir.
- PM2 yolu değişmiş olabilir.
- Uygulamanın ihtiyaç duyduğu servis henüz hazır olmayabilir.
- Environment değişkenleri eksik olabilir.
- Uygulama başlıyor ancak hemen hata verip kapanıyor olabilir.
Bu durumda önce PM2 durumunu ve logları kontrol edin.
PM2 logları nasıl kontrol edilir?
Tüm uygulamaların loglarını görmek için:
pm2 logsBelirli bir uygulama için:
pm2 logs uygulamamkullanabilirsiniz.
Ayrıca:
pm2 describe uygulamamkomutu uygulamanın:
- Script yolu
- Çalışma durumu
- Restart sayısı
- Process bilgileri
gibi ayrıntılarını incelemeye yardımcı olabilir.
Yanlış kullanıcıyla PM2 çalıştırmak sorun oluşturabilir
PM2 process listesi kullanıcıya bağlıdır.
Örneğin uygulamayı
root kullanıcısıyla başlattıysanız:rootkullanıcısının PM2 ortamında bulunur.
Başka kullanıcıyla:
pm2 listçalıştırdığınızda farklı veya boş bir liste görebilirsiniz.
Startup servisinin de uygulamayı gerçekten çalıştıran kullanıcı için yapılandırılması gerekir.
Bu, PM2 reboot sorunlarında sık karşılaşılan nedenlerden biridir.
Root ile PM2 kullanmak gerekli mi?
Her uygulamayı root kullanıcısıyla çalıştırmak gerekli değildir ve mümkün olduğunda uygulamaları yalnızca ihtiyaç duydukları yetkilere sahip ayrı bir kullanıcıyla çalıştırmak güvenlik açısından daha iyi olabilir.
Örneğin Node.js uygulamasının doğrudan 80 veya 443 portunu dinlemesi yerine:
Node.js →
3000Nginx →
80 / 443şeklinde reverse proxy yapısı kullanılabilir.
Bu sayede uygulamanın root yetkisiyle çalışması gerekmeyebilir.
Node.js güncellemesinden sonra PM2 startup bozulabilir mi?
Olabilir.
Özellikle Node.js bir sürüm yöneticisi üzerinden kurulmuşsa Node binary'sinin yolu değişebilir.
PM2 startup servisi eski PATH değerini kullanmaya devam edebilir.
Böyle bir durumda mevcut startup yapılandırmasını kontrol etmek ve gerekirse yeni Node/PM2 yolu ile yeniden oluşturmak gerekebilir.
PM2'nin
pm2 startup çıktısı bu nedenle önemlidir.Environment değişkenleri reboot sonrası kaybolabilir mi?
Uygulamayı terminalde manuel başlatırken shell içerisinde tanımladığınız geçici environment değişkenleri reboot sonrasında bulunmayabilir.
Üretim uygulamalarında environment yapılandırmasının kalıcı ve kontrollü şekilde yönetilmesi gerekir.
PM2 ecosystem dosyası bu amaçla kullanılabilecek yöntemlerden biridir.
Örneğin:
ecosystem.config.jsiçerisinde uygulamanın çalışma ayarları tanımlanabilir.
Hassas bilgilerin kaynak kod deposuna veya herkese açık dosyalara eklenmemesine dikkat edilmelidir.
PM2 ecosystem dosyası kullanmak avantajlı mı?
Birden fazla ayarı bulunan uygulamalarda ecosystem dosyası yönetimi kolaylaştırabilir.
Örneğin:
- Uygulama adı
- Script
- Çalışma dizini
- Instance sayısı
- Environment ayarları
tek yapılandırmada tutulabilir.
Uygulama:
pm2 start ecosystem.config.jsile başlatılabilir.
Ardından:
pm2 savekullanılabilir.
Uygulama başlamadan önce PostgreSQL hazır olmalı mı?
Uygulamanız PostgreSQL, Redis veya başka bir servise bağımlıysa reboot sırasında servislerin başlangıç sırası önem kazanabilir.
Node.js uygulaması veritabanı hazır olmadan bağlantı kurmaya çalışır ve bu hatayı düzgün yönetemezse PM2 uygulamayı tekrar başlatabilir.
Bu durumda yalnızca PM2 startup ayarına değil:
- Veritabanı servisinin durumuna
- Uygulamanın retry mekanizmasına
- PM2 loglarına
- systemd başlangıç davranışına
da bakmak gerekir.
Nginx ayrıca otomatik başlamalı mı?
PM2 yalnızca Node.js uygulamanızı yönetir.
Nginx ayrı bir servistir.
Durumunu:
systemctl status nginxile kontrol edebilirsiniz.
Sistem başlangıcında etkin olup olmadığını kontrol etmek için systemd yapılandırması incelenebilir.
PM2 uygulaması çalışıyor olsa bile Nginx durmuşsa web sitesi dışarıdan erişilemeyebilir.
PM2 otomatik başlangıç için hızlı kurulum sırası
Temel akış:
pm2 start app.js --name uygulamamardından:
pm2 savesonra:
pm2 startupPM2'nin terminalde ürettiği startup komutunu çalıştırın.
Son olarak:
pm2 savekullanın.
Sunucu yeniden başladıktan sonra:
pm2 listile sonucu doğrulayın.
Sık yapılan hatalar
PM2 reboot yapılandırmasında yaygın hatalar:
- Yalnızca
pm2 start kullanmak-
pm2 save yapmayı unutmak-
pm2 startup çıktısındaki komutu çalıştırmamak- Startup'ı yanlış Linux kullanıcısı için kurmak
- Node.js yolu değiştikten sonra eski startup servisini kullanmak
- Environment değişkenlerini kalıcı yapılandırmamak
- Uygulamanın restart loop'a girdiğini fark etmemek
- PM2
online olduğu için Nginx'i kontrol etmemekÖzetle, PM2 uygulamasının sunucu yeniden başlatıldığında otomatik çalışması için process listesinin kaydedilmesi ve PM2'nin sistem başlangıcına bağlanması gerekir.
Temel mantık:
pm2 start → pm2 save → pm2 startup → startup komutunu uygula → pm2 saveşeklindedir.
Kurulum tamamlandıktan sonra en önemli adım, kontrollü bir reboot sonrasında uygulamanın gerçekten otomatik başladığını ve web sitesinin dışarıdan erişilebilir olduğunu doğrulamaktır.
