sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa İşletim Sistemleri Ubuntu Server Kurulumu Node.js ve Express.js Ubuntu'da Deploy: PM2 ve ...
🟠 Ubuntu Server Kurulumu

Node.js ve Express.js Ubuntu'da Deploy: PM2 ve Nginx

Ubuntu 22.04'te Node.js + Express.js uygulamasını PM2 process manager ve Nginx reverse proxy ile production'a deploy etme rehberi.

📅 3 Mayıs 2025 👁 6 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

Node.js ile Web Uygulaması Deploy Nedir?

Node.js, JavaScript'i sunucu tarafında çalıştıran olay güdümlü (event-driven) ve engellenmeyen G/Ç (non-blocking I/O) modeline sahip bir çalışma ortamıdır. Express.js ise Node.js üzerine inşa edilmiş minimal ve esnek bir web uygulama çerçevesidir. Bu ikiliyi üretim ortamında çalıştırmak için PM2 process manager ve Nginx reverse proxy kullanılır.

PM2, Node.js uygulamalarını arka planda çalıştıran, crash durumunda otomatik yeniden başlatan ve cluster modunda çok çekirdekli CPU kullanımını mümkün kılan bir process yöneticisidir. Nginx ise gelen HTTP/HTTPS isteklerini Node.js uygulamasına yönlendiren, SSL terminasyonu yapan ve statik dosyaları servis eden ters proxy olarak görev yapar.

Ön Gereksinimler

  • Ubuntu 22.04 LTS sunucu
  • Sudo yetkili kullanıcı
  • Alan adı (SSL için gerekli)
  • 80 ve 443 portları açık

Adım 1: Node.js Kurulumu (NodeSource)

Ubuntu'nun varsayılan deposundaki Node.js eski olabilir. Güncel LTS sürümü için NodeSource deposunu kullanın:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v

Adım 2: Örnek Express.js Uygulaması Oluşturma

mkdir -p /var/www/myapp
cd /var/www/myapp
npm init -y
npm install express
nano /var/www/myapp/app.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.get('/', (req, res) => {
  res.json({ message: 'Merhaba! Node.js uygulaması çalışıyor.', status: 'ok' });
});

app.get('/health', (req, res) => {
  res.json({ status: 'healthy', uptime: process.uptime() });
});

app.listen(PORT, '127.0.0.1', () => {
  console.log(`Sunucu http://127.0.0.1:${PORT} adresinde çalışıyor`);
});

Adım 3: PM2 Kurulumu ve Yapılandırması

sudo npm install -g pm2

Uygulamayı PM2 ile Başlatma

cd /var/www/myapp
pm2 start app.js --name "myapp"
pm2 status
pm2 logs myapp

ecosystem.config.js ile Gelişmiş Yapılandırma

nano /var/www/myapp/ecosystem.config.js
module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    instances: 'max',
    exec_mode: 'cluster',
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    log_file: '/var/log/pm2/myapp.log',
    error_file: '/var/log/pm2/myapp_error.log',
    merge_logs: true,
    log_date_format: 'YYYY-MM-DD HH:mm:ss'
  }]
};
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup systemd

PM2 startup komutunun çıktısındaki komutu root olarak çalıştırın (sudo ile).

Adım 4: Nginx Reverse Proxy Yapılandırması

sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/myapp
upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}

server {
    listen 80;
    server_name example.com www.example.com;

    access_log /var/log/nginx/myapp_access.log;
    error_log /var/log/nginx/myapp_error.log;

    location / {
        proxy_pass http://nodejs;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
        proxy_read_timeout 86400;
    }

    location /static/ {
        alias /var/www/myapp/public/;
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Adım 5: SSL Sertifikası (Let's Encrypt)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot otomatik olarak Nginx yapılandırmasını SSL için günceller ve her 90 günde bir yenileme için systemd timer kurar.

Adım 6: Güvenlik Duvarı Ayarları

sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Node.js portunu dışarıya açmayın, sadece Nginx üzerinden erişim olsun
sudo ufw deny 3000

PM2 Yönetim Komutları

pm2 list               # Tüm process'leri listele
pm2 restart myapp      # Uygulamayı yeniden başlat
pm2 reload myapp       # Zero-downtime reload
pm2 stop myapp         # Durdur
pm2 delete myapp       # Sil
pm2 logs myapp --lines 100  # Son 100 log satırı
pm2 monit              # Anlık izleme ekranı

Sık Karşılaşılan Sorunlar

502 Bad Gateway

pm2 status
pm2 logs myapp --err
sudo systemctl status nginx
curl http://127.0.0.1:3000

Port Zaten Kullanımda

sudo lsof -i :3000
sudo kill -9 PID

Sonuç

Ubuntu 22.04 üzerinde Node.js + Express.js uygulamasını PM2 ve Nginx ile production ortamına başarıyla deploy ettiniz. PM2'nin cluster modu çok çekirdekli CPU'ları verimli kullanırken, Nginx reverse proxy SSL terminasyonu ve statik dosya servisi gibi görevleri üstlenerek Node.js sürecinizin iş yükünü azaltır.

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.