VPS'te Node.js Deploy: PM2, Nginx, SSL Rehberi (2026) - BulutUp - BulutUp

VPS Sunucuda Node.js Uygulaması Deploy Etme: PM2, Nginx ve SSL

  • 22 Apr 2026
  • 4 dk okuma

Node.js Uygulamanızı Production'a Taşıyın

Geliştirme ortamında çalışan Node.js uygulamanızı VPS sunucuya deploy etmek, projenizi dünyaya açmanın en esnek yoludur. Bu rehberde production-ready bir deployment sürecini adım adım gösteriyoruz.

Gereksinimler

  • Ubuntu 22.04 LTS çalıştıran bir VPS sunucu
  • Domain adı (DNS kayıtları sunucuya yönlendirilmiş)
  • Node.js uygulamanız (Express, Fastify, NestJS vb.)
  • SSH erişimi

Adım 1: Node.js Kurulumu (NVM ile)

# NVM kurulumu
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc

# Node.js LTS kurulumu
nvm install --lts
nvm use --lts
node --version  # v20.x.x

Adım 2: Uygulamayı Sunucuya Yükleme

# Uygulama dizinini oluşturun
sudo mkdir -p /var/www/myapp
sudo chown $USER:$USER /var/www/myapp

# Git ile klonlayın
cd /var/www/myapp
git clone https://github.com/kullanici/uygulama.git .

# Bağımlılıkları kurun
npm ci --production

# Environment değişkenlerini ayarlayın
cp .env.example .env
nano .env  # Production değerlerini girin

Adım 3: PM2 Process Manager

PM2, Node.js uygulamalarını production'da çalıştırmak için standart araçtır. Otomatik restart, cluster mode ve log yönetimi sunar.

# PM2 global kurulumu
npm install -g pm2

# Uygulamayı başlatın
pm2 start app.js --name "myapp" -i max

# Cluster mode ile CPU çekirdek sayısı kadar process
# -i max: tüm CPU çekirdeklerini kullanır

# Yararlı PM2 komutları
pm2 status          # Durum kontrolü
pm2 logs myapp      # Log görüntüleme
pm2 restart myapp   # Yeniden başlatma
pm2 reload myapp    # Zero-downtime reload

# Sunucu restart'ta otomatik başlatma
pm2 startup
pm2 save

PM2 Ecosystem Dosyası

// ecosystem.config.js
module.exports = {
  apps: [{
    name: "myapp",
    script: "./dist/server.js",
    instances: "max",
    exec_mode: "cluster",
    env_production: {
      NODE_ENV: "production",
      PORT: 3000
    },
    max_memory_restart: "500M",
    log_date_format: "YYYY-MM-DD HH:mm:ss",
    error_file: "/var/log/pm2/myapp-error.log",
    out_file: "/var/log/pm2/myapp-out.log"
  }]
};

Adım 4: Nginx Reverse Proxy

# Nginx kurulumu
sudo apt install nginx -y

# Site yapılandırması
sudo nano /etc/nginx/sites-available/myapp
upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}

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

    # Güvenlik header'ları
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    # Statik dosyalar
    location /static/ {
        alias /var/www/myapp/public/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # API ve uygulama
    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;
    }
}
# Siteyi aktif edin
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 orneksite.com -d www.orneksite.com

# Otomatik yenileme testi
sudo certbot renew --dry-run

Adım 6: Basit CI/CD Pipeline

Git push ile otomatik deployment için basit bir script:

#!/bin/bash
# /var/www/myapp/deploy.sh
cd /var/www/myapp
git pull origin main
npm ci --production
npm run build  # TypeScript/Babel varsa
pm2 reload myapp --update-env

GitHub Actions ile otomatik deploy:

# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: /var/www/myapp/deploy.sh

Monitoring ve Log Yönetimi

# PM2 monitoring dashboard
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

# Sistem kaynak kullanımı
pm2 monit

Performans İpuçları

  • Gzip sıkıştırma: Nginx'te gzip aktif edin
  • HTTP/2: SSL ile birlikte otomatik aktif olur
  • Connection pooling: Veritabanı bağlantılarını havuzlayın
  • Redis cache: Sık erişilen verileri cache'leyin
  • Rate limiting: API abuse'a karşı koruma

Sonuç

VPS sunucu üzerinde Node.js deployment, size tam kontrol ve esneklik sağlar. PM2 ile güvenilir process yönetimi, Nginx ile yüksek performanslı reverse proxy ve SSL ile güvenli iletişim kurabilirsiniz.

BulutUp VPS ile Node.js uygulamanızı yüksek performanslı NVMe SSD diskler ve düşük latency ağ altyapısı üzerinde çalıştırın.

Paylaş:
İlgili Yazılar
Docker Image ile VPS: Tek Tıkla Container Ortamı Kurulumu

VPS sipariş ederken Docker hazır image seçerek saniyeler içinde container ortamı...

Neden BulutUp'ı Tercih Etmelisiniz?

Yurtdışı sunucu firmaları mı yoksa yerli bir çözüm mü? TL ile ödeme, Türkçe dest...

Ubuntu vs Debian vs CentOS: VPS İçin En İyi Linux Dağıtımı Hangisi?

VPS sunucunuz için hangi Linux dağıtımını seçmelisiniz? Ubuntu, Debian, CentOS,...