VPS’te Node.js Uygulaması Kurma ve Yayınlama
Kısa yanıt: Paylaşımlı hosting paketlerimizde Node.js uygulama yöneticisi (Setup Node.js App) yoktur; Node.js uygulamaları root erişimli bir VPS’te çalıştırılır. Ubuntu 24.04 VPS’te Node.js’in LTS sürümünü NodeSource deposundan kurun, uygulamanızı PM2 ile sürekli çalışır hâle getirin, Nginx’i ters vekil (reverse proxy) olarak önüne koyun ve Certbot ile SSL ekleyin.
Bu rehber kimin için: Node.js geliştiricileri · Gereken süre: 15 dakika · Seviye: İleri
Paylaşımlı hosting paketlerimizde Node.js uygulama yöneticisi, SSH ve cPanel Terminal bulunmaz; bu yüzden Express, NestJS ya da Next.js sunucu modu gibi sürekli çalışan Node.js uygulamaları paylaşımlı hostingte yayınlanamaz. Bu iş için kendi işletim sisteminiz ve root yetkiniz olan bir VPS gerekir: Node.js’i kurar, uygulamayı bir süreç yöneticisiyle ayakta tutar ve web trafiğini Nginx üzerinden uygulamaya iletirsiniz. VPS’te WebSocket bağlantıları ve sürekli çalışan arka plan işleri de aynı şekilde çalışır. Komutlar Ubuntu 24.04 LTS içindir; VPS paketlerimizde Debian 12, AlmaLinux 9 ve Rocky Linux 9 de seçilebilir.
VPS’e Node.js kurma
VPS’te Node.js’i kendiniz kurarsınız. Ubuntu 24.04 deposundaki nodejs paketi, Node.js projesinin desteğini bitirdiği 18 serisindendir; üretim için güncel LTS sürümünü NodeSource deposundan kurun.
- VPS’e sudo yetkili kullanıcınızla SSH ile bağlanın; sunucuyu yeni aldıysanız önce Ubuntu VPS ilk kurulum adımlarını tamamlayın.
- Paket listesini güncelleyin: sudo apt update && sudo apt upgrade -y
- NodeSource kurulum betiğini indirin: curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
- Betiği çalıştırmadan önce less nodesource_setup.sh ile içeriğine göz atın, ardından sudo -E bash nodesource_setup.sh komutuyla depoyu ekleyin.
- Node.js’i kurun: sudo apt install -y nodejs (npm bu pakete dahildir).
- Sürümleri doğrulayın: node -v ve npm -v
Aynı sunucuda farklı projeler farklı Node.js sürümleri istiyorsa sürümleri kullanıcı bazında yöneten nvm aracını da kullanabilirsiniz; bu durumda PM2’yi ve uygulamayı aynı kullanıcıyla çalıştırın.
Uygulama oluşturma
- Dosyaları yükleyin: Uygulama dosyalarınızı git clone, scp ya da SFTP ile sunucuda web kökü dışındaki bir klasöre (ör. /srv/uygulamam) aktarın; node_modules klasörünü aktarmayın, bağımlılıklar sunucuda kurulur.
- Uygulamayı tanımlayın: PM2’yi sudo npm install -g pm2 ile kurun; uygulamanın adını, başlangıç dosyasını ve çalışma klasörünü pm2 init simple komutunun oluşturduğu ecosystem.config.js dosyasında tanımlayın (name, script ve cwd alanları).
- Klasör ve adresi girin: ecosystem.config.js içindeki cwd alanına uygulama klasörünü (ör. /srv/uygulamam) yazın; alan adını ise Nginx sunucu bloğundaki server_name satırında tanımlarsınız (aşağıdaki bölüm).
- Başlangıç dosyası: script alanına app.js veya server.js gibi giriş dosyanızı yazın; package.json’daki start betiğiyle çalışan çatılarda (ör. Next.js) script alanına npm, args alanına start yazın.
- Ortam değişkenleri: Veritabanı bilgileri ve API anahtarlarını ecosystem.config.js içindeki env bölümünde (ör. NODE_ENV: "production", PORT: 3000) ya da yalnız uygulama kullanıcısının okuyabildiği bir .env dosyasında tutun; koda gömmeyin ve bu dosyaları depoya eklemeyin.
- Bağımlılıkları kurun: Uygulama klasöründe npm ci --omit=dev ile bağımlılıkları kurun (derleme adımı varsa önce npm ci ile tüm bağımlılıkları kurup npm run build çalıştırın), ardından pm2 start ecosystem.config.js ile uygulamayı başlatıp pm2 status ile çalıştığını kontrol edin.
Port ayarı
VPS’te portu siz belirlersiniz. Uygulamanın yalnız sunucu içinden erişilen bir adresi dinlemesini sağlayın (ör. Express’te app.listen(process.env.PORT, "127.0.0.1")) ve portu kodda process.env.PORT ile okuyun; dışarıya açılan 80 ve 443 portlarını Nginx dinler. Node.js sürecini root olarak çalıştırmayın. UFW kullanıyorsanız 3000 portunu açmayın, yalnız SSH ve web portlarına izin verin. Aynı sunucuda birden fazla uygulama çalıştıracaksanız her birine ayrı bir port verin.
PM2’yi kalıcı yapma ve Nginx ile yayınlama
PM2, uygulama çökerse onu yeniden başlatır. Sunucu yeniden açıldığında uygulamaların kendiliğinden kalkması için PM2’yi sistem açılışına bağlarsınız; Nginx de 80 ve 443 portlarına gelen istekleri uygulamaya iletir.
- pm2 startup komutunu sudo olmadan çalıştırın; çıktıda gösterilen ve sudo env PATH= ile başlayan satırı kopyalayıp çalıştırın.
- Çalışan uygulama listesini kaydedin: pm2 save
- Nginx’i kurun: sudo apt install -y nginx
- sudo nano /etc/nginx/sites-available/uygulamam ile bir sunucu bloğu oluşturun: listen 80; ve server_name alanadiniz.com www.alanadiniz.com; satırlarının altına, aşağıdaki tablodaki yönergeleri içeren bir location / { } bloğu ekleyin.
- Siteyi etkinleştirin: sudo ln -s /etc/nginx/sites-available/uygulamam /etc/nginx/sites-enabled/ ardından sudo nginx -t && sudo systemctl reload nginx
- Alan adınızın A kaydını VPS’in IP adresine yönlendirin, web portlarını açın (sudo ufw allow "Nginx Full") ve Certbot ile SSL kurun: sudo certbot --nginx -d alanadiniz.com -d www.alanadiniz.com
| Yönerge (location / içinde) | Ne işe yarar |
|---|---|
| proxy_pass http://127.0.0.1:3000; | İstekleri uygulamanın dinlediği porta iletir |
| proxy_http_version 1.1; | WebSocket ve kalıcı bağlantılar için gerekir |
| proxy_set_header Upgrade $http_upgrade; | WebSocket yükseltme isteğini uygulamaya taşır |
| proxy_set_header Connection "upgrade"; | Yükseltme isteğiyle birlikte gönderilir |
| proxy_set_header Host $host; | Uygulamanın ziyaretçinin yazdığı alan adını görmesini sağlar |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | Ziyaretçinin IP adresini uygulamaya bildirir |
| proxy_set_header X-Forwarded-Proto $scheme; | Bağlantının https olup olmadığını bildirir; Express’te app.set("trust proxy", 1) ile okunur |
Sunucu bloğunun genel yapısı ve PHP siteleriyle birlikte kullanımı Nginx kurulumu rehberinde. VPS yönetimsiz teslim edilir; Node.js, Nginx ve SSL gibi sunucu tarafı kurulumları, güncellemeleri ve izlemeyi ekibimize bırakmak isterseniz sunucu yönetimi hizmetini ekleyebilirsiniz.
Hâlâ çözülmediyse
Nginx “502 Bad Gateway” hatası veriyorsa uygulama çalışmıyordur ya da proxy_pass satırındaki port, uygulamanın dinlediği portla aynı değildir. pm2 status ile sürecin durumuna, pm2 logs uygulamam ile son hatalara, sudo tail -n 50 /var/log/nginx/error.log ile Nginx kayıtlarına bakın; en sık nedenler eksik bağımlılık, yanlış başlangıç dosyası ve tanımlanmamış ortam değişkenidir. Bu kurulum için VPS sunucu gerekir; paylaşımlı hosting paketlerimizde Node.js uygulaması çalıştırılamaz.
Sık sorulan sorular
Kodu güncelledim, değişiklik görünmüyor.
Node.js kodu bellekte çalıştığı için dosya değişikliği kendiliğinden yansımaz. Yeni kodu aktardıktan sonra pm2 reload uygulamam komutunu çalıştırın (systemd kullanıyorsanız sudo systemctl restart uygulamam); package.json değiştiyse önce bağımlılıkları npm ci --omit=dev ile yeniden kurun.
Next.js statik çıktısını nasıl yayınlarım?
Statik dışa aktarma (output: export) yaptıysanız oluşan out klasörünü doğrudan public_html’e yüklemeniz yeterlidir; Node.js uygulaması gerekmez.
Paylaşımlı hostingte Node.js uygulaması çalıştırabilir miyim?
Hayır. Paylaşımlı hosting paketlerimizde Node.js uygulama yöneticisi (Setup Node.js App), SSH ve cPanel Terminal yoktur; sunucu tarafında çalışan Node.js uygulamaları VPS sunucu üzerinde çalıştırılır. Yalnız statik çıktı üreten projeleri (ör. Next.js statik dışa aktarma ya da Vite derlemesi) kendi bilgisayarınızda derleyip çıktıyı public_html’e yükleyerek paylaşımlı hostingte yayınlayabilirsiniz. Sunucu tarafı kurulumu ekibimize bırakmak isterseniz sunucu yönetimi hizmetini ekleyebilirsiniz.
PM2 yerine systemd kullanabilir miyim?
Evet. /etc/systemd/system/uygulamam.service dosyasının [Service] bölümüne User=nodeapp, WorkingDirectory=/srv/uygulamam, Environment=NODE_
Hangi Node.js sürümünü kullanmalıyım?
Üretim ortamında Node.js projesinin önerdiği gibi yalnız LTS (uzun süreli destek) sürümlerini kullanın. NodeSource’un setup_lts.x betiği güncel LTS serisini kurar. Ana sürüm yükseltmesinden önce uygulamanızı yeni sürümde test edin ve package.json’daki engines alanında desteklediğiniz sürümü belirtin.
İlgili rehberler
- VPS’te Python (Django, Flask) Uygulaması Kurma
- Git ile VPS’e Otomatik Dağıtım
- cPanel Kaynak Kullanımı: CPU, RAM ve EP Limitleri
Bu rehber işinize yaradı mı?
Teşekkürler. Çözüm bulamadıysanız destek talebi açın veya [email protected] adresine yazın.