Node.js uygulamaları
Node.js, PHP'nizin yanında geliştirilir ve çalıştırılır.
Node ile API'ler, sunucuda işlenen siteler, gerçek zamanlı servisler ve worker'lar geliştiriyor, bunları PHP sitelerinizle aynı sunucularda, tek bir Nginx arkasında çalıştırıyoruz.
Node ile neler geliştiriyoruz
Beş tür iş; her biri burada, çünkü Node ona uygun.
-
01
Express
Küçük ve doğrudan API'ler ve arka uçlar: birkaç rota, açık ara katmanlar, gizli hiçbir şey yok.
API'ler ve arka uçlar -
02
NestJS
Modüller, bağımlılık enjeksiyonu ve TypeScript'te tipli sözleşmelerle daha büyük servisler; bir ekibin yıllarca büyüteceği kod için.
Yapılandırılmış servisler -
03
Next.js · Nuxt
React ve Vue için sunucu tarafında işleme: sayfalar arama motorlarına ve hızlı bir ilk görünüme hazır gelir, ardından bir uygulama gibi davranır.
Sunucuda işlenen siteler -
04
Socket.IO · WebSockets
Bir şey değiştiği anda güncellenen sohbet, bildirimler, canlı paneller ve takip; tek bir açık bağlantı üzerinden.
Gerçek zamanlı -
05
Worker'lar ve kuyruklar
Yavaş işi isteğin dışında tutan arka plan işleri, zamanlanmış görevler ve Redis üzerinde kuyruk tüketicileri.
Arka plan işleri
Node beklemede neden iyidir
Bir Node süreci JavaScript kodunuzu tek bir iş parçacığında çalıştırır ve beklemeyi - disk, ağ, veritabanı - sisteme bırakır. Tek bir süreç bu sayede aynı anda çok sayıda bağlantıyı açık tutar.
- Kodunuz çağrı yığınında, her seferinde tek bir fonksiyon olarak çalışır.
- Yavaş iş iş parçacığından çıkar: dosyalar, DNS ve özetleme libuv havuzuna gider, soketleri ise işletim sistemi izler.
- İş bittiğinde geri çağrısı görev kuyruğunda bekler.
- Bir sonraki görevden önce mikro görev kuyruğundaki tüm promise geri çağrıları çalışır.
- Döngü aşamalarından geçer ve bir sonraki görevi alır.
Tek sunucuda PHP ve Node
Nginx her isteği karşılar ve her yolu ona sahip olan sürece gönderir. PHP siteniz ve Node servisiniz makineyi, veritabanını ve sertifikayı paylaşır - birbirlerinin belleğini değil.
Hangi iş için hangisi
İkisiyle de geliştiriyoruz; bu yüzden cevap alışkanlıktan değil, işin kendisinden gelir.
PHP'yi seçin, eğer
- Site çoğunlukla sayfalar, formlar ve bir yönetim panelinden oluşuyorsa: mağazalar, içerik siteleri, iş sistemleri.
- WordPress, WooCommerce ya da Laravel'i ve onlar için hazırlanmış her şeyi istiyorsanız.
- Her istek kendi başına duruyor ve hızla bitiyorsa.
- Bakımını yapacak kişiler PHP'yi zaten biliyorsa.
Node'u seçin, eğer
- Bağlantılar açık kalıyorsa: sohbet, canlı paneller, bildirimler, takip.
- React ya da Vue sayfaları Next.js veya Nuxt ile sunucuda işleniyorsa.
- Servis çoğunlukla başka API'leri bekliyor ve veriyi akış hâlinde aktarıyorsa.
- Tarayıcıda ve sunucuda tek bir dil ekibinizin işine yarıyorsa.
Çoğu zaman cevap: ikisi birden
Siteyi, mağazayı ve yönetim panelini PHP üstlenir; yanında küçük bir Node servisi canlı kısmı alır. İkisi de aynı veritabanını okur ve aynı Nginx'in arkasında durur.
Boşluksuz sürümler
Yeni sürüm eskisinin yanında başlar, sağlıklı olduğunu kanıtlar ve ancak ondan sonra trafiği devralır. Eski worker'lar durmadan önce ellerindeki istekleri bitirir.
- Hizmet verilen ziyaretçiler
- Mevcut sürüm
- Yeni sürüm
-
01
Çek ve kur
git pull && npm ciKilit dosyasındaki sürümlerin tam kendisi; sürpriz bir yeni sürüm yok.
-
02
Derle
npm run buildHiçbir şey yeniden başlamadan önce TypeScript ve varlıklar derlenir.
-
03
Eskinin yanında başlat
pm2 reload appYeni sürüm, hâlâ hizmet veren sürümün yanında açılır.
-
04
Hazır olana kadar bekle
wait_ready: trueBir ziyaretçi almadan önce sağlık kontrolüne yanıt vermesi gerekir.
-
05
Trafiği devral
cluster → new workersYeni bağlantılar yeni sürüme gider.
-
06
Eskiyi boşalt
SIGINT → server.close()Eski worker'lar ellerindeki istekleri bitirir, sonra kapanır.
Kodun etrafındaki sunucu
Bir Node servisini ayakta tutan her şey sunucuda, bakımını yaptığımız ve sizin de okuyabileceğiniz dosyalarda yazılıdır.
-
/etc/nginx/sites-enabled/app.confTers vekil sunucu
Her sürecin önünde TLS, sıkıştırma, önbelleğe alınmış statik dosyalar ve WebSocket yükseltmeleri.
-
/srv/app/ecosystem.config.jsSüreç yöneticisi
PM2 süreci ayakta tutar, çökerse yeniden başlatır ve küme modunda her çekirdeği kullanır. Tek bir sürecin yettiği yerde aynı işi bir systemd birimi görür.
-
/srv/app/.env (0600)Ortam ve gizli bilgiler
Anahtarlar ve parolalar kodun ve git'in dışında durur; yalnızca uygulamanın kendi kullanıcısı okuyabilir.
-
/srv/app/package-lock.jsonBağımlılık denetimi
Her sürümde npm audit; yükseltmeler canlıya ulaşmadan önce okunur ve test edilir.
-
/srv/app/.nvmrcNode LTS sürüm yükseltmeleri
Uygulama Uzun Süreli Destek sürümünde çalışır ve eski sürümün desteği bitmeden onu bir sonrakine taşırız.
-
/var/log/app/Günlükler ve izleme
Döndürülen yapılandırılmış günlükler; süreç yeniden başladığında, bellek tırmandığında ya da hatalar arttığında bir uyarı.

Node uygulamanızın ne yapması gerektiğini bize anlatın
Yeni bir servis, bir Next.js sitesi ya da bir yerde zaten çalışan ve düzgün bir yuvaya ihtiyaç duyan bir uygulama. İnceleyip kısa bir görüşmenin ardından teklif veriyoruz.