~/grkn/posts $ cat nodejs-projesini-ubuntuya-deploy-etmek.md

· 4 min read · DevOps · Author: Gürkan Biçer

Node.js Projesini Ubuntu'ya Deploy Etmek

Read this in English →

Bir Node.js projesini Ubuntu sunucusuna nasıl deploy edersiniz? Hadi adım adım projenizi deploy edelim.

Projenizin tamamını Node.js ile yazdınız, ya da ana projeniz için Node.js tabanlı mikroservisleriniz var. Deploy edemiyorsanız bunlarla harika şeyler ortaya çıkaramazsınız. Ama merak etmeyin. Lütfen tarayıcınızdaki ChatGPT sekmesini kapatın. Ayrıca sistem yöneticisi ya da DevOps mühendisi olmanıza da gerek yok. Hadi adım adım projenizi deploy edelim.

Bir laptoptan Node.js üzerinden bulut sunucusuna deploy edilişini gösteren çizim

Ön Koşullar

  • Ubuntu 24.04
  • Root erişimi

Nginx Kurulumu

Önce her şeyin güncel olduğundan emin olun.

apt-get update
apt-get upgrade

Ardından Nginx kurulumuna başlayabiliriz.

apt install nginx

Tarayıcınızı açın ve adres çubuğuna sunucunuzun IP adresini girin: http://SUNUCU_IPNIZ.

“Welcome to nginx” sayfasını görüyorsanız her şey yolunda demektir.

Node.js Kurulumu

NVM’i (Node Version Manager) kurmamız gerekiyor. Terminalde şu komutu çalıştırın.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

NVM_DIR’i export edin ve bash profilinizi yeniden yükleyin.

export NVM_DIR="$HOME/.nvm"
source .bashrc

Ardından bir Node.js sürümü seçin. Majör bir sürüm belirtebilirsiniz, o sürümün en güncel alt sürümünü kurar.

nvm install 20

Kurulumu doğrulayın.

node -v
npm -v

Node.js ve npm sürümlerini yazdırması gerekir.

PM2 Kurulumu

PM2’yi (process manager) kurmak için şu komutu çalıştırın.

npm install pm2 -g

Ardından kurulumu şu komutla doğrulayın.

pm2 --version

Projenizi Klonlayın veya Yükleyin

Deploy sürecini test etmek için Express generator ile yeni bir Express.js projesi oluşturdum. Ama muhtemelen sizin zaten bir projeniz var. /var/www dizinine gidip proje dosyalarınız için bir dizin oluşturmalısınız.

Git reponuzu klonlayın ya da dosyalarınızı oluşturduğunuz dizinin altına yükleyin.

Proje bağımlılıklarını kurmak için şu komutu çalıştırın.

npm i

Projenizi tarayıcı üzerinden test edin. Belirtilen port altında çalışıyorsa, deploy adımlarına devam edebiliriz.

npm run start

Özel Vhost Config Oluşturma

sites-available dizini altında özel bir vhost config dosyası oluşturun. Ben projeme göre express-test olarak isimlendirdim.

touch /etc/nginx/sites-available/express-test

Ardından dosyayı nano veya sevdiğiniz bir editörle açıp aşağıdaki vhost config’i yapıştırın. Kendi projeniz ve domaininiz için server_name, root, access_log ve proxy_pass satırlarını değiştirmelisiniz.

server {
    listen 80;
    server_name express-test.hostname.tr; # DOMAININIZ
    root /var/www/express-test/public; # PROJE YOLUNUZ
    access_log /var/log/nginx/express-test.log;
    location / {
        proxy_pass http://localhost:3000; # KENDİ PORTUNUZLA DEĞİŞTİRİN
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
    location = /favicon.ico {
        log_not_found off;
        access_log off;
        return 204;
    }
}

Ardından config’i Nginx’in okuyabilmesi için etkinleştirin.

cd /etc/nginx/sites-enabled
ln -s ../sites-available/express-test

Nginx config’ini kontrol edin.

nginx -t

Hata yoksa Nginx config’ini yeniden yükleyebilirsiniz.

nginx -s reload

Process Manager Kurulumu

Her şey yolunda, ama terminali sonsuza kadar açık tutamayız. Süreci arka planda çalıştırmak için PM2 kullanacağız. Bu işi PM2 halledecek.

Başlatma komutunuzu çift tırnak arasına yazabilir, projeyi PM2’de hatırlamak için bir isim verebilirsiniz.

pm2 start "npm run start" --name ExpressTest

DNS Ayarları

Tek bir siteyi ya da birkaç siteyi çözümlemek için sunucuya Bind veya PowerDNS kurmaya gerek yok. Ben her zaman harici bir DNS sunucusu tercih ederim. Genelde bu amaçla Cloudflare kullanıyorum.

DNS’inizi sunucunuzun IP adresine yönlendirebilirsiniz.

134.122.66.17 A express-test.hostname.tr

Sonuç

Deploy adımlarını tamamladık. DNS değişikliklerinin çözümlenmesini beklemeniz gerekiyor. Ardından hazırsınız! Ayrıca, firewall’unuzda (iptables, csf, vb.) 3000 portunu sunucunuz ve local IP’niz dışında herkese kapatmanızı öneririm.

← all blog posts