Node.js Production Kurulumu: Ubuntu Üzerinde PM2 ve Nginx Rehberi
Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, Ubuntu sunucu üzerinde çalışan bir Node.js uygulamasını production (canlı ortam) için nasıl hazırlayacağınızı öğreneceksiniz.
PM2 ile süreç yönetimi, Nginx ile ters proxy yapılandırması ve Let’s Encrypt ile HTTPS kurulumu adım adım ele alınmaktadır.
Amaç, kesintisiz çalışan, güvenli ve ölçeklenebilir bir Node.js altyapısı oluşturmaktır.
Teknik Özet
- Konu: Ubuntu üzerinde Node.js production kurulumu
- Çözülen Problem: Node.js uygulamasının güvenli, sürekli ve HTTPS üzerinden çalışması
- Kullanılan Araçlar: Node.js, PM2, Nginx, Let’s Encrypt, UFW
- Sonuç: Sunucu yeniden başlatılsa bile çalışan, profesyonel production ortamı
Ön Hazırlıklar
Başlamadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
- Ubuntu yüklü bir sunucu
sudoyetkisine sahip bir kullanıcı (root kullanımı önerilmez)- Sunucu IP adresine yönlendirilmiş bir alan adı
- Örnek:
uygulama.rabisu.cloud
- Örnek:
1. Node.js Kurulumu (LTS)
Ubuntu depolarındaki Node.js sürümü güncel olmayabilir.
Bu nedenle NodeSource deposu kullanılarak LTS sürümü kurulacaktır.
cd ~
curl -sL https://deb.nodesource.com/setup_24.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
- Bu komut Node.js deposunu sisteme ekler ve paket listesini günceller.
sudo apt install nodejs
node -v
- Derleme gerektiren bazı npm paketleri için ek araçlar kurulmalıdır:
sudo apt install build-essential
2. Örnek Node.js Uygulaması Oluşturma
- Uygulamanın yalnızca sunucu içinden erişilebilir olması güvenlik açısından önemlidir.
nano hello.js
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Merhaba Rabisu Bulut!\n');
});
server.listen(3000, '127.0.0.1');
- Bu uygulama yalnızca localhost üzerinden erişilebilir şekilde çalışır.
Test etmek için:
node hello.js
3. PM2 ile Süreç Yönetimi
- PM2, Node.js uygulamalarının arka planda sürekli çalışmasını sağlar.
sudo npm install -g pm2
pm2 start hello.js
- Sunucu yeniden başlatıldığında uygulamanın otomatik başlaması için:
pm2 startup systemd
pm2 save
4. Nginx Reverse Proxy Yapılandırması
- Node.js uygulaması doğrudan internete açılmamalıdır.
- Tüm web trafiği Nginx üzerinden yönlendirilir.
sudo nano /etc/nginx/sites-available/uygulama.rabisu.cloud
server {
listen 80;
server_name uygulama.rabisu.cloud;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
- Yapılandırmayı etkinleştirin:
sudo ln -s /etc/nginx/sites-available/uygulama.rabisu.cloud /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
5. Güvenlik Duvarı (UFW) Ayarları
- Sunucuda yalnızca gerekli portlara izin verilmelidir.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
- Bu ayarlarla yalnızca SSH, HTTP ve HTTPS trafiği kabul edilir.
6. HTTPS (Let’s Encrypt) Kurulumu
- HTTPS hem güvenlik hem de SEO açısından zorunludur.
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d uygulama.rabisu.cloud
- Otomatik yenilemeyi test etmek için:
sudo certbot renew --dry-run
7. Güvenlik ve Performans İyileştirmeleri
Ortam Değişkenleri
- Hassas bilgiler kod içinde tutulmamalıdır.
npm install dotenv
- .env dosyası sürüm kontrolüne eklenmemelidir.
Nginx Gzip Sıkıştırma
gzip on;
gzip_types text/plain text/css application/javascript application/json;
- Bu ayar sayfa yüklenme süresini azaltır.
Sıkça Sorulan Sorular
1. Neden Nginx kullanılır? Nginx, SSL, önbellekleme ve trafik yönetiminde Node.js’e göre daha verimlidir.
2. Kod güncellendiğinde ne yapılmalıdır? PM2 süreci yeniden başlatılmalıdır.
pm2 restart hello
3. Sunucu yeniden başlatıldığında uygulama çalışır mı? Evet. pm2 startup ve pm2 save komutları sayesinde otomatik başlar.
4. EADDRINUSE hatası ne anlama gelir? Belirtilen port başka bir süreç tarafından kullanılmaktadır.
Sonuç
Bu rehberle birlikte:
Node.js uygulaması kesintisiz çalışır
HTTPS ile güvenli bağlantı sağlanır
Nginx ile performans artırılır
PM2 sayesinde süreç yönetimi otomatikleşir
Rabisu Bulut Platformu, Ubuntu tabanlı tüm production ortamları için sağlam ve sürdürülebilir bir temel sunar.