Meteor.js Uygulamasını Ubuntu 14.04 Üzerinde Nginx ile Dağıtma Rehberi
Giriş
Web geliştirme dünyası sürekli evrim geçirirken, geliştiricilere hızlı ve verimli çözümler sunan araçlar büyük önem taşımaktadır. Meteor.js, tam yığın (full-stack) JavaScript platformu olarak, web ve mobil uygulamaları hızlıca geliştirmek için popüler bir seçenektir. Gerçek zamanlı veri senkronizasyonu, kolay paket yönetimi ve hem istemci hem de sunucu tarafında JavaScript kullanma yeteneği sayesinde geliştiricilerin gözdesi haline gelmiştir. Bu makalede, bir Meteor.js uygulamasını eski ama kararlı bir işletim sistemi olan Ubuntu 14.04 LTS (Trusty Tahr) üzerinde Nginx web sunucusu kullanarak nasıl dağıtacağımızı adım adım inceleyeceğiz.
Ubuntu 14.04, uzun süreli destek (LTS) sağlayan bir sürüm olmasına rağmen, güncel güvenlik güncellemelerini artık almamaktadır. Bu nedenle, bu rehber genellikle eski sistemlerde veya belirli gereksinimleri olan ortamlarda çalışanlar için bir referans niteliğindedir. Ancak, temel dağıtım prensipleri daha yeni Ubuntu sürümleri için de geçerlidir. Nginx ise, yüksek performanslı, güvenilir ve esnek bir web sunucusu ve ters proxy (reverse proxy) olarak, Meteor uygulamamızın önünde durarak trafiği yönetmek ve ek güvenlik katmanları sağlamak için ideal bir seçimdir.
Bu rehberin amacı, Meteor uygulamanızı bir üretim ortamında çalışır hale getirmek için gerekli tüm adımları, sunucu hazırlığından uygulama dağıtımına ve Nginx yapılandırmasına kadar ayrıntılı bir şekilde açıklamaktır.
Ön Gereksinimler
Bu rehbere başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olmalısınız:
- Ubuntu 14.04 Sunucusu: Root veya sudo yetkilerine sahip bir Ubuntu 14.04 sunucusu. (Daha yeni Ubuntu sürümleri için adımlar benzer olsa da, paket versiyonları farklılık gösterebilir.)
- Alan Adı (Domain Name): Uygulamanız için yapılandırılmış bir alan adı (örneğin,
ornekuygulama.com) ve bu alan adının sunucunuzun IP adresine yönlendirilmiş olması. - Meteor.js Uygulaması: Dağıtıma hazır bir Meteor.js uygulamanızın olması. Uygulamanızın üretim ortamına uygun olarak yapılandırıldığından emin olun (örneğin, güvenlik kuralları, API anahtarları vb.).
- Temel Linux Bilgisi: Komut satırı kullanımı ve temel Linux komutlarına aşinalık.
- SSH Erişimi: Sunucunuza SSH üzerinden erişim.
Sunucu Ortamını Hazırlama
Meteor.js uygulamanızı çalıştırabilmek için sunucunuzda bazı temel araçların ve hizmetlerin yüklü olması gerekir. Bu bölümde, Ubuntu 14.04 sunucunuzu bu gereksinimleri karşılayacak şekilde yapılandıracağız.
Sistem Güncellemesi ve Temel Paketlerin Kurulumu
İlk adım olarak, sunucunuzdaki paket listesini güncelleyelim ve mevcut paketleri yükseltelim. Ayrıca, derleme araçları ve diğer yardımcı paketleri de kuralım.
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y build-essential curl git
build-essential paketi, Node.js ve diğer bağımlılıkları derlemek için gerekli araçları içerir. curl ve git ise genellikle çeşitli yazılımları indirmek ve depolardan çekmek için kullanılır.
Node.js ve NPM Kurulumu (NVM ile)
Ubuntu 14.04’ün varsayılan depolarındaki Node.js sürümü, çoğu Meteor uygulaması için çok eski olabilir. Bu nedenle, Node Version Manager (NVM) kullanarak daha güncel ve Meteor uygulamanızla uyumlu bir Node.js sürümünü kurmak en iyi yaklaşımdır. NVM, aynı sunucuda birden fazla Node.js sürümünü yönetmenizi sağlar.
NVM’i kurmak için aşağıdaki komutu kullanın:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Bu komut, NVM’in en son kararlı sürümünü yükleyecektir. Kurulumdan sonra, terminali kapatıp tekrar açmanız veya aşağıdaki komutu çalıştırmanız gerekebilir:
source ~/.profile
NVM’in doğru şekilde kurulduğunu kontrol etmek için:
nvm --version
Şimdi, Meteor uygulamanızın gerektirdiği Node.js sürümünü NVM ile kuralım. Meteor’un farklı sürümleri farklı Node.js sürümleriyle uyumludur. Örneğin, Meteor 1.4 için Node.js 4.x, Meteor 1.6 için Node.js 8.x ve daha yeni Meteor sürümleri için Node.js 12.x veya üzeri gerekebilir. Uygulamanızın package.json dosyasında veya geliştirme ortamınızda hangi Node.js sürümünü kullandığını kontrol edin. Bu rehberde, örnek olarak Node.js 6.x sürümünü kuracağız, bu birçok eski Meteor sürümü için iyi bir başlangıç noktasıdır:
nvm install 6.17.1 # Meteor uygulamanızın gerektirdiği sürüme göre değiştirin
nvm use 6.17.1
nvm alias default 6.17.1
Bu komutlar, Node.js 6.17.1 sürümünü kurar, aktif hale getirir ve terminal her açıldığında varsayılan olarak bu sürümün kullanılmasını sağlar.
Kurulumu doğrulayın:
node -v
npm -v
MongoDB Kurulumu
Meteor.js uygulamaları verilerini depolamak için genellikle MongoDB kullanır. Üretim ortamında, Meteor’un kendi içinde gelen MongoDB’yi kullanmak yerine, ayrı bir MongoDB sunucusu kurmak daha güvenli ve performanslıdır. Ubuntu 14.04 için MongoDB 3.2 veya 3.4 sürümlerini kurmak en yaygın yaklaşımdır.
İlk olarak, MongoDB’nin genel anahtarını sisteme ekleyin:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
Ardından, MongoDB deposunu sources.list.d dizinine ekleyin. MongoDB 3.2 için:
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
Veya MongoDB 3.4 için:
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
Depoyu ekledikten sonra, paket listesini güncelleyin ve MongoDB’yi kurun:
sudo apt-get update
sudo apt-get install -y mongodb-org
MongoDB servisini başlatın ve sistem başlangıcında otomatik olarak çalışmasını sağlayın:
sudo service mongod start
sudo update-rc.d mongod defaults
MongoDB’nin durumunu kontrol edin:
sudo service mongod status
MongoDB’nin varsayılan olarak sadece localhost üzerinden erişilebilir olması güvenlik açısından önemlidir. Eğer uygulamanız ve MongoDB aynı sunucudaysa, bu ayar yeterlidir. Eğer farklı sunuculardaysalar, MongoDB yapılandırma dosyasını (/etc/mongod.conf) düzenleyerek bindIp ayarını uygulamanızın bulunduğu sunucunun IP adresine veya 0.0.0.0 (tüm arayüzlerden erişim, dikkatli kullanılmalı) olarak ayarlamanız gerekebilir. Şimdilik localhost olarak bırakalım.
PM2 Kurulumu
PM2 (Process Manager 2), Node.js uygulamalarını üretim ortamında canlı tutmak, otomatik yeniden başlatmak ve izlemek için kullanılan bir araçtır. Meteor uygulamamızın bir çökme durumunda veya sunucu yeniden başlatıldığında otomatik olarak tekrar başlamasını sağlamak için PM2’yi kullanacağız.
npm install -g pm2
PM2’yi sistem başlangıcında otomatik olarak başlaması için yapılandırın:
pm2 startup systemd # Veya ubuntu 14.04 için 'pm2 startup ubuntu' daha uygun olabilir.
# PM2 çıktısındaki komutu kopyalayıp yapıştırın.
Bu komut, PM2’nin sunucu her yeniden başlatıldığında uygulamalarınızı tekrar başlatmasını sağlayacak bir başlangıç betiği oluşturacaktır.
Nginx Kurulumu
Nginx, Meteor uygulamamızın önünde bir ters proxy görevi görecek, gelen HTTP isteklerini Meteor uygulamamıza yönlendirecek ve statik dosyaları daha verimli bir şekilde sunacaktır.
sudo apt-get install -y nginx
Nginx servisini başlatın ve sistem başlangıcında otomatik olarak çalışmasını sağlayın:
sudo service nginx start
sudo update-rc.d nginx defaults
Nginx’in doğru şekilde çalıştığını test etmek için sunucunuzun IP adresini web tarayıcınızda açın. “Welcome to nginx!” mesajını görmelisiniz.
Meteor Uygulamasını Üretim Ortamına Hazırlama
Meteor uygulamanızı sunucuya dağıtmadan önce, üretim ortamında çalışacak şekilde derlemeniz gerekir. Bu adımlar genellikle yerel geliştirme makinenizde yapılır.
Meteor Uygulamasını Derleme
Meteor uygulaması, meteor build komutu kullanılarak dağıtıma hazır bir Node.js uygulaması paketine dönüştürülür. Uygulamanızın kök dizininde aşağıdaki komutu çalıştırın:
meteor build --architecture os.linux.x86_64 --server-only --directory ../deploy --verbose
Bu komutun anlamı:
* --architecture os.linux.x86_64: Uygulamanın 64-bit Linux mimarisi için derlenmesini sağlar. Bu önemlidir çünkü sunucunuz genellikle bu mimariye sahiptir.
* --server-only: Yalnızca sunucu tarafı kodunu derler ve istemci tarafı kodunu çıkarır. Bu, daha küçük bir paket boyutu ve daha hızlı derleme sağlar.
* --directory ../deploy: Derlenmiş paketin deploy adında bir dizine kaydedilmesini sağlar. Bu dizin, uygulamanızın kök dizininin bir üst seviyesinde oluşturulacaktır.
* --verbose: Derleme sürecini daha detaylı gösterir.
Derleme işlemi tamamlandığında, ../deploy/bundle dizini altında uygulamanızın dağıtıma hazır paketi bulunacaktır. Bu paketin içinde bir programs/server dizini ve bir main.js dosyası bulunur.
Bağımlılıkları Yükleme
Derlenmiş bundle dizini içindeki programs/server dizininde, uygulamanızın sunucu tarafı bağımlılıklarını yüklemeniz gerekir. Bu adımı, paketi sunucuya aktardıktan sonra sunucu üzerinde de yapabilirsiniz, ancak yerelde yapmak, olası bağımlılık sorunlarını daha erken tespit etmenizi sağlayabilir.
cd ../deploy/bundle/programs/server
npm install
Bu komut, package.json dosyasında listelenen tüm Node.js bağımlılıklarını yükleyecektir.
Meteor Uygulamasını Sunucuya Aktarma
Derlenmiş paketi ve bağımlılıklarını yükledikten sonra, bu paketi SSH üzerinden sunucunuza aktarmanız gerekir. scp (secure copy) komutu bunun için idealdir.
Yerel makinenizden sunucuya aktarın:
scp -r ../deploy/bundle user@your_server_ip:/home/user/your_app_name
Burada:
* user: Sunucunuzdaki kullanıcı adınız.
* your_server_ip: Sunucunuzun IP adresi.
* /home/user/your_app_name: Uygulamanızı sunucuda depolamak istediğiniz dizin (örneğin, /var/www/your_app_name gibi bir dizin de kullanabilirsiniz).
Sunucuya giriş yapın ve aktarılan paketin doğru yerde olduğundan emin olun:
ssh user@your_server_ip
ls /home/user/your_app_name
bundle dizinini görmelisiniz.
Meteor Uygulamasını Sunucuda Çalıştırma
Şimdi, uygulamamızı sunucuda PM2 kullanarak çalıştırabiliriz.
Uygulama Bağımlılıklarını Kurma (Sunucu Üzerinde)
Eğer bu adımı yerel makinenizde yapmadıysanız, şimdi sunucu üzerinde yapmanız gerekecektir.
cd /home/user/your_app_name/bundle/programs/server
npm install
Bu adım, Meteor uygulamanızın Node.js bağımlılıklarını sunucu ortamında yükler.
Uygulamayı PM2 ile Başlatma
Meteor uygulamanızı PM2 ile başlatmak için MONGO_URL, ROOT_URL ve PORT gibi ortam değişkenlerini ayarlamanız gerekir.
* MONGO_URL: Uygulamanızın bağlanacağı MongoDB sunucusunun URL’si. Genellikle mongodb://localhost:27017/your_database_name şeklindedir. your_database_name kısmını uygulamanızın kullanacağı veritabanı adıyla değiştirin.
* ROOT_URL: Uygulamanızın dışarıdan erişileceği URL. Örneğin, http://yourdomain.com. Eğer SSL kullanacaksanız https://yourdomain.com olarak ayarlayın.
* PORT: Meteor uygulamasının dinleyeceği port. Nginx’in bu porta yönlendirme yapacağı bir port seçin (örneğin, 3000 veya 8080).
Aşağıdaki komutu kullanarak uygulamanızı PM2 ile başlatın:
cd /home/user/your_app_name/bundle
pm2 start main.js --name "my-meteor-app" \
--env "MONGO_URL=mongodb://localhost:27017/your_database_name" \
--env "ROOT_URL=http://yourdomain.com" \
--env "PORT=3000"
Burada:
* my-meteor-app: PM2’de uygulamanıza vereceğiniz isim.
* main.js: Derlenmiş paketin kök dizinindeki ana başlangıç dosyası.
Uygulamanızın durumunu kontrol etmek için:
pm2 list
pm2 logs my-meteor-app
Eğer her şey yolundaysa, uygulamanızın online durumda olduğunu ve loglarda herhangi bir hata olmadığını görmelisiniz. Uygulamanın sorunsuz çalıştığından emin olduktan sonra, PM2 yapılandırmasını kaydedin:
pm2 save
Bu komut, sunucu yeniden başlatıldığında PM2’nin uygulamalarınızı otomatik olarak tekrar başlatmasını sağlar.
Nginx Yapılandırması
Meteor uygulamamız artık çalışıyor, ancak dışarıdan erişilebilir değil. Nginx’i bir ters proxy olarak yapılandırarak gelen istekleri Meteor uygulamamızın dinlediği porta yönlendirmemiz gerekiyor.
Nginx Sanal Host Dosyası Oluşturma
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/yourdomain.com
Dosyanın içine aşağıdaki yapılandırmayı yapıştırın. yourdomain.com ve www.yourdomain.com kısımlarını kendi alan adınızla, http://localhost:3000 kısmını ise Meteor uygulamanızın dinlediği portla değiştirin.
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900; # Meteor uygulamaları için daha uzun bir timeout değeri faydalı olabilir.
}
}
Bu yapılandırma şunları yapar:
* listen 80: Nginx’in 80 numaralı porttan (HTTP) gelen istekleri dinlemesini sağlar.
* server_name yourdomain.com www.yourdomain.com: Bu sunucu bloğunun hangi alan adları için geçerli olduğunu belirtir.
* location /: Tüm gelen istekleri yakalar.
* proxy_pass http://localhost:3000: Gelen istekleri http://localhost:3000 adresinde çalışan Meteor uygulamamıza yönlendirir.
* proxy_set_header ...: Bu satırlar, orijinal istemci bilgilerini (IP adresi, host vb.) Meteor uygulamasına iletmek için HTTP başlıklarını ayarlar. Bu, uygulamanızın gerçek istemci IP adresini görmesi ve doğru yönlendirmeleri yapması için önemlidir.
* proxy_http_version 1.1 ve proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";: Bu ayarlar, Meteor’un gerçek zamanlı iletişim için kullandığı WebSockets’in düzgün çalışmasını sağlar.
Dosyayı kaydedin ve kapatın (Ctrl+X, Y, Enter).
Nginx Yapılandırmasını Etkinleştirme
Yeni yapılandırma dosyasını etkinleştirmek için, /etc/nginx/sites-enabled/ dizinine bir sembolik bağlantı (symlink) oluşturmanız gerekir:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
Nginx yapılandırma dosyasında herhangi bir sözdizimi hatası olup olmadığını kontrol edin:
sudo nginx -t
Eğer test is successful mesajını görürseniz, her şey yolundadır. Şimdi Nginx servisini yeniden başlatın:
sudo service nginx restart
Artık web tarayıcınızdan http://yourdomain.com adresine giderek Meteor uygulamanıza erişebilmeniz gerekir.
Güvenlik Önlemleri
Bir üretim ortamında güvenlik her zaman öncelikli olmalıdır.
UFW (Uncomplicated Firewall) Kurulumu
Sunucunuzda bir güvenlik duvarı (firewall) etkinleştirmek, istenmeyen erişimi engellemek için kritik öneme sahiptir. Ubuntu 14.04’te UFW (Uncomplicated Firewall) kullanmak oldukça kolaydır.
sudo apt-get install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh # SSH erişimine izin ver
sudo ufw allow http # HTTP (80) portuna izin ver
sudo ufw allow https # HTTPS (443) portuna izin ver (SSL kuracaksanız)
sudo ufw enable
sudo ufw status
Bu komutlar, varsayılan olarak tüm gelen bağlantıları engeller, tüm giden bağlantılara izin verir ve SSH (22), HTTP (80) ve HTTPS (443) portlarına özel olarak izin verir.
SSL/TLS (HTTPS) Kurulumu (Let’s Encrypt ile)
Uygulamanız için HTTPS kullanmak, veri güvenliği ve kullanıcı gizliliği açısından olmazsa olmazdır. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan popüler bir hizmettir. Ubuntu 14.04 için Certbot’un otomatik kurulumu biraz daha karmaşık olabilir, ancak manuel olarak veya eski Certbot sürümünü kullanarak sertifika alabilirsiniz.
Not: Ubuntu 14.04 için Certbot kurulumu, daha yeni Ubuntu sürümlerine göre farklılık gösterebilir ve bazen ek bağımlılıkların manuel olarak kurulmasını gerektirebilir. En güvenli yol, Certbot’un resmi belgelerini takip etmektir.
Genel adımlar şunlardır:
1. Certbot Kurulumu: Certbot’u PPA’dan veya pip aracılığıyla kurun.
# PPA ile (eğer mevcutsa ve destekleniyorsa)
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx -y # Nginx eklentisi ile
Eğer PPA ile sorun yaşarsanız, pip kullanarak Certbot’u kurmanız gerekebilir:
sudo apt-get install python-pip -y
sudo pip install certbot certbot-nginx
2. Sertifika Alma:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot, Nginx yapılandırmanızı otomatik olarak algılayacak ve sertifikaları alıp Nginx yapılandırmanıza ekleyecektir. Ayrıca, sertifikaların otomatik yenilenmesi için bir cron işi de ayarlayacaktır.
3. Nginx Yapılandırmasını Güncelleme: Certbot Nginx yapılandırmanızı otomatik olarak güncelleyecektir. Bu, 80 numaralı porttan gelen tüm HTTP isteklerini 443 numaralı porta (HTTPS) yönlendirmeyi ve SSL sertifikalarını kullanmayı içerecektir.
Certbot’un otomatik olarak yaptığı değişiklikleri incelemek için Nginx yapılandırma dosyanızı kontrol edebilirsiniz.
Sorun Giderme (Troubleshooting)
Dağıtım sırasında veya sonrasında sorunlarla karşılaşmanız olasıdır. İşte bazı yaygın sorunlar ve çözüm önerileri:
* Uygulama Erişilemiyor (502 Bad Gateway veya Boş Sayfa):
* Nginx Logları: Nginx hata loglarını kontrol edin: sudo tail -f /var/log/nginx/error.log. Bu, Nginx’in Meteor uygulamasına bağlanmada sorun yaşayıp yaşamadığını gösterecektir.
* PM2 Logları: PM2 loglarını kontrol edin: pm2 logs my-meteor-app. Uygulamanızın kendisinde bir hata olup olmadığını gösterir. Ortam değişkenlerinin (MONGO_URL, ROOT_URL, PORT) doğru ayarlandığından emin olun.
* Firewall: UFW veya başka bir güvenlik duvarının Meteor uygulamanızın dinlediği porta (örneğin 3000) erişimi engellemediğinden emin olun.
* Meteor Portu: Meteor uygulamanızın gerçekten Nginx’in yönlendirdiği portta (örneğin 3000) çalıştığından emin olun.
* MongoDB Bağlantı Hataları:
* MongoDB Servisi: MongoDB servisinin çalıştığından emin olun: sudo service mongod status.
* MongoDB Logları: MongoDB loglarını kontrol edin: sudo tail -f /var/log/mongodb/mongod.log.
* MONGO_URL: PM2’de ayarladığınız MONGO_URL ortam değişkeninin doğru olduğundan ve veritabanı adını içerdiğinden emin olun.
* WebSockets Sorunları:
* Nginx yapılandırmanızda proxy_set_header Upgrade $http_upgrade; ve proxy_set_header Connection "upgrade"; satırlarının bulunduğundan emin olun. Bu olmadan WebSockets çalışmaz.
* Nginx Yapılandırma Hatası:
* sudo nginx -t komutunu çalıştırarak Nginx yapılandırma dosyanızda sözdizimi hatası olup olmadığını kontrol edin. Herhangi bir hata varsa düzeltin ve Nginx’i yeniden başlatın.
Sonuç
Bu rehberde, bir Meteor.js uygulamasını Ubuntu 14.04 LTS sunucusu üzerinde Nginx ile nasıl dağıtacağımızı adım adım öğrendik. Sunucu ortamını hazırlama, Node.js ve MongoDB’yi kurma, Meteor uygulamasını derleme ve PM2 ile çalıştırma, son olarak da Nginx’i bir ters proxy olarak yapılandırma süreçlerini detaylı bir şekilde ele aldık. Ayrıca, uygulamanızın güvenliğini artırmak için temel firewall ayarları ve SSL/TLS kurulumu hakkında da bilgi verdik.
Unutulmamalıdır ki, Ubuntu 14.04 artık güncel bir işletim sistemi değildir ve güvenlik güncellemelerini almamaktadır. Yeni projeler için daha güncel Ubuntu sürümleri (örneğin 20.04 LTS veya 22.04 LTS) kullanılması şiddetle tavsiye edilir. Ancak, bu rehber, eski sistemlerdeki Meteor uygulamalarını dağıtmak veya genel dağıtım prensiplerini anlamak isteyenler için değerli bir kaynak olacaktır. Uygulamanızın sorunsuz ve güvenli bir şekilde çalışması için düzenli bakım, log takibi ve güvenlik güncellemelerini (eğer mümkünse) aksatmamanız önemlidir. Artık Meteor uygulamanız dünya ile buluşmaya hazır!