Ubuntu 24.04’te Node.js Production Kurulumu: PM2, Nginx, SSL, Log ve Otomatik Restart

  • Home
  • Cloud
  • Ubuntu 24.04’te Node.js Production Kurulumu: PM2, Nginx, SSL, Log ve Otomatik Restart
Ubuntu 24.04 üzerinde Node.js, Nginx, SSL, log izleme ve otomatik yeniden başlatma katmanları

Bir Node.js uygulamasını Ubuntu’ya kurup node app.js ile çalıştırmak geliştirme için yeterli olabilir; production ortamında ise süreç yönetimi, ters proxy, TLS, log rotasyonu, güvenlik ve yeniden başlatma senaryoları birlikte ele alınmalıdır. Bu rehber, Ubuntu 24.04 üzerinde tek sunuculu ama operasyonel olarak kontrollü bir Node.js kurulumunu adım adım kurar.

Node.js’e yeni başlıyorsanız önce Node.js nedir ve Ubuntu’ya nasıl kurulur? yazısını okuyabilirsiniz. Buradaki odak, çalışan kodu 7/24 hizmet veren production yapısına taşımaktır.

Hedef production mimarisi

  • Node.js uygulaması ayrı ve yetkileri sınırlı bir Linux kullanıcısıyla çalışır.
  • PM2 süreci izler, hata halinde yeniden başlatır ve reboot sonrasında process listesini geri getirir.
  • Uygulama yalnızca 127.0.0.1:3000 gibi yerel bir adreste dinler; internete Nginx üzerinden açılır.
  • Nginx alan adı, reverse proxy ve HTTPS katmanını yönetir.
  • Log büyümesi sınırlandırılır; sağlık kontrolü, kaynak kullanımı ve sertifika yenilemesi izlenir.

1. Sunucuyu hazırlayın

İşlemleri doğrudan root kullanıcısıyla yapmak yerine sudo yetkili bir yönetim hesabıyla ilerleyin. Güncellemeleri uygulayın ve gerekli temel paketleri yükleyin:

sudo apt update
sudo apt upgrade -y
sudo apt install -y curl git build-essential nginx

UFW kullanıyorsanız önce mevcut SSH oturumunu kapatmadan SSH ve Nginx profillerini izinli hale getirin. Ubuntu’nun varsayılan firewall arayüzü UFW’dir ve kural durumunu sudo ufw status verbose ile kontrol edebilirsiniz.

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status verbose

2. Node.js LTS sürümünü kurun

Production ortamında desteklenen bir LTS hattı kullanın. Bu rehber hazırlanırken Node.js 24 LTS hattı günceldi; kurulumdan önce Node.js indirme ve sürüm sayfasından mevcut LTS durumunu tekrar kontrol edin.

NVM, Node sürümünü uygulama kullanıcısı altında yönetmeyi kolaylaştırır. Uzak kurulum betiğini doğrudan çalıştırmak yerine önce indirip incelemek daha güvenlidir:

curl -fsSLo /tmp/install-nvm.sh \
  https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh
less /tmp/install-nvm.sh
bash /tmp/install-nvm.sh
source ~/.bashrc
nvm install --lts
nvm alias default 'lts/*'
node -v
npm -v

Sürümü projede sabitlemek için repoya bir .nvmrc dosyası ekleyin. Böylece geliştirme, CI ve production ortamında aynı ana sürümün kullanılması kolaylaşır.

3. Uygulamayı production için hazırlayın

mkdir -p ~/apps/my-api
cd ~/apps/my-api
git clone https://example.com/company/my-api.git current
cd current
npm ci
npm run build
npm prune --omit=dev

Uygulamanın 127.0.0.1 üzerinde dinlemesini sağlayın. Veritabanı parolası, API anahtarı ve benzeri sırları Git’e veya PM2 dosyasına açık biçimde yazmayın. Ortam dosyası kullanılıyorsa erişimi yalnızca uygulama kullanıcısıyla sınırlandırın:

chmod 600 .env

4. PM2 ile süreç yönetimi ve otomatik restart

npm install -g pm2
pm2 init simple

ecosystem.config.js dosyasını uygulamanıza göre düzenleyin:

module.exports = {
  apps: [{
    name: 'my-api',
    script: './dist/server.js',
    cwd: '/home/deploy/apps/my-api/current',
    instances: 1,
    exec_mode: 'fork',
    autorestart: true,
    max_memory_restart: '512M',
    restart_delay: 3000,
    time: true,
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
};
pm2 start ecosystem.config.js --env production
pm2 status
pm2 save
pm2 startup

pm2 startup sistemd için çalıştırmanız gereken sudo komutunu ekrana verir; sabit bir komutu kopyalamak yerine PM2’nin ürettiği komutu kullanın. Ardından pm2 save ile process listesini tekrar kaydedin. PM2 dokümantasyonu, Node.js sürümü değiştiğinde startup betiğinin yeniden oluşturulmasını önerir.

5. Nginx reverse proxy yapılandırması

/etc/nginx/sites-available/my-api dosyasını oluşturun:

server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 60s;
    }
}
sudo ln -s /etc/nginx/sites-available/my-api \
  /etc/nginx/sites-enabled/my-api
sudo nginx -t
sudo systemctl reload nginx

Nginx, isteği yerel Node.js portuna aktarır ve istemciye yanıtı döndürür. WebSocket kullanıyorsanız Upgrade ve Connection başlıklarını ayrıca yapılandırın; her uygulamaya gereksiz WebSocket ayarı eklemeyin.

6. SSL sertifikası ve otomatik yenileme testi

Alan adının A/AAAA kayıtları sunucuya yönelmeli ve 80 numaralı port dışarıdan erişilebilir olmalıdır. Certbot’un Nginx entegrasyonuyla sertifikayı alın:

sudo snap install --classic certbot
sudo certbot --nginx -d app.example.com
sudo certbot renew --dry-run

renew --dry-run testi başarısızsa sertifikayı aldığınız için kurulumu tamamlanmış saymayın. DNS, port 80 erişimi, Nginx sanal hostu ve sistem saatini kontrol edin.

7. Log yönetimi ve izleme

pm2 logs my-api --lines 100
pm2 monit
journalctl -u pm2-deploy --since today
sudo tail -f /var/log/nginx/error.log

PM2 logları varsayılan olarak kullanıcının ~/.pm2/logs dizinindedir. Diskin kontrolsüz dolmasını önlemek için işletim sistemi logrotate yapılandırması veya PM2’nin log rotasyon modülü kullanılmalıdır. Yalnızca log yazmak yeterli değildir; uygulama hata oranı, bellek, disk, yanıt süresi, HTTP 5xx ve health endpoint ayrıca izlenmelidir.

8. Güncelleme ve geri dönüş akışı

  1. Mevcut sürümü ve yapılandırmayı yedekleyin.
  2. Yeni sürümü ayrı release dizinine alın; bağımlılıkları kurun ve build/test çalıştırın.
  3. Veritabanı migration’ı varsa geri dönüş etkisini önceden değerlendirin.
  4. pm2 reload ecosystem.config.js --env production sonrasında health check ve logları kontrol edin.
  5. Cluster mode kullanmayan tek instance uygulamada reload işleminin kısa kesinti yaratabileceğini kabul edin; gerçek sıfır kesinti için stateless tasarım ve birden fazla instance gerekir.

Production kontrol listesi

  • Uygulama root olmayan kullanıcıyla çalışıyor.
  • Node.js desteklenen LTS sürümünde ve sürüm dosyada sabit.
  • Uygulama portu yalnızca loopback adresinde; dış trafik Nginx üzerinden geliyor.
  • nginx -t, HTTPS ve certbot renew --dry-run başarılı.
  • pm2 save ve startup servisi doğrulandı; kontrollü reboot testi yapıldı.
  • Log rotasyonu, disk alarmı, health check ve kaynak izleme aktif.
  • Sırlar repoda değil; yedek ve geri dönüş adımları test edildi.

Hangi altyapı daha uygun?

Tek bir API veya web uygulaması için doğru boyutlandırılmış bir VDS Hosting yeterli olabilir. Node.js süreçleri AI agent, bot, n8n veya zamanlanmış otomasyonlarla birlikte 7/24 çalışacaksa AI Agent Hosting yaklaşımını değerlendirebilirsiniz. Kurulum, CI/CD, izleme ve bakım sorumluluğunu operasyon modeliyle birlikte ele almak için Narweb DevOps hizmeti üzerinden teknik görüşme talep edebilirsiniz.

Kaynaklar

Hemen bugün siz de mutlu Narweb müşterileri arasına katılın!

Narweb Cloud altyapısına geçerek siz de hem uygun fiyat hem de kaliteli hizmet almaya hemen başlayabilirsiniz.

Copyright 2000 - 2025 © NARWEB.net. Tüm hakları saklıdır. Narweb® Markası Narnet Bilgisayar Dahili Tic. LTD. ŞTİ.'nin tescilli bir markasıdır.