Node.js Sunucu Kurulumu: Modern Web Uygulamaları İçin Altyapı. Gelişen web teknolojileri, sunucu tarafında daha hızlı, ölçeklenebilir ve verimli çözümlere olan ihtiyacı artırmıştır. İşte bu noktada Node.js, JavaScript’i sunucu tarafında çalıştırabilen güçlü bir çalışma zamanı ortamı (runtime environment) olarak öne çıkmaktadır. Google Chrome’un V8 JavaScript motoru üzerine inşa edilen Node.js, olay güdümlü (event-driven) ve engellemeyen (non-blocking I/O) mimarisi sayesinde özellikle gerçek zamanlı uygulamalar, API’ler ve mikroservisler için ideal bir platform sunar. Performanslı ve modern bir web uygulaması geliştirmek için atılması gereken ilk ve en önemli adımlardan biri, bu teknolojinin üzerinde çalışacağı sunucu altyapısını doğru bir şekilde yapılandırmaktır.

Node.js, geleneksel sunucu tarafı dillerinden farklı bir yaklaşım benimser. Tek bir iş parçacığı (single thread) kullanarak binlerce eş zamanlı bağlantıyı verimli bir şekilde yönetebilir. Bu, her bağlantı için ayrı bir iş parçacığı oluşturan çok iş parçacıklı (multi-threaded) modellere kıyasla bellek ve işlemci kaynaklarının çok daha verimli kullanılmasını sağlar. Bu mimari, özellikle sohbet uygulamaları, online oyunlar, veri akışı servisleri gibi yoğun I/O (giriş/çıkış) işlemleri gerektiren projelerde büyük bir avantajdır. Node.js’in ne olduğunu daha derinlemesine anlamak için, onun temel felsefesini kavramak önemlidir; Node.js, JavaScript’in evrensel bir dil olmasını sağlayarak geliştiricilerin hem istemci (frontend) hem de sunucu (backend) tarafında aynı dili kullanmasına olanak tanır, bu da geliştirme süreçlerini hızlandırır ve basitleştirir.
Doğru bir sunucu kurulumu, Node.js uygulamanızın potansiyelini tam olarak ortaya çıkarabilmesi için hayati önem taşır. Yanlış yapılandırılmış bir ortam, performans sorunlarına, güvenlik açıklarına ve ölçeklenebilirlik problemlerine yol açabilir. Sunucu kurulumu sadece Node.js’in kendisini yüklemekten ibaret değildir. Aynı zamanda uygulamanın sürekli çalışmasını sağlayacak bir süreç yöneticisi (process manager) kurmayı, gelen istekleri yönetmek ve güvenliği artırmak için bir ters proxy (reverse proxy) yapılandırmayı ve sistem kaynaklarını verimli kullanmayı içerir. Bu adımlar, uygulamanızın kararlı, güvenli ve yüksek performanslı bir şekilde çalışmasını garanti altına alır.
Node.js kurulumuna başlamadan önce sunucu ortamınızın hazır olduğundan emin olmalısınız. Genellikle bir sanal özel sunucu (VPS) veya adanmış bir sunucu bu işlem için idealdir. Kurulum için temel gereksinimler şunlardır:
Kuruluma başlamadan önce sunucunuzdaki paket listesini ve mevcut paketleri güncellemek iyi bir pratiktir. Bu, sisteminizin en son güvenlik yamalarına ve yazılım sürümlerine sahip olmasını sağlar.
Debian/Ubuntu tabanlı sistemler için:
sudo apt update
sudo apt upgrade
CentOS/RHEL tabanlı sistemler için:
sudo yum update
Bu komutları çalıştırdıktan sonra sisteminiz Node.js kurulumu için hazır hale gelecektir. Bu temel adımlar, kurulum sırasında yaşanabilecek olası bağımlılık sorunlarını ve çatışmaları en aza indirir.
Node.js’i bir sunucuya kurmanın birden fazla yolu vardır. Seçilecek yöntem, projenizin gereksinimlerine, ihtiyaç duyduğunuz Node.js sürümüne ve esneklik beklentinize göre değişebilir. En yaygın kullanılan iki yöntem, işletim sisteminin paket yöneticisini kullanmak ve Node Version Manager (NVM) aracını kullanmaktır. Her iki yöntemin de kendine özgü avantajları ve dezavantajları bulunur.
Bu, en basit ve en hızlı kurulum yöntemidir. Linux dağıtımlarının kendi resmi depolarında genellikle bir Node.js sürümü bulunur. Ancak bu depolardaki sürümler genellikle en güncel sürümler olmayabilir. Daha güncel bir sürüm kurmak için NodeSource tarafından sağlanan depoları sisteme eklemek daha iyi bir yaklaşımdır.
Ubuntu/Debian için (Node.js 18.x sürümü):
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -sudo apt-get install -y nodejsCentOS/RHEL için (Node.js 18.x sürümü):
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -sudo yum install nodejs -yBu yöntemle yapılan kurulum sistem geneline yapılır ve yönetimi kolaydır. Ancak, farklı projeler için farklı Node.js sürümleri kullanmanız gerektiğinde esneklik sunmaz.
NVM, aynı sunucu üzerinde birden fazla Node.js sürümünü kurmanıza ve bunlar arasında kolayca geçiş yapmanıza olanak tanıyan bir komut satırı aracıdır. Bu, özellikle farklı Node.js sürümleri gerektiren birden fazla projeyi aynı sunucuda barındıran geliştiriciler için son derece kullanışlıdır. NVM, Node.js’i sistem geneli yerine kullanıcı bazında kurar, bu da `sudo` yetkilerine ihtiyaç duymadan paketleri yönetmenize olanak tanır.
NVM Kurulum Adımları:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bashsource ~/.bashrcnvm install --ltsnvm use --lts| Özellik | Paket Yöneticisi (APT/YUM) | Node Version Manager (NVM) |
|---|---|---|
| Kurulum Seviyesi | Sistem geneli (Global) | Kullanıcıya özel (User-specific) |
| Sürüm Yönetimi | Tek sürüm, güncelleme için depo değişikliği gerekir. | Birden fazla sürüm kurulabilir ve kolayca geçiş yapılabilir. |
| Gerekli Yetki | `sudo` (root) yetkisi gerektirir. | `sudo` yetkisi gerektirmez (ilk kurulum hariç). |
| Esneklik | Düşük. Farklı projeler için farklı sürümler kullanılamaz. | Yüksek. Proje bazında Node.js sürümü belirlenebilir. |
| Önerilen Kullanım | Tek ve kararlı bir sürümün yeterli olduğu basit sunucular. | Geliştirme ortamları ve birden fazla uygulama barındıran sunucular. |
Node.js’i kurduktan sonraki adım, uygulamanızı sunucuda sürekli ve kararlı bir şekilde çalıştırmaktır. Terminalde `node app.js` komutunu çalıştırmak geliştirme için yeterli olsa da, üretim ortamı için asla uygun değildir. Terminal kapandığında veya sunucu yeniden başladığında uygulamanız duracaktır. Bu sorunu çözmek için bir süreç yöneticisi (process manager) ve gelen istekleri uygulamaya yönlendirmek için bir ters proxy (reverse proxy) kullanılır.
PM2, Node.js uygulamaları için popüler bir süreç yöneticisidir. Uygulamanızın çökmesi durumunda otomatik olarak yeniden başlatır, sunucu açılışında uygulamanızı başlatacak şekilde yapılandırılabilir, uygulama performansını izlemenize olanak tanır ve işlemci çekirdeklerini verimli kullanmak için kümeleme (clustering) modu sunar.
PM2 Kurulumu ve Kullanımı:
sudo npm install pm2 -gpm2 start app.js --name "my-app"pm2 listpm2 startuppm2 saveNode.js uygulamanız genellikle `localhost:3000` gibi yerel bir port üzerinde çalışır. Dışarıdan gelen 80 (HTTP) ve 443 (HTTPS) portlarına gelen istekleri doğrudan Node.js uygulamasına yönlendirmek güvenlik ve performans açısından verimli değildir. Bunun yerine Nginx veya Apache gibi bir web sunucusunu ters proxy olarak kullanmak en iyi pratiktir. Nginx, gelen istekleri alır ve arka planda çalışan Node.js uygulamanıza iletir. Bu yapı, SSL sertifikalarını yönetmeyi, statik dosyaları (CSS, JS, resimler) daha verimli sunmayı ve birden fazla uygulamayı aynı sunucuda barındırmayı kolaylaştırır. Web sunucularının performansı hakkında daha fazla bilgi edinmek, bu kararı verirken size yardımcı olabilir; örneğin, Nginx ve Apache arasındaki hız farklarını incelemek faydalı olacaktır.
Örnek Nginx Yapılandırması:
/etc/nginx/sites-available/my-app adında bir dosya oluşturun ve içine aşağıdaki gibi bir yapılandırma ekleyin:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000; # Node.js uygulamanızın çalıştığı port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Bu yapılandırmayı etkinleştirdikten ve Nginx’i yeniden başlattıktan sonra, `example.com` adresine gelen tüm istekler 3000 portunda çalışan Node.js uygulamanıza yönlendirilecektir. Bu, uygulamanızı dış dünyaya güvenli ve ölçeklenebilir bir şekilde açmanın standart yoludur.