Node.js Projelerini Sunucuda Kesintisiz Çalıştırma Yöntemleri
Projelerinizin sunucuda kesintiye uğramadan çalışmasını ister misiniz? Node.js tabanlı, çalışır durumda olan ve terminali kapattığınızda aniden duran projeleriniz size de tanıdık geliyorsa, işte kalıcı çözüm!
Geliştirdiğim projeleri canlıya aldığımda en büyük ihtiyaçlarımdan biri, uygulamaların kesintisiz çalışması oluyor. Hele ki bir web analiz aracı olan Umami gibi kritik bir yazılımı sunucumda (docker olmadan) çalıştırıyorsam, bunun aralıksız hizmet vermesi önemli. Ancak fark ettim ki, yarn start
komutuyla başlattığımda terminali kapattığım anda uygulama duruyordu.
NOT: Buradaki komut npm
, pnpm
, bun
, yarn
vb olması fark etmez!
"Peki, bir uygulamayı nasıl kesintisiz çalışır hale getirebilirim?" sorusuna yanıt ararken karşılaştığım iki etkili yöntem var: PM2 ve systemd. Bu yazıda, her iki yöntemi de nasıl uyguladığımı adım adım paylaşıyorum.
Node.js tabanlı uygulamaların arka planda sorunsuz çalışmasını sağlamak için PM2 ve systemd harika çözümler sunuyor. Bu araçlar sayesinde uygulamam her durumda çalışmaya devam ediyor. Eğer siz de terminal kapandığında uygulamanızın durmasından şikayetçiyseniz, bu yöntemleri mutlaka denemenizi öneririm…
Not: Örnek olarak "Umami Analitik" projesini kullandım, ancak terminale bağımlı herhangi bir projede bu yöntemleri kendi ihtiyaçlarınıza uyarlayarak benzer sorunları çözebilirsiniz.
NOT: Anlaşılı olabilmesi adına örnek olarak Umami projesi üzerinden anlatım yapacağım...
Yöntem 1: pm2 ile Kolay Arkaplan Yönetimi
Bir Node.js uygulamasını arka planda çalıştırmak için tercih edilebilecek en pratik çözüm, pm2. pm2, yalnızca arka planda çalıştırmakla kalmaz, aynı zamanda uygulamanız çökerse otomatik yeniden başlatma da sağlar. Ayrıca, sunucu yeniden başlasa bile uygulamanızı otomatik olarak devreye alır.
pm2 Kurulumu
Öncelikle pm2’yi kurmak için şu komutu çalıştırıyorum:
npm install -g pm2
Uygulamayı pm2 ile Başlatma
Kurulum tamamlandıktan sonra Umami’yi pm2 ile çalıştırıyorum:
cd umami.domain-adi.com
pm2 start "node .next/standalone/server.js" --name umami-tracker
Artık uygulamam arka planda çalışıyor.
Sunucu Yeniden Başlatıldığında Uygulamayı Otomatik Başlatmak
pm2 startup
pm2 save
Bu iki komut, pm2’nin her sistem açılışında otomatik çalışmasını sağlıyor. Sunucum yeniden başlasa bile artık Umami’nin durması diye bir problemim olmuyor!
Detaylı kullanım için bu bağlantı’dan wesitesini ziyaret edebilirsiniz. Ayrıca https://pm2.io üzerinden de projeniz için daha fazla hakimiyet kurabiliyoruz...
Yöntem 2: systemd ile Servis Tanımlamak
Eğer pm2 yerine daha sistem odaklı bir çözüm arıyorsanız, systemd ile bir servis tanımlayarak Umami’yi kalıcı olarak çalıştırmak mümkün. Bu yöntem, özellikle Linux sunucularda oldukça güçlü ve stabil bir çözüm sağlıyor. İşte bu işlemi nasıl yaptığımı adım adım anlatıyorum:
Servis Dosyası Oluşturmak
İlk olarak, systemd için bir servis dosyası oluşturmam gerekiyor:
sudo vim /etc/systemd/system/umami.service
Servis Dosyasının İçeriği
Aşağıdaki kodları dosyaya yapıştırıyorum:
[Unit]
Description=Umami Tracker Service
After=network.target
[Service]
ExecStart=/usr/bin/node /home/kadi/domain-adi.com/.next/standalone/server.js
WorkingDirectory=/home/kadi/domain-adi.com
Restart=always
User=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Servisi Etkinleştirmek ve Çalıştırmak
sudo systemctl daemon-reload
sudo systemctl enable umami.service
sudo systemctl start umami.service
Servisin Durumunu Kontrol Etmek
Her şeyin sorunsuz çalıştığından emin olmak için şu komutu kullanıyorum:
sudo systemctl status umami.service
Hangi Yöntemi Tercih Etmeliyim?
İki yöntemin de kendine göre avantajları var. pm2, kurulumu ve yönetimi kolay bir araç olarak öne çıkıyor. Eğer birden fazla Node.js uygulamanız varsa ve kolayca kontrol etmek istiyorsanız, pm2 sizin için ideal. Öte yandan, systemd daha düşük seviyeli, ancak daha güçlü bir çözüm. Sistem açılış süreçlerine doğrudan entegre olması, daha fazla kontrol sağlıyor.
Artık bu çözümleri hayata geçirdiğim için, uygulamalarımın stabil çalışacağından eminim. Terminal kapandı mı, sunucu yeniden mi başlatıldı? Hiç önemli değil...
Peki siz bu tarz bir durumda nasıl bir çözüm kullanıyorsunuz? Yorumlarda belirtebilirsiniz!
Daha fazlası için takipte kalın!
https://linktr.ee/erhanurgun
https://erhanurgun.com.tr
https://erho.dev
Subscribe to my newsletter
Read articles from Erhan ÜRGÜN directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Erhan ÜRGÜN
Erhan ÜRGÜN
PHP | Laravel | NodeJS | AdonisJS | Back-End Developer