Node.js Sunucu Kurulumu: Modern Web Uygulamaları İçin Altyapı.

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 Sunucu Kurulumu sürecinde Nginx'in ters proxy olarak gelen istekleri uygulamaya yönlendirmesi.
Node.js Sunucu Kurulumu sürecinde Nginx’in ters proxy olarak gelen istekleri uygulamaya yönlendirmesi.

Node.js Nedir ve Neden Sunucu Kurulumu Önemlidir?

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.

Kurulum Öncesi Hazırlıklar ve Sistem Gereksinimleri

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:

  • Bir Linux Sunucusu: Node.js, Ubuntu, Debian, CentOS gibi popüler Linux dağıtımlarında sorunsuz çalışır. Bu rehberde genel komutlar verilecek olsa da, kendi dağıtımınıza uygun paket yöneticisini (APT, YUM vb.) kullanmanız gerekebilir.
  • SSH Erişimi: Sunucuya uzaktan bağlanmak ve komutları çalıştırmak için SSH erişiminizin olması gerekir.
  • Sudo Ayrıcalıklarına Sahip Bir Kullanıcı: Sistem genelinde kurulum ve yapılandırma işlemleri yapmak için `sudo` yetkilerine sahip bir kullanıcı hesabıyla giriş yapmanız önemlidir. Doğrudan `root` kullanıcısı ile çalışmak güvenlik açısından tavsiye edilmez.

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.

Farklı Yöntemlerle Node.js Sunucu Kurulumu

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.

Paket Yöneticisi ile Kurulum (APT & YUM)

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ü):

  1. NodeSource deposunu eklemek için gerekli betiği indirin ve çalıştırın:

    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
  2. Node.js’i kurun:

    sudo apt-get install -y nodejs

CentOS/RHEL için (Node.js 18.x sürümü):

  1. NodeSource deposunu eklemek için betiği çalıştırın:

    curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
  2. Node.js’i kurun:

    sudo yum install nodejs -y

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

Node Version Manager (NVM) ile Kurulum

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ı:

  1. Resmi NVM GitHub deposundan kurulum betiğini indirin ve çalıştırın. En güncel sürüm numarasını kontrol ederek komutu güncelleyebilirsiniz:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  2. Kurulumdan sonra kabuk (shell) yapılandırmasını yeniden yüklemek için terminali kapatıp açın veya şu komutu çalıştırın:

    source ~/.bashrc
  3. NVM ile mevcut en son kararlı (LTS) Node.js sürümünü kurun:

    nvm install --lts
  4. Kurulan sürümü varsayılan olarak ayarlayın:

    nvm use --lts
  5. Kurulumu doğrulamak için `node -v` ve `npm -v` komutlarını çalıştırabilirsiniz.
Ö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 Uygulamasını Sunucuda Çalıştırmak ve Yönetmek

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: Üretim Ortamı İçin Süreç Yöneticisi

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ı:

  1. PM2’yi npm kullanarak global olarak kurun:

    sudo npm install pm2 -g
  2. Uygulamanızı PM2 ile başlatın:

    pm2 start app.js --name "my-app"
  3. PM2 ile çalışan uygulamaları listeleyin:

    pm2 list
  4. Sunucu yeniden başladığında PM2’nin uygulamalarınızı otomatik olarak başlatması için başlangıç betiği oluşturun:

    pm2 startup
  5. Mevcut PM2 süreç listesini kaydedin:

    pm2 save

Reverse Proxy Olarak Nginx Yapılandırması

Node.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;
    }
}

Node.js Sunucu Kurulumu sürecinde Nginx gibi bir ters proxy, gelen istekleri yöneterek güvenliği artırır
Node.js Sunucu Kurulumu sürecinde Nginx gibi bir ters proxy, gelen istekleri yöneterek güvenliği artırır

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.