Node.js Projelerini Sunucuda Kesintisiz Çalıştırma Yöntemleri

Erhan ÜRGÜNErhan ÜRGÜN
3 min read

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!

www.erho.dev - ss_01.png

www.erho.dev - status-code-502_cf-bad-gateway.png

"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...

erho.dev - pm2.io img


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

1
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