DocPad Uygulamasını Ubuntu 14.04 Üzerine Dağıtma Rehberi
Günümüzde web siteleri, dinamik ve karmaşık yapılarının yanı sıra, hız, güvenlik ve bakım kolaylığı gibi avantajlar sunan statik sitelere doğru bir eğilim göstermektedir. Statik site oluşturucular (Static Site Generators – SSG), bu ihtiyaca yanıt veren popüler araçlardır. DocPad, Node.js tabanlı güçlü ve esnek bir statik site oluşturucudur. Bu makalede, bir DocPad uygulamasını Ubuntu 14.04 sunucusu üzerine nasıl dağıtacağınızı adım adım detaylı bir şekilde inceleyeceğiz. Ubuntu 14.04 her ne kadar eski bir sürüm olsa da, belirli projeler veya eski altyapılar için hala kullanılabilmektedir ve bu rehber o bağlamda hazırlanmıştır.
Giriş: DocPad ve Statik Site Dağıtımının Önemi
DocPad, içerik yönetimi için esneklik, şablon motorları için geniş destek (Jade, EJS, Handlebars vb.) ve güçlü eklenti mimarisi sunan bir Node.js tabanlı statik site oluşturucudur. Geliştiricilerin Markdown, CoffeeScript gibi ön işlemcileri kullanarak içerik oluşturmasına olanak tanırken, nihayetinde saf HTML, CSS ve JavaScript dosyaları üretir. Bu statik dosyalar, geleneksel dinamik web sitelerine göre çok daha hızlı yüklenir, daha güvenlidir ve daha az sunucu kaynağı tüketir.
Bir DocPad uygulamasını bir sunucuya dağıtmak, genellikle üç ana aşamadan oluşur: sunucu ortamının hazırlanması, DocPad uygulamasının sunucuya aktarılması ve statik çıktıların bir web sunucusu (örneğin Nginx) aracılığıyla servis edilmesi. Bu makale, bu süreçleri Ubuntu 14.04 özelinde ele alacak ve uygulamanızın sorunsuz bir şekilde yayına alınmasını sağlayacaktır.
Sunucu Ortamının Hazırlanması (Ubuntu 14.04)
DocPad, Node.js üzerinde çalıştığı için, Ubuntu 14.04 sunucunuzda Node.js ve npm (Node Package Manager) kurulu olması gerekmektedir. Ayrıca, uygulamanızı versiyon kontrol sisteminden (Git) çekmek ve statik dosyaları sunmak için Nginx gibi bir web sunucusuna ihtiyacımız olacak.
Sistem Güncellemesi ve Temel Bağımlılıkların Kurulumu
Sunucunuzun güncel olduğundan emin olmak, olası güvenlik açıklarını kapatmak ve en son paketlere erişmek için önemlidir.
sudo apt-get update
sudo apt-get upgrade -y
Node.js ve diğer bazı araçların derlenmesi için gerekli olan “build-essential” paketini kuralım:
sudo apt-get install -y build-essential
Node.js ve npm Kurulumu (nvm ile Önerilir)
Node.js’in farklı versiyonlarını yönetmek için nvm (Node Version Manager) kullanmak en iyi yöntemdir. Bu, gelecekte farklı Node.js versiyonlarına geçiş yapmanız gerektiğinde büyük kolaylık sağlar.
1. nvm Kurulumu:
nvm‘i kurmak için aşağıdaki komutu kullanabilirsiniz. Bu komut, nvm‘in en son sürümünü indirip kuracaktır.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Not: Yukarıdaki sürüm numarası (v0.39.1) güncel olmayabilir, en güncel sürüm için nvm GitHub sayfasını kontrol etmeniz önerilir.
Kurulumdan sonra, terminalinizi kapatıp tekrar açmanız veya aşağıdaki komutu çalıştırmanız gerekebilir:
source ~/.bashrc
# veya
source ~/.profile
2. Node.js Kurulumu:
nvm kurulduktan sonra, DocPad için uygun bir Node.js LTS (Uzun Süreli Destek) sürümünü kurabiliriz. Örneğin, Node.js 12.x veya 14.x DocPad ile uyumludur.
nvm install 14 # Node.js 14.x LTS sürümünü kurar
nvm use 14 # Kurulan sürümü varsayılan yapar
nvm alias default 14 # Her terminal açıldığında bu sürümün kullanılmasını sağlar
Kurulumun başarılı olduğunu doğrulamak için Node.js ve npm versiyonlarını kontrol edin:
node -v
npm -v
Git Kurulumu
Uygulamanızın kaynak kodunu bir Git deposundan çekmek için Git’e ihtiyacımız var:
sudo apt-get install -y git
DocPad Uygulamasının Dağıtımı
Şimdi sıra, DocPad uygulamanızı sunucuya aktarmaya ve statik çıktısını oluşturmaya geldi.
Uygulama Kaynak Kodunun Çekilmesi
Genellikle /var/www dizini, web uygulamaları için standart bir konumdur. Uygulamanız için bu dizin altında bir klasör oluşturalım ve Git deposundan projenizi bu klasöre klonlayalım.
sudo mkdir -p /var/www/my-docpad-app
sudo chown -R $USER:$USER /var/www/my-docpad-app # Kullanıcınıza yazma izni verin
cd /var/www/my-docpad-app
git clone . # Projenizi klonlayın, '.' mevcut dizine klonlar
kısmını kendi Git deponuzun URL’si ile değiştirin.
DocPad Bağımlılıklarının Kurulumu
Proje dizinine girdikten sonra, DocPad’in ve projenizin diğer bağımlılıklarını kurmalısınız:
cd /var/www/my-docpad-app
npm install
Bu adım, package.json dosyasında tanımlanan tüm bağımlılıkları yükleyecektir.
DocPad Statik Çıktısının Oluşturulması
DocPad’in en güçlü yönlerinden biri, projenizi saf HTML, CSS ve JavaScript dosyalarına derleyebilmesidir. Bu dosyalar, /out dizininde oluşturulur ve herhangi bir statik web sunucusu tarafından kolayca servis edilebilir.
npm install -g docpad # DocPad CLI'yi global olarak kurun, eğer kurulu değilse
docpad generate --env production
--env production parametresi, DocPad’e üretim ortamı için en iyi duruma getirilmiş (minified, sıkıştırılmış vb.) dosyalar oluşturmasını söyler. Bu komut, projenizin statik versiyonunu /var/www/my-docpad-app/out dizinine çıkaracaktır.
Nginx ile Statik Siteyi Servis Etme
Statik DocPad çıktılarını servis etmek için Nginx’i kullanacağız. Nginx, yüksek performanslı, hafif ve yaygın olarak kullanılan bir web sunucusudur.
Nginx Kurulumu
sudo apt-get install -y nginx
Nginx Konfigürasyonu
1. Yeni Bir Nginx Yapılandırma Dosyası Oluşturma:
Uygulamanız için yeni bir Nginx sunucu bloğu oluşturacağız.
sudo nano /etc/nginx/sites-available/my-docpad-app
2. Yapılandırma İçeriği:
Aşağıdaki yapılandırmayı dosyaya yapıştırın ve kısmını kendi alan adınızla değiştirin.
server {
listen 80;
listen [::]:80;
server_name www.;
root /var/www/my-docpad-app/out;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Opsiyonel: Hata sayfaları
error_page 404 /404.html;
location = /404.html {
internal;
}
# Opsiyonel: Gzip sıkıştırma
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 5;
gzip_min_length 256;
}
* listen 80: Nginx’in 80 numaralı porttan gelen HTTP isteklerini dinlemesini sağlar.
* server_name: Alan adınızı veya IP adresinizi belirtir.
* root: DocPad’in statik çıktılarının bulunduğu dizini gösterir (/var/www/my-docpad-app/out).
* index: Dizine erişildiğinde varsayılan olarak hangi dosyaların aranacağını belirtir.
* location /: Gelen tüm istekleri yönetir. try_files yönergesi, istenen dosyanın veya dizinin var olup olmadığını kontrol eder. Yoksa 404 hatası döndürür.
* gzip: Performans için gzip sıkıştırmayı etkinleştirir.
3. Yapılandırmayı Etkinleştirme:
Oluşturduğumuz yapılandırma dosyasını sites-enabled dizinine sembolik bir bağlantı oluşturarak etkinleştirin.
sudo ln -s /etc/nginx/sites-available/my-docpad-app /etc/nginx/sites-enabled/
Varsayılan Nginx yapılandırmasını devre dışı bırakmak iyi bir uygulamadır:
sudo rm /etc/nginx/sites-enabled/default
4. Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma:
Yapılandırma dosyanızda herhangi bir hata olup olmadığını kontrol edin:
sudo nginx -t
Eğer test başarılı olursa, Nginx servisini yeniden başlatın:
sudo service nginx restart
Artık DocPad uygulamanızın statik çıktıları, belirttiğiniz alan adı üzerinden yayında olmalıdır.
Gelişmiş Dağıtım: DocPad’i Sunucu Modunda Çalıştırma (İsteğe Bağlı)
Çoğu DocPad dağıtımı için statik çıktıları Nginx ile servis etmek yeterlidir. Ancak, bazı özel durumlarda (örneğin, DocPad’in bazı dinamik özelliklerini kullanmak veya canlı önizleme sunmak) DocPad’i sunucu modunda çalıştırmak isteyebilirsiniz. Bu durumda, Nginx’i bir proxy olarak kullanırız.
PM2 ile DocPad’i Yönetme
PM2, Node.js uygulamalarını üretim ortamında yönetmek için popüler bir süreç yöneticisidir. Uygulamanızın arka planda çalışmasını sağlar, çöktüğünde otomatik olarak yeniden başlatır ve sistem başlatıldığında otomatik olarak başlar.
1. PM2 Kurulumu:
npm install -g pm2
2. DocPad’i PM2 ile Başlatma:
DocPad’i sunucu modunda başlatmak için docpad run komutunu kullanırız. Bu komut, DocPad’i varsayılan olarak 1337 portunda çalıştırır.
cd /var/www/my-docpad-app
pm2 start docpad --name "my-docpad-server" -- run
* --name "my-docpad-server": PM2’de uygulamanıza bir isim verir.
* -- run: DocPad’in run komutunu çalıştırır.
PM2 ile çalışan uygulamalarınızı görmek için:
pm2 list
Uygulamanızın sistem başlangıcında otomatik olarak başlamasını sağlamak için:
pm2 startup systemd
pm2 save
Nginx’i Proxy Olarak Yapılandırma
DocPad sunucusu çalışırken, Nginx’i gelen istekleri DocPad’in çalıştığı porta yönlendirecek şekilde yapılandırmamız gerekir.
1. Nginx Yapılandırma Dosyasını Düzenleme:
sudo nano /etc/nginx/sites-available/my-docpad-app
2. Yeni Yapılandırma İçeriği (Proxy Pass):
root ve index yönergelerini kaldırıp, location / bloğunu aşağıdaki gibi değiştirin:
server {
listen 80;
listen [::]:80;
server_name www.;
location / {
proxy_pass http://localhost:1337; # DocPad'in ç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;
}
# Opsiyonel: Gzip sıkıştırma (proxy_pass ile birlikte de kullanılabilir)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 5;
gzip_min_length 256;
}
* proxy_pass http://localhost:1337: Gelen tüm istekleri yerel 1337 portunda çalışan DocPad sunucusuna yönlendirir.
* proxy_set_header: Orijinal isteğin başlıklarını DocPad sunucusuna iletmek için kullanılır.
3. Nginx’i Yeniden Başlatma:
sudo nginx -t
sudo service nginx restart
Bu yapılandırma ile Nginx, DocPad sunucusunun önünde bir vekil sunucu (reverse proxy) görevi görecek ve uygulamanıza gelen istekleri DocPad’e iletecektir.
Güvenlik ve Performans İyileştirmeleri
Dağıtım tamamlandıktan sonra, sunucunuzun güvenliğini ve uygulamanızın performansını artırmak için bazı ek adımlar atmanız önemlidir.
Güvenlik Duvarı (UFW) Yapılandırması
Ubuntu’da varsayılan güvenlik duvarı olan UFW’yi (Uncomplicated Firewall) etkinleştirerek sunucunuzu yetkisiz erişimden koruyun.
sudo ufw allow OpenSSH # SSH bağlantılarına izin ver
sudo ufw allow 'Nginx HTTP' # Nginx'in 80 portuna gelen HTTP isteklerine izin ver
Eğer HTTPS kullanacaksanız: sudo ufw allow 'Nginx HTTPS'
sudo ufw enable
sudo ufw status
HTTPS Kurulumu (Certbot ile Let’s Encrypt)
Web siteniz için HTTPS kullanmak, güvenlik ve kullanıcı güveni açısından kritik öneme sahiptir. Let’s Encrypt ve Certbot ile ücretsiz SSL sertifikaları alabilirsiniz.
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install -y python-certbot-nginx
Sertifika almak ve Nginx yapılandırmasını otomatik olarak güncellemek için:
sudo certbot --nginx -d -d www.
Certbot, Nginx yapılandırmanızı otomatik olarak düzenleyecek ve HTTPS’yi etkinleştirecektir.
Otomatik Dağıtım (Continuous Deployment)
Manuel dağıtım adımları, küçük projeler için yeterli olsa da, büyük veya sık güncellenen projeler için otomatik dağıtım sistemleri kullanmak iş akışını hızlandırır ve hataları azaltır. Git tabanlı CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) araçları (örneğin GitLab CI/CD, GitHub Actions, Jenkins, Travis CI) kullanarak, her git push işleminde uygulamanızın otomatik olarak derlenip dağıtılmasını sağlayabilirsiniz.
Tipik bir otomatik dağıtım akışı şu adımları içerebilir:
1. Git deposuna yeni kod gönderildiğinde tetiklenir.
2. Sunucuya SSH ile bağlanılır.
3. Proje dizinine gidilir (cd /var/www/my-docpad-app).
4. git pull ile en son kod çekilir.
5. npm install ile bağımlılıklar güncellenir.
6. docpad generate --env production ile statik site yeniden oluşturulur.
7. sudo service nginx reload ile Nginx yapılandırması yeniden yüklenir (eğer Nginx yapılandırması değiştiyse).
8. Eğer PM2 kullanılıyorsa, pm2 reload my-docpad-server ile uygulama yeniden başlatılır.
Sorun Giderme (Troubleshooting)
Dağıtım sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* Nginx Hataları:
* sudo nginx -t komutu ile yapılandırma dosyasındaki sözdizimi hatalarını kontrol edin.
* Nginx hata günlüklerini (/var/log/nginx/error.log) inceleyerek detaylı bilgi edinin.
* Port çakışmaları (başka bir servis 80 veya 443 portunu kullanıyor olabilir).
* DocPad Derleme Hataları:
* docpad generate komutunu çalıştırdığınızda konsolda çıkan hataları dikkatlice okuyun.
* npm install komutunun tüm bağımlılıkları doğru bir şekilde kurduğundan emin olun.
* Node.js versiyonunuzun DocPad ile uyumlu olduğundan emin olun.
* İzin Hataları:
* /var/www/my-docpad-app ve /var/www/my-docpad-app/out dizinlerinin Nginx kullanıcısı (genellikle www-data) tarafından okunabilir olduğundan emin olun. Gerekirse sudo chown -R www-data:www-data /var/www/my-docpad-app veya sudo chmod -R 755 /var/www/my-docpad-app komutlarını kullanın. Ancak, genellikle out dizini için bu yeterlidir ve diğer dosyaların www-data tarafından yazılabilir olması güvenlik riski oluşturabilir.
* PM2 Sorunları:
* pm2 list ile uygulamanızın durumunu kontrol edin.
* pm2 logs my-docpad-server ile uygulamanızın günlüklerini görüntüleyin.
* pm2 restart my-docpad-server ile uygulamayı yeniden başlatmayı deneyin.
Sonuç
Bu kapsamlı rehberde, bir DocPad uygulamasını Ubuntu 14.04 sunucusu üzerine başarıyla dağıtmak için gerekli tüm adımları detaylı bir şekilde ele aldık. Node.js ve npm kurulumundan başlayarak, DocPad uygulamanızın statik çıktılarını oluşturmaya, Nginx ile bu çıktıları servis etmeye ve hatta DocPad’i sunucu modunda çalıştırmaya kadar tüm süreçleri inceledik. Ayrıca, güvenlik duvarı yapılandırması, HTTPS entegrasyonu ve otomatik dağıtım gibi önemli iyileştirmelere de değindik.
DocPad’in statik site oluşturma yeteneği sayesinde, uygulamanız yüksek performans, artırılmış güvenlik ve düşük sunucu maliyetleri ile çalışacaktır. Bu adımları takip ederek, DocPad projenizi üretim ortamında güvenle yayına alabilir ve modern web geliştirmenin avantajlarından tam olarak faydalanabilirsiniz. Unutmayın ki, Ubuntu 14.04 eski bir işletim sistemi olduğu için, mümkünse daha güncel ve desteklenen bir Ubuntu sürümüne (örneğin 20.04 veya 22.04 LTS) geçiş yapmanız güvenlik ve uyumluluk açısından şiddetle tavsiye edilir. Ancak bu rehber, belirtilen ortam için eksiksiz bir çözüm sunmaktadır.