Skip to content
Back to blog
Rehber Node.js Deployment PM2 Nginx Sistem Yönetimi DevOps

Node.js Uygulamalarında Süreklilik: PM2 ve Nginx ile Prodüksiyon Ortamı Kurulumu

Node.js uygulamalarınızı sunucuda canlıya alırken dikkat etmeniz gereken süreçler, PM2 ile süreç yönetimi ve Nginx üzerinden ters vekil sunucu yapılandırması üzerine kapsamlı bir teknik rehber.

Caner Serbest

Sistem ve Altyapı

2 min read

Node.js Uygulamalarında Süreklilik: PM2 ve Nginx ile Prodüksiyon Ortamı Kurulumu

Modern web geliştirmede Node.js, hız ve performans avantajlarıyla birçok projenin omurgasını oluşturuyor. Ancak yerel geliştirme ortamında çalışan bir node app.js komutu, üretim ortamı (production) için yeterli değildir. Bir sunucuda uygulamanızın kesintisiz çalışması, hatalarda kendini yenilemesi ve dış dünyayla güvenli bir şekilde konuşması gerekir. Bu rehberde, bir Node.js uygulamasını profesyonel bir şekilde deploy etmenin adımlarını inceleyeceğiz.

1. Neden Doğrudan node app.js Kullanmıyoruz?

Birçok geliştirici, uygulamasını çalıştırırken node server.js komutunu kullanır. Eğer terminali kapatırsanız, uygulama da kapanır. Ayrıca uygulamanız bir hata nedeniyle çökerse (crash), manuel olarak tekrar başlatmanız gerekir. Üretim ortamında bir sunucunun 7/24 çalışması beklenir. İşte tam bu noktada Süreç Yöneticileri (Process Managers) devreye girer.

2. PM2 ile Uygulama Yönetimi

PM2, Node.js için en popüler süreç yöneticisidir. Uygulamanızı arka planda çalıştırır, çöktüğünde otomatik olarak yeniden başlatır ve sistem kaynaklarını izlemenize olanak tanır.

PM2 Kurulumu ve Başlatma

Öncelikle sisteminize küresel olarak yükleyin:

npm install pm2 -g

Uygulamanızın ana dizininde şu komutla çalıştırın:

pm2 start app.js --name "proje-adi"

Temel PM2 Komutları

  • pm2 list: Çalışan süreçleri gösterir.
  • pm2 logs: Uygulama çıktılarını ve hatalarını anlık izler.
  • pm2 stop proje-adi: Uygulamayı durdurur.
  • pm2 restart proje-adi: Uygulamayı yeniden başlatır.

Önemli: Sunucu yeniden başladığında PM2’nin otomatik devreye girmesi için pm2 startup komutunu çalıştırıp, çıktıda verilen komutu kopyalayıp terminale yapıştırmalısınız.

3. Nginx ile Ters Vekil (Reverse Proxy) Yapılandırması

Node.js uygulamaları genellikle 3000, 8080 gibi portlarda çalışır. Ancak kullanıcıların uygulamanıza http://ip-adresi:3000 şeklinde erişmesini istemezsiniz. Nginx’i bir kalkan olarak kullanarak gelen istekleri 80 (HTTP) veya 443 (HTTPS) portundan alıp, Node.js uygulamanıza yönlendireceğiz.

Nginx Yapılandırma Dosyasını Hazırlama

/etc/nginx/sites-available/proje-adi dosyasını oluşturun ve içine şu konfigürasyonu ekleyin:

server {
    listen 80;
    server_name domaininiz.com;

    location / {
        proxy_pass http://localhost:3000;
        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ırma, sunucunuza gelen tüm trafiği Node.js’in çalıştığı 3000 portuna sorunsuz bir şekilde iletir. Değişiklikleri kaydettikten sonra sudo ln -s /etc/nginx/sites-available/proje-adi /etc/nginx/sites-enabled/ komutu ile sembolik bağ oluşturun ve sudo nginx -t ile hata kontrolü yapıp sudo systemctl restart nginx ile servisi yeniden başlatın.

4. Ortam Değişkenleri ve Güvenlik

Üretim ortamında .env dosyalarınızı asla Git deposuna yüklemeyin. Sunucu üzerinde .env dosyanızı oluşturun ve hassas bilgilerinizi (veritabanı şifreleri, API anahtarları) buraya kaydedin.

  • İpucu: dotenv kütüphanesini kullanarak değişkenlerinizi uygulamanızın içine yükleyebilirsiniz.

5. Güvenlik ve İyileştirmeler

  • HTTPS: Mutlaka SSL sertifikası kullanın. certbot ile Let’s Encrypt kullanarak ücretsiz bir şekilde HTTP trafiğinizi HTTPS’e çevirebilirsiniz.
  • Kullanıcı Yetkileri: Uygulamanızı hiçbir zaman root kullanıcısı ile çalıştırmayın. Kısıtlı yetkilere sahip bir sistem kullanıcısı oluşturup işlemleri onun üzerinden yönetmek, olası bir güvenlik ihlalinde sunucunuzun tamamen ele geçirilmesini zorlaştırır.
  • Log Yönetimi: PM2 logları zamanla büyüyebilir. pm2-logrotate modülünü kurarak eski logların otomatik silinmesini veya arşivlenmesini sağlayabilirsiniz.

Sonuç

Bir Node.js uygulamasını deploy etmek, sadece kodları sunucuya kopyalamaktan ibaret değildir. Uygulamanın kararlılığı, dış dünyaya açılan kapısı (Nginx) ve güvenliği bir bütün olarak ele alınmalıdır. PM2 ve Nginx kombinasyonu, küçük ve orta ölçekli projeler için endüstri standardı haline gelmiş, güvenilir ve sürdürülebilir bir yapıdır. Bu adımları takip ederek uygulamanızı gerçek dünya koşullarına hazır hale getirebilirsiniz.

Sistem yöneticiliği ve uygulama yayını bir maratondur. İlk kurulumdan sonra izleme (monitoring) araçları ekleyerek sunucunuzun sağlığını yakından takip etmeyi unutmayın.


Bu yazı Gemini ile otomatik oluşturulmuştur.