Node.js Projemi Sunucuya Nasıl Kurarım? (PM2 ve Nginx Ayarı Olmadan, Plesk ve Git ile)
· 5 dk okuma
Bir Node.js uygulamasını kendi bilgisayarınızda node server.js ile çalıştırmak kolaydır; zor olan, aynı uygulamayı bir sunucuda kesintisiz, güvenli ve kolayca güncellenebilir biçimde çalışır tutmaktır. Boş bir Linux sunucuda bu iş SSH bağlantısı, süreç yöneticisi, reverse proxy ve SSL ayarlarından oluşan uzun bir yapılandırma gerektirir. Bu rehberde önce klasik yöntemin hangi parçalardan oluştuğunu, ardından aynı sonuca Plesk Obsidian paneli ve GitHub deponuzla terminal açmadan nasıl ulaşacağınızı adım adım anlatıyoruz.
Bir Node.js Uygulamasını Yayında Tutan 4 Bileşen
Klasik bir Linux sunucuda (yönetilmeyen VPS) aşağıdaki parçaların her birini kendiniz kurar ve bakımını üstlenirsiniz:
- Node.js çalışma ortamı: Sunucuya doğru Node.js sürümünü kurmak (çoğunlukla
nvmile) ve güvenlik güncellemelerini takip etmek. - Süreç yöneticisi: Uygulama çöktüğünde ya da sunucu yeniden başladığında uygulamayı yeniden ayağa kaldıran araç. Klasik kurulumda bu iş için PM2 kullanılır;
pm2 startupvepm2 saveadımları unutulursa sunucu yeniden başladığında uygulama da kapalı kalır. - Reverse proxy: 80 ve 443 numaralı portlara gelen istekleri uygulamanın dinlediği porta (ör.
3000) aktaran web sunucusu. Nginx'tekiproxy_passsatırında yapılan tek bir port hatası, ziyaretçilere 502 Bad Gateway sayfası olarak döner. - SSL sertifikası: HTTPS için sertifikanın alınması ve süresi dolmadan yenilenmesi.
Plesk Obsidian'da bu dört bileşenin karşılığı paneldedir: Node.js sürümü listeden seçilir, uygulamayı Phusion Passenger çalıştırıp web sunucusuna bağlar, Let's Encrypt sertifikası panelden alınır ve kendiliğinden yenilenir. Bu yüzden PM2 kurmanız ya da Nginx yapılandırma dosyası yazmanız gerekmez.
Node.js Yayınlama Yöntemleri Karşılaştırması
| Yöntem | Kurulum ve bakım | Gereken bilgi | Kimler için uygun? |
|---|---|---|---|
| Yönetilmeyen VPS (SSH + PM2 + Nginx) | Node.js, PM2, Nginx, SSL ve güvenlik duvarı elle kurulur; işletim sistemi güncellemeleri sizdedir | Linux sunucu yönetimi | Sunucu üzerinde tam denetim isteyen ekipler |
| Coolify gibi açık kaynak PaaS paneli | Git push ile Docker tabanlı derleme ve dağıtım; sunucunun bakımı sizdedir | Docker temel bilgisi | Birden fazla servisi konteynerle çalıştıranlar |
| Plesk Obsidian ile Developer Hosting (zuwinasa cloud) | Node.js sürümü, npm, ortam değişkenleri ve SSL panelden yönetilir; sunucu bakımı sağlayıcıdadır | Git ve npm temel bilgisi | Express ya da NestJS uygulamasını site, veritabanı ve e-postayla tek panelde yönetmek isteyenler |
Plesk ve Git ile Node.js Uygulamasını 5 Adımda Yayına Alma
1. Projenizi Yayına Hazırlayın
Uygulamanın sunucuda sorunsuz çalışması için deponuzda şunları kontrol edin:
- Port: Plesk uygulamanızı Passenger üzerinden çalıştırdığı için sabit bir port belirlemezsiniz. Portu ortam değişkeninden okuyun:
app.listen(process.env.PORT || 3000). - Başlangıç dosyası: Uygulamayı başlatan dosyanın adını (
app.js,server.jsya da TypeScript projelerinde derlenmişdist/main.js) not edin. - Gizli bilgiler:
.envdosyasını depoya eklemeyin; veritabanı adresini ve API anahtarlarını 4. adımda panelden ortam değişkeni olarak tanımlayacaksınız. - Bağımlılıklar:
package.jsonvepackage-lock.jsondepoda olmalıdır;node_modulesklasörü depoya eklenmez, sunucuda kurulur.
2. GitHub Deponuzu Plesk'e Bağlayın
- Plesk'te Web Siteleri ve Alan Adları (Websites & Domains) bölümünden alan adınızın Git menüsüne girin ve yeni depo ekleyin.
- Kaynak olarak GitHub ya da Bitbucket gibi uzak Git barındırma seçeneğini işaretleyip deponun adresini yazın.
- Özel (private) bir depo kullanıyorsanız adresi SSH biçiminde (
[email protected]:kullanici/proje.git) girin. Plesk'in ürettiği SSH ortak anahtarını kopyalayıp GitHub'da deponun Settings > Deploy keys bölümüne ekleyin; bu anahtar varsayılan olarak yalnız o depoyu okuma yetkisi verir. - Hedef klasörü seçin (varsayılan
/httpdocs) ve onaylayın. Plesk depoyu klonlayıp dosyaları bu klasöre yerleştirir.
3. Her Push'ta Otomatik Dağıtımı Açın
- Deponun Depo Ayarları (Repository Settings) ekranında dağıtım biçimini otomatik olarak bırakın.
- Aynı ekrandaki webhook adresini kopyalayın; GitHub'da Settings > Webhooks bölümüne yeni webhook olarak ekleyip tetikleyici olarak push olayını seçin. Artık depoya her push'unuzda Plesk değişiklikleri çekip yayına alır.
- Ek dağıtım eylemlerini etkinleştirip her dağıtımdan sonra çalışacak komutları her satıra bir tane gelecek şekilde yazın: bağımlılıklar için
npm ci, derleme içinnpm run build, uygulamanın yeni kodla yeniden başlaması içinmkdir -p tmp && touch tmp/restart.txt(Passenger, uygulama kökündeki bu dosyanın tarihi değişince uygulamayı yeniden başlatır). - Komut çalışırken
npm: command not foundhatası alırsanız npm'in Plesk'teki tam yolunu yazın:/opt/plesk/node/<sürüm>/bin/npm.
4. Node.js Ayarlarını Yapın
Alan adınızın Node.js menüsünde şu alanları doldurun:
- Node.js sürümü: Projenizin desteklediği LTS sürümünü listeden seçin.
- Uygulama kökü (Application Root): Deponun dağıtıldığı klasör, ör.
/httpdocs. - Belge kökü (Document Root): Uygulama kökünün bir alt klasörü olmalıdır, ör.
/httpdocs/public; statik dosyalar buradan sunulur. - Uygulama modu (Application Mode):
production; bu değerNODE_ENVdeğişkenine yazılır. - Başlangıç dosyası (Application Startup File): 1. adımda not ettiğiniz dosya; varsayılan değer
app.js'dir. - Özel ortam değişkenleri:
DATABASE_URL, API anahtarları ve diğer gizli bilgiler.
5. Bağımlılıkları Kurun ve Uygulamayı Başlatın
- NPM install düğmesiyle
package.jsondosyasındaki bağımlılıkları kurun; derleme gerekiyorsa Run script ilebuildbetiğini çalıştırın. - Enable Node.js düğmesine tıklayın; uygulamanız alan adınızda yayına girer. Ayarları değiştirdikten sonra Restart App ile yeniden başlatın.
- HTTPS için SSL/TLS Sertifikaları bölümünden ücretsiz Let's Encrypt sertifikasını alın. Uygulama hata verirse alan adının Günlükler (Logs) bölümündeki Node.js kayıtlarına bakın.
Not: Başlangıç dosyanız
importsözdizimiyle (ES modülü) yazılmışsa Passenger uygulamayı başlatırkenrequire() of ES Module is not supportedhatası verebilir. Bu durumda uygulama kökünde yalnızimport('./app.js');satırını içeren birpassenger.cjsdosyası oluşturun ve başlangıç dosyası olarak bunu seçin.
Hangi Pakette Çalışır?
zuwinasa cloud'da Node.js desteği Developer Hosting paketlerinde (Full Stack ve Dev-Box) bulunur; iki pakette de Git entegrasyonu ve /bin/bash SSH erişimi standarttır. Terminal kullanmayı tercih ettiğinizde aynı abonelikte npm komutlarını SSH ile doğrudan çalıştırabilirsiniz. Uygulamanız Docker ile çalışıyorsa Coolify sunucusu, işletim sistemi düzeyinde tam denetim gerekiyorsa root erişimli Cloud VPS daha uygun olur. Alan adı ve DNS gibi genel yayına alma adımları için uygulamamı internete nasıl yayınlarım rehberine bakabilirsiniz.