Ubuntu 16.04 Üzerinde Node.js Uygulamasını Üretim Ortamı İçin Kurulumu: Kapsamlı Bir Rehber
Giriş
Node.js, modern web uygulamaları geliştirmek için popüler ve güçlü bir çalışma zamanı ortamıdır. Yüksek performanslı, ölçeklenebilir ve gerçek zamanlı uygulamalar oluşturma yeteneği sayesinde, birçok geliştiricinin ve şirketin tercih ettiği bir teknolojidir. Ancak bir Node.js uygulamasını geliştirme ortamından üretim ortamına taşımak, uygulamanın sürekli, güvenli ve verimli bir şekilde çalışmasını sağlamak için belirli adımları ve en iyi uygulamaları gerektirir. Bu makale, Ubuntu 16.04 işletim sistemi üzerinde bir Node.js uygulamasını üretim ortamı için nasıl kuracağınızı, yapılandıracağınızı ve güvence altına alacağınızı adım adım açıklamaktadır.
Ubuntu 16.04, uzun süreli destek (LTS) sunan stabil bir işletim sistemi sürümü olsa da, daha yeni Ubuntu sürümleri (örneğin 20.04, 22.04) mevcut ve genellikle yeni kurulumlar için tercih edilir. Ancak, mevcut altyapılar veya belirli gereksinimler nedeniyle hala Ubuntu 16.04 kullanan sistemler olabilir. Bu rehber, bu özel sürüme odaklanarak, gerekli tüm adımları detaylandıracaktır. Konumuz, Node.js uygulamanızı bir web sunucusu (Nginx), bir süreç yöneticisi (PM2) ve güvenlik duvarı ayarlarıyla nasıl entegre edeceğinizi kapsamaktadır.
Ön Gereksinimler
Bu rehbere başlamadan önce, aşağıdaki ön gereksinimlere sahip olduğunuzdan emin olun:
* Ubuntu 16.04 Sunucusu: Temiz bir Ubuntu 16.04 sunucusu (VPS veya fiziksel sunucu).
* SSH Erişimi: Sunucuya SSH üzerinden erişim yetkisi olan bir kullanıcı (root olmayan, sudo yetkisine sahip bir kullanıcı önerilir).
* Temel Linux Bilgisi: Komut satırı (CLI) kullanımı hakkında temel bilgi.
* Node.js Uygulaması: Sunucuya dağıtılmaya hazır, çalışan bir Node.js uygulamanız olmalı. Bu uygulama genellikle app.js veya server.js gibi bir ana dosya ile başlar ve belirli bir portta dinler (örneğin, 3000).
Adım 1: Sunucuyu Güncelleme
Herhangi bir kuruluma başlamadan önce, sunucunuzdaki paket listelerini güncellemek ve mevcut paketleri en son sürümlerine yükseltmek iyi bir uygulamadır. Bu, güvenlik açıklarını kapatmaya ve uyumluluk sorunlarını önlemeye yardımcı olur.
sudo apt update
sudo apt upgrade -y
sudo apt update komutu, yerel paket indeksini güncellerken, sudo apt upgrade -y komutu ise kurulu tüm paketleri onay gerektirmeden yükseltir.
Adım 2: Node.js ve npm Kurulumu
Node.js uygulamanızın çalışması için Node.js çalışma zamanı ortamının ve npm (Node Package Manager) paket yöneticisinin sunucuya kurulması gereklidir. Node.js’i kurmanın birkaç yolu vardır, ancak üretim ortamları için Node Version Manager (NVM) kullanılması, farklı Node.js sürümleri arasında kolayca geçiş yapmanızı sağladığı için genellikle en iyi yöntemdir.
NVM (Node Version Manager) Kullanarak Kurulum (Önerilen)
NVM, aynı sunucuda birden fazla Node.js sürümünü yönetmenizi sağlar. Bu, farklı projeler için farklı Node.js sürümlerine ihtiyaç duyduğunuzda veya Node.js’in yeni bir sürümünü test etmek istediğinizde çok kullanışlıdır.
Öncelikle NVM kurulum betiğini indirin ve çalıştırın:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Not: v0.39.1 yerine NVM’nin en son kararlı sürümünü kontrol edip kullanmanız önerilir. NVM GitHub sayfasından güncel sürümü bulabilirsiniz.
Kurulum betiği tamamlandıktan sonra, NVM’nin kabuğunuzda kullanılabilir olması için terminal oturumunuzu yeniden başlatmanız veya aşağıdaki komutu çalıştırmanız gerekir:
source ~/.bashrc
Şimdi NVM’yi kullanarak Node.js’in en son LTS (Uzun Süreli Destek) sürümünü kurabiliriz:
nvm install --lts
Belirli bir sürümü kurmak isterseniz (örneğin Node.js 10, Ubuntu 16.04 için daha uygun olabilir):
nvm install 10
Kurduktan sonra, bu sürümü varsayılan olarak ayarlayın ve kullanmaya başlayın:
nvm use 10 # Veya nvm use --lts
nvm alias default 10 # Veya nvm alias default --lts
Kurulumun başarılı olduğunu doğrulamak için Node.js ve npm sürümlerini kontrol edin:
node -v
npm -v
Apt Paket Yöneticisi Kullanarak Kurulum (Alternatif)
Eğer NVM kullanmak istemiyorsanız, Node.js’i doğrudan Ubuntu’nun paket yöneticisi (apt) aracılığıyla da kurabilirsiniz. Ancak bu yöntemle genellikle daha eski Node.js sürümleri gelir. Daha güncel bir sürüm için NodeSource deposunu eklemeniz gerekir.
NodeSource deposunu ekleyelim (örneğin Node.js 10.x için):
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
Not: setup_10.x yerine setup_12.x, setup_14.x vb. kullanarak istediğiniz Node.js sürümünü seçebilirsiniz. Ancak Ubuntu 16.04’ün daha eski çekirdek ve glibc sürümlerine sahip olması nedeniyle, çok yeni Node.js sürümleriyle uyumluluk sorunları yaşanabilir. Node.js 10 veya 12 genellikle 16.04 ile iyi çalışır.
Depoyu ekledikten sonra Node.js’i kurun:
sudo apt install -y nodejs
Bu, Node.js ve npm’i kuracaktır. npm’in en son sürümünü edinmek için ayrıca şu komutu çalıştırabilirsiniz:
sudo npm install -g npm@latest
Kurulumu doğrulamak için:
node -v
npm -v
Adım 3: Uygulama Dosyalarını Sunucuya Aktarma
Node.js ve npm kurulduktan sonra, uygulama dosyalarınızı sunucuya aktarmanız gerekir. Bu işlemi yapmanın birkaç yaygın yolu vardır.
Git Kullanarak Aktarım (Önerilen)
Eğer uygulamanız bir Git deposunda barındırılıyorsa, dosyaları doğrudan sunucuya klonlamak en kolay yoldur.
Öncelikle Git’i kurun:
sudo apt install git -y
Uygulamanızı klonlamak istediğiniz dizine gidin (örneğin /var/www/ altına):
sudo mkdir -p /var/www/your_app_name
sudo chown -R your_username:your_username /var/www/your_app_name # Kullanıcı adınızı değiştirin
cd /var/www/your_app_name
git clone . # Mevcut dizine klonla
Not: Uygulamanızı root kullanıcısı yerine, özel bir uygulama kullanıcısı altında çalıştırmak daha güvenlidir. Bu rehberde, basitlik adına your_username kullanılmıştır. Üretim ortamında your_app_user gibi ayrı bir kullanıcı oluşturmak daha iyi bir uygulamadır.
SCP Kullanarak Aktarım
Eğer uygulamanız bir Git deposunda değilse veya sadece belirli dosyaları aktarmanız gerekiyorsa, SCP (Secure Copy Protocol) kullanabilirsiniz. Bu işlemi yerel makinenizden yaparsınız:
scp -r /path/to/local/your_app_folder user@your_server_ip:/var/www/your_app_name
user, your_server_ip, /path/to/local/your_app_folder ve /var/www/your_app_name değerlerini kendi bilgilerinizle değiştirin.
Uygulama Bağımlılıklarını Yükleme
Uygulama dosyaları sunucuya aktarıldıktan sonra, projenizin package.json dosyasında belirtilen tüm bağımlılıkları yüklemeniz gerekir:
cd /var/www/your_app_name # Uygulamanızın kök dizinine gidin
npm install --production
--production bayrağı, yalnızca üretim bağımlılıklarını (devDependencies hariç) yükler, bu da disk alanından tasarruf sağlar ve kurulum süresini kısaltır.
Adım 4: Süreç Yöneticisi Kullanma: PM2
Node.js uygulamaları genellikle tek bir işlem olarak çalışır. Eğer bu işlem çökerse, uygulamanız erişilemez hale gelir. Bir süreç yöneticisi, uygulamanızın sürekli çalışmasını sağlamak, çöktüğünde otomatik olarak yeniden başlatmak, performansını izlemek ve loglarını yönetmek için kritik öneme sahiptir. PM2 (Process Manager 2) bu amaç için popüler ve güçlü bir araçtır.
PM2 Kurulumu
PM2’yi global olarak kurun:
sudo npm install -g pm2
Uygulamayı PM2 ile Başlatma
PM2’yi kullanarak Node.js uygulamanızı başlatmak çok kolaydır. Uygulamanızın ana dosyasının bulunduğu dizinde olduğunuzdan emin olun:
cd /var/www/your_app_name
pm2 start app.js # Veya server.js, index.js vb.
Eğer package.json dosyanızda bir start betiği tanımladıysanız (örneğin "start": "node app.js"), onu da kullanabilirsiniz:
pm2 start npm --name "my-app" -- run start
Uygulamanızın çalıştığını doğrulamak için:
pm2 list
Bu komut, çalışan PM2 süreçlerinin bir listesini gösterir. Uygulamanızın online durumda olması gerekir.
PM2, uygulamanızın performansını ve loglarını izlemek için de araçlar sunar:
pm2 monit # Gerçek zamanlı izleme
pm2 logs # Uygulama loglarını görüntüleme
PM2’yi Yeniden Başlatma ve Durdurma
Uygulamanızda değişiklikler yaptıktan sonra, PM2 sürecini yeniden başlatmanız gerekir:
pm2 restart all # Tüm PM2 süreçlerini yeniden başlat
pm2 restart my-app # Belirli bir uygulamayı yeniden başlat (my-app yerine uygulama adınızı veya ID'sini kullanın)
Uygulamayı durdurmak veya silmek için:
pm2 stop my-app
pm2 delete my-app
Başlangıçta PM2’yi Çalıştırma (Startup Script)
Sunucu yeniden başlatıldığında PM2’nin uygulamalarınızı otomatik olarak başlatmasını sağlamak için bir başlangıç betiği oluşturmanız gerekir.
pm2 startup systemd
Bu komut, sunucunuzun init sistemi (systemd) için bir başlangıç betiği oluşturma talimatlarını verir. Komutun çıktısını dikkatlice okuyun; size çalıştırmanız gereken tam komutu verecektir. Genellikle şöyle bir şey olacaktır:
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u your_username --hp /home/your_username
Bu komutu kendi kullanıcı adınızla ve doğru yollarla çalıştırdığınızdan emin olun.
Son olarak, PM2’nin mevcut uygulama listesini kaydetmesini sağlayın, böylece başlangıçta bu uygulamaları yeniden başlatabilir:
pm2 save
Artık sunucunuz yeniden başlatılsa bile Node.js uygulamanız otomatik olarak PM2 tarafından başlatılacaktır.
Adım 5: Ters Proxy Kurulumu: Nginx
Node.js uygulamalarını doğrudan internete açmak, genellikle güvenlik ve performans nedenleriyle önerilmez. Bunun yerine, bir ters proxy sunucusu (reverse proxy) kullanmak yaygın bir yaklaşımdır. Nginx, bu amaç için popüler, yüksek performanslı ve hafif bir web sunucusudur. Nginx, gelen HTTP isteklerini Node.js uygulamanızın dinlediği porta yönlendirecek, aynı zamanda statik dosyaları sunma, SSL/TLS sonlandırma ve yük dengeleme gibi ek işlevler sağlayacaktır.
Nginx Kurulumu
Nginx’i Ubuntu paket yöneticisi aracılığıyla kurun:
sudo apt install nginx -y
Kurulumdan sonra Nginx otomatik olarak başlayacaktır. Durumunu kontrol edebilirsiniz:
sudo systemctl status nginx
active (running) durumunda olmalıdır.
Eğer UFW (Uncomplicated Firewall) kullanıyorsanız, Nginx trafiğine izin vermeniz gerekir:
sudo ufw allow 'Nginx HTTP'
sudo ufw status
Bu, Nginx’in HTTP (80 numaralı port) trafiğini kabul etmesini sağlar.
Nginx Yapılandırması
Şimdi Nginx’i Node.js uygulamanıza gelen istekleri yönlendirecek şekilde yapılandırmamız gerekiyor. Nginx yapılandırma dosyaları /etc/nginx/sites-available/ dizininde bulunur. Yeni bir yapılandırma dosyası oluşturalım:
sudo nano /etc/nginx/sites-available/your_app
Dosyanın içine aşağıdaki yapılandırmayı yapıştırın. your_domain.com, www.your_domain.com ve your_server_ip değerlerini kendi alan adınız ve sunucu IP adresinizle değiştirin. Ayrıca, Node.js uygulamanızın dinlediği portu (proxy_pass satırındaki 3000) doğru şekilde ayarladığınızdan emin olun.
server {
listen 80;
server_name your_domain.com www.your_domain.com your_server_ip;
location / {
proxy_pass http://localhost:3000; # Node.js uygulamanızın çalıştığı port
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
Bu yapılandırma, Nginx’in 80 numaralı porttan (HTTP) gelen tüm istekleri localhost:3000 adresinde çalışan Node.js uygulamanıza yönlendirmesini sağlar. proxy_set_header satırları, Node.js uygulamanızın istemcinin gerçek IP adresini ve diğer önemli bilgileri almasını sağlar.
Yapılandırma dosyasını kaydettikten sonra (CTRL+X, Y, Enter), bu yapılandırmayı etkinleştirmek için bir sembolik bağlantı oluşturmanız gerekir:
sudo ln -s /etc/nginx/sites-available/your_app /etc/nginx/sites-enabled/
Varsayılan Nginx yapılandırmasını devre dışı bırakmanız gerekebilir:
sudo rm /etc/nginx/sites-enabled/default
Nginx yapılandırmanızın sözdizimini kontrol edin:
sudo nginx -t
Eğer herhangi bir hata yoksa, Nginx’i yeniden başlatarak yeni yapılandırmayı uygulayın:
sudo systemctl restart nginx
Artık tarayıcınızdan alan adınızı veya sunucu IP adresinizi ziyaret ettiğinizde, Nginx isteği Node.js uygulamanıza yönlendirmeli ve uygulamanızın çıktısını görmelisiniz.
Adım 6: Güvenlik Ayarları
Bir üretim sunucusunda güvenlik her zaman öncelikli olmalıdır. Aşağıdaki temel güvenlik adımlarını uygulamanız önemlidir.
Güvenlik Duvarı (UFW) Yapılandırması
UFW (Uncomplicated Firewall), Ubuntu’da güvenlik duvarını yönetmek için basit bir arayüz sağlar. Sadece gerekli portlara izin vererek sunucunuzu korumanız gerekir.
sudo ufw enable # Güvenlik duvarını etkinleştir
sudo ufw allow OpenSSH # SSH erişimine izin ver (port 22)
sudo ufw allow 'Nginx HTTP' # Nginx'in HTTP trafiğine izin ver (port 80)
Eğer SSL kullanacaksanız, daha sonra 'Nginx HTTPS' için de izin vereceksiniz
sudo ufw status verbose # Güvenlik duvarı durumunu kontrol et
Bu ayarlar, yalnızca SSH ve HTTP trafiğine izin verirken diğer tüm portları kapatır.
SSH Güvenliği
* Parola Yerine Anahtar Tabanlı Kimlik Doğrulama: SSH parolaları yerine SSH anahtar çiftleri kullanarak kimlik doğrulama, çok daha güvenlidir. Bu, sunucunuza erişim için bir özel anahtar gerektirir.
* Varsayılan SSH Portunu Değiştirme: Varsayılan 22 numaralı SSH portunu değiştirmek, otomatik saldırı girişimlerini azaltmaya yardımcı olabilir. /etc/ssh/sshd_config dosyasını düzenleyerek Port 22 satırını farklı bir port numarasıyla değiştirin ve UFW’de yeni porta izin verin.
* Root Girişini Devre Dışı Bırakma: /etc/ssh/sshd_config dosyasında PermitRootLogin no olarak ayarlayarak root kullanıcısının doğrudan SSH üzerinden giriş yapmasını engelleyin.
* Kullanıcı Adı ve Parola Politikaları: Güçlü parolalar kullanın ve düzenli olarak değiştirin.
Uygulama Kullanıcısı Oluşturma
Uygulamanızı root kullanıcısı altında çalıştırmak büyük bir güvenlik riskidir. Bunun yerine, Node.js uygulamanızı çalıştırmak için sudo yetkisi olmayan özel bir kullanıcı oluşturmanız önerilir.
sudo adduser your_app_user
Bu kullanıcıya uygulamanızın dosyalarının bulunduğu dizine okuma ve yazma erişimi verdiğinizden emin olun:
sudo chown -R your_app_user:your_app_user /var/www/your_app_name
PM2’yi de bu kullanıcı altında çalıştırmanız gerekir. PM2’nin başlangıç betiği komutunda --hp /home/your_app_user parametresini kullanarak bu kullanıcıyı belirtin.
Adım 7: SSL/TLS Kurulumu (Certbot ile Let’s Encrypt)
HTTP trafiğini şifrelemek ve uygulamanızın güvenliğini artırmak için SSL/TLS sertifikası kullanmak zorunludur. Let’s Encrypt, ücretsiz SSL sertifikaları sağlayan popüler bir sertifika yetkilisidir ve Certbot aracı ile kolayca kurulabilir ve yönetilebilir.
Certbot Kurulumu
Certbot’u kurmak için öncelikle gerekli depoları eklememiz ve Certbot’u yüklememiz gerekiyor:
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt update
sudo apt install python-certbot-nginx -y
SSL Sertifikası Alma
Certbot’u Nginx ile entegre ederek otomatik olarak bir SSL sertifikası alabilir ve Nginx yapılandırmanızı güncelleyebilirsiniz:
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Bu komutu çalıştırdıktan sonra Certbot, e-posta adresinizi isteyecek ve hizmet şartlarını kabul etmenizi isteyecektir. Ayrıca HTTP trafiğini HTTPS’ye yönlendirip yönlendirmeyeceğinizi de soracaktır (genellikle “2: Redirect” seçeneği önerilir).
Certbot, Nginx yapılandırma dosyanızı otomatik olarak güncelleyerek hem HTTP hem de HTTPS trafiğini dinlemesini sağlayacak ve HTTP isteklerini HTTPS’ye yönlendirecektir.
Eğer UFW kullanıyorsanız, HTTPS trafiğine izin verdiğinizden emin olun:
sudo ufw allow 'Nginx HTTPS'
sudo ufw delete allow 'Nginx HTTP' # Artık sadece HTTPS kullanıyorsak HTTP'yi kapatabiliriz
sudo ufw status
Otomatik Yenileme Testi
Let’s Encrypt sertifikaları 90 gün geçerlidir, ancak Certbot bunları otomatik olarak yenilemek için bir cron işi kurar. Yenileme sürecinin düzgün çalıştığını test edebilirsiniz:
sudo certbot renew --dry-run
Bu komut, sertifikaların başarıyla yenilenebileceğini simüle eder.
Adım 8: Ortam Değişkenleri ve Yapılandırma
Üretim ortamında hassas bilgiler (veritabanı kimlik bilgileri, API anahtarları vb.) doğrudan kod içinde tutulmamalıdır. Bunun yerine, ortam değişkenleri veya ayrı yapılandırma dosyaları kullanılarak yönetilmelidir.
PM2 ile Ortam Değişkenleri
PM2, uygulamalarınız için ortam değişkenlerini yönetmek için bir ecosystem.config.js dosyası kullanmanıza olanak tanır. Bu, farklı ortamlar (geliştirme, üretim) için farklı değişken setleri tanımlamanıza olanak tanır.
Uygulamanızın kök dizininde ecosystem.config.js adında bir dosya oluşturun:
// /var/www/your_app_name/ecosystem.config.js
module.exports = {
apps : [{
name: "my-app",
script: "./app.js", // Uygulamanızın ana dosyasının yolu
instances: "max", // CPU çekirdek sayısı kadar örnek çalıştır
exec_mode: "cluster", // Küme modunda çalıştır
env: {
NODE_ENV: "development",
PORT: 3000
},
env_production: {
NODE_ENV: "production",
PORT: 3000,
DB_HOST: "localhost",
DB_USER: "your_db_user",
DB_PASS: "your_db_password",
API_KEY: "your_secret_api_key"
}
}]
};
Bu yapılandırma ile, uygulamayı farklı ortamlar için farklı değişkenlerle başlatabilirsiniz:
pm2 start ecosystem.config.js --env production
Bu komut, env_production bölümündeki değişkenleri kullanarak uygulamayı başlatır. NODE_ENV değişkenini production olarak ayarlamak, birçok Node.js kütüphanesinin ve çerçevesinin (Express gibi) performans optimizasyonlarını etkinleştirmesine yardımcı olur.
.env Dosyaları (dotenv)
Alternatif olarak, Node.js uygulamanızda dotenv kütüphanesini kullanarak .env dosyalarını yönetebilirsiniz.
1. Uygulamanızın bağımlılıklarına dotenv‘i ekleyin:
npm install dotenv
2. Uygulamanızın ana dosyasının en başına (örneğin app.js veya server.js) aşağıdaki satırı ekleyin:
require('dotenv').config();
3. Uygulamanızın kök dizininde .env adında bir dosya oluşturun ve hassas değişkenlerinizi buraya yazın:
# /var/www/your_app_name/.env
PORT=3000
DB_HOST=localhost
DB_USER=your_db_user
DB_PASS=your_db_password
API_KEY=your_secret_api_key
4. Uygulamanızda bu değişkenlere process.env.PORT gibi erişebilirsiniz.
5. ÖNEMLİ: .env dosyasını Git deposuna yüklememek için .gitignore dosyanıza .env eklediğinizden emin olun. Bu dosyayı sunucuya manuel olarak aktarmanız veya dağıtım betiğinizin bir parçası olarak oluşturmanız gerekecektir.
Adım 9: Log Yönetimi
Uygulamanızın performansını izlemek, hataları ayıklamak ve sorunları gidermek için loglar hayati öneme sahiptir.
PM2 Logları
PM2, uygulama loglarınızı otomatik olarak yakalar ve yönetir.
* Uygulamanızın loglarını gerçek zamanlı olarak görmek için:
pm2 logs my-app
* Belirli sayıda satırı görmek için:
pm2 logs my-app --lines 100
* Tüm logları temizlemek için:
pm2 flush
PM2 logları varsayılan olarak /home/your_username/.pm2/logs/ dizininde bulunur.
Nginx Logları
Nginx, erişim (access) ve hata (error) loglarını tutar. Bunlar, web sunucusu seviyesindeki sorunları veya gelen isteklerle ilgili bilgileri izlemek için kullanışlıdır.
* Erişim logları: /var/log/nginx/access.log
* Hata logları: /var/log/nginx/error.log
Log Rotasyonu (Logrotate)
Log dosyaları zamanla çok büyük hale gelebilir ve disk alanını tüketebilir. logrotate aracı, log dosyalarını otomatik olarak döndürmek, sıkıştırmak ve silmek için kullanılır. Ubuntu’da Nginx ve sistem logları için logrotate varsayılan olarak yapılandırılmıştır. Kendi uygulama loglarınız için de özel logrotate yapılandırmaları oluşturabilirsiniz.
/etc/logrotate.d/ dizininde kendi uygulamanız için yeni bir dosya oluşturarak bunu yapabilirsiniz.
Sonuç ve Özet
Bu kapsamlı rehberde, bir Node.js uygulamasını Ubuntu 16.04 üzerinde üretim ortamı için kurmanın ve yapılandırmanın tüm temel adımlarını ele aldık. Başlangıçta sunucuyu güncelleyerek ve Node.js’i NVM ile kurarak temel altyapıyı oluşturduk. Ardından, uygulamanızı sunucuya aktardık ve PM2 kullanarak uygulamanızın sürekli çalışmasını, otomatik olarak yeniden başlamasını ve loglarını yönetmesini sağladık. Nginx’i bir ters proxy olarak yapılandırarak gelen web trafiğini Node.js uygulamanıza yönlendirdik ve statik dosya sunumu ile SSL/TLS sonlandırması için zemin hazırladık. Güvenlik duvarı ayarları, SSH güvenliği ve uygulama kullanıcısı oluşturma gibi kritik güvenlik adımlarını uyguladık. Son olarak, Certbot ile ücretsiz SSL sertifikaları alıp uygulamanızın güvenli iletişimini sağladık ve ortam değişkenlerinin yönetimi ile loglama stratejilerini inceledik.
Bu adımları takip ederek, Node.js uygulamanızın Ubuntu 16.04 üzerinde güvenli, kararlı ve performanslı bir şekilde çalışmasını sağlayabilirsiniz. Unutmayın ki, üretim ortamları sürekli izleme, düzenli güncellemeler ve güvenlik denetimleri gerektirir. Uygulamanız büyüdükçe, bir CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) boru hattı kurmayı, veritabanı sunucularını ayrı tutmayı ve daha gelişmiş izleme araçlarını kullanmayı düşünebilirsiniz. Bu rehber, sağlam bir temel oluşturmanıza yardımcı olacaktır.