İçindekiler
- 1 Ghost ve Diğer Headless Blog Platformları İçin Neden Özel Bir Hosting Mimarisi Gerekir?
- 2 Ghost ve Headless Blog Yaklaşımını Kısaca Konumlandıralım
- 3 Doğru Sunucu Tipi ve Kaynak Planlama: paylaşımlı hosting Neden Yetmez?
- 4 Temel Mimari: Node.js Uygulaması + Nginx Reverse Proxy + SSL
- 5 Adım Adım Kurulum: Linux, Node.js, Ghost ve Veritabanı
- 6 Nginx Reverse Proxy Yapılandırması
- 7 SSL ve HTTPS: Let’s Encrypt ile Otomatik Sertifika Yönetimi
- 8 Headless Senaryolar: Ghost API + Next.js/Nuxt ve Statik Frontend’ler
- 9 Güvenlik, Yedekleme ve Güncelleme Stratejileri
- 10 Ölçeklendirme ve Çoklu Blog Senaryoları
- 11 DCHost Üzerinde Ghost ve Headless Blog Platformları İçin Önerdiğimiz Yol Haritası
- 12 Özet ve Sonraki Adımlar
Ghost ve Diğer Headless Blog Platformları İçin Neden Özel Bir Hosting Mimarisi Gerekir?
Ghost, modern bir Node.js tabanlı blog platformu ve birçok yeni nesil headless blog çözümü gibi geleneksel PHP tabanlı CMS’lerden farklı çalışıyor. Uygulama kendi HTTP sunucusunu ayağa kaldırıyor, genellikle 2368 gibi bir portta dinliyor, HTTPS ve alan adı yönetimi ise çoğu zaman Nginx veya benzeri bir reverse proxy katmanı üzerinden çözülüyor. İşte bu nedenle “alan adı → Nginx reverse proxy → Node.js/ Ghost süreci → veritabanı ve dosya sistemi” şeklinde düşünülmüş bir mimariye ihtiyaç var.
DCHost’ta gördüğümüz birçok kurulumda sorunlar hep aynı yerlerden çıkıyor: Node.js servisinin çökmesi, SSL yenilemelerinin otomatik çalışmaması, reverse proxy yapılandırmasında hatalı yönlendirmeler veya HTTP/HTTPS karma içerik problemleri. Bu yazıda, Ghost başta olmak üzere benzer Node.js tabanlı headless blog platformlarını VPS veya dedicated sunucu üzerinde, Nginx reverse proxy ve otomatik SSL ile nasıl sağlıklı şekilde çalıştırabileceğinizi adım adım anlatacağız. Ayrıca ölçeklendirme, güvenlik ve yedekleme tarafında da DCHost olarak sahada edindiğimiz pratik önerileri paylaşacağız.
Ghost ve Headless Blog Yaklaşımını Kısaca Konumlandıralım
Ghost’u henüz detaylı incelemediyseniz, önce Ghost’un WordPress’ten farklarını anlattığımız rehbere göz atmanızı öneririm. Özetle Ghost:
- Node.js üzerinde çalışan, performans odaklı bir blog platformudur.
- MySQL/MariaDB veritabanı kullanır.
- Yapı olarak “uygulama + reverse proxy” mimarisine ihtiyaç duyar.
- API katmanı sayesinde headless (sadece içerik kaynağı) olarak kullanılabilir.
Benzer şekilde, kendi Node.js tabanlı blog/universal uygulamanızı veya başka bir headless CMS çözümünü de aynı prensiplerle host edebilirsiniz. Bu noktada, Node.js uygulamalarını nerede ve nasıl host etmek gerektiğini ayırmak önemli. Bu konuya daha geniş çerçeveden bakmak isterseniz, Node.js uygulamalarını cPanel, paylaşımlı hosting ve VPS üzerinde karşılaştırdığımız yazımıza da göz atabilirsiniz.
Doğru Sunucu Tipi ve Kaynak Planlama: paylaşımlı hosting Neden Yetmez?
Ghost ve benzeri headless blog platformları için genellikle paylaşımlı hosting doğru seçim değildir. Çünkü:
- Node.js servislerini arka planda sürekli çalışır durumda tutmak gerekir.
- Uygulama kendi portunda (örneğin 2368) dinler, bu da klasik paylaşımlı hosting mimarisiyle çakışır.
- systemd veya PM2 gibi process manager’lara ihtiyaç duyarsınız.
- Nginx/Apache konfigürasyonuna tam erişim isteyeceksiniz.
Bu yüzden Ghost ve benzeri headless bloglar için pratikte üç seçenek öne çıkar:
- VPS sunucu: Çoğu kişisel blog, ajans portföyü ve kurumsal içerik sitesi için yeterli ve esnek.
- Dedicated sunucu: Yüksek trafikli medya siteleri, çoklu Ghost instanceları veya ağır API yükleri için.
- Colocation: Kendi fiziksel donanımınızı DCHost veri merkezinde barındırmak istediğiniz daha kurumsal senaryolar için.
Küçük ve orta ölçekte trafik bekleyen bir Ghost blog için başlangıçta 1–2 vCPU, 2–4 GB RAM ve hızlı SSD/NVMe disk genellikle yeterli olur. Daha detaylı kapasite planlamak isterseniz, CPU, RAM ve disk gereksinimlerini anlattığımız Node.js odaklı kapasite planlama rehberine mutlaka bakın; oradaki hesaplama mantığını Ghost için de birebir uygulayabilirsiniz.
Temel Mimari: Node.js Uygulaması + Nginx Reverse Proxy + SSL
Ghost veya başka bir headless blogu üretim ortamına alırken tipik mimari şöyledir:
- Sunucu üzerinde bir Linux dağıtımı (Ubuntu, Debian, AlmaLinux vb.).
- Node.js (LTS sürümü) ve uygulamanın kendisi (Ghost, custom blog vb.).
- MySQL/MariaDB veritabanı.
- Önde, 80/443 portlarını dinleyen bir Nginx reverse proxy.
- Let’s Encrypt veya kurumsal bir SSL sertifikası.
Genel akış şöyle işler:
- Ziyaretçi https://blog.siteniz.com adresine gelir.
- DNS, alan adını DCHost üzerinde çalışan VPS veya dedicated sunucunuzun IP’sine yönlendirir.
- Nginx, 443 portunda isteği karşılar, SSL terminasyonunu yapar.
- İsteği http://127.0.0.1:2368 gibi bir iç adrese proxy’ler.
- Node.js/ Ghost süreci isteği işler, cevabı Nginx’e geri verir.
- Nginx cevabı sıkıştırma, önbellek başlıkları vb. ekleyerek ziyaretçiye iletir.
Nginx reverse proxy tarafını daha geniş örneklerle görmek isterseniz, Nginx reverse proxy kurulum rehberimiz mimariyi anlamanızda çok yardımcı olacaktır.
Adım Adım Kurulum: Linux, Node.js, Ghost ve Veritabanı
1) Sunucuyu Hazırlama
Önce DCHost üzerinden uygun bir VPS veya dedicated sunucu seçtiğinizi varsayalım. Ardından:
- Güncellemeleri yapın: apt update && apt upgrade veya kullandığınız dağıtıma uygun komutlar.
- Yeni bir kullanıcı oluşturun ve şifreli SSH anahtar girişi yapılandırın.
- Güvenlik duvarı (ufw, firewalld vb.) ile sadece gerekli portları açın (80, 443, SSH).
VPS güvenlik sertleştirme tarafını daha sistematik ele almak isterseniz, VPS güvenlik sertleştirme kontrol listemizde sshd_config, fail2ban ve root erişimi kapatma gibi kritik ayarları detaylı anlattık.
2) Node.js Kurulumu
Ghost ve çoğu modern Node.js tabanlı blog için LTS bir Node.js sürümü yeterlidir. Tercihen:
- Dağıtıma özel NodeSource deposu ya da
- nvm (Node Version Manager)
kullanabilirsiniz. Örneğin nvm ile:
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm use --lts
Ardından node -v ve npm -v ile sürümleri kontrol edin.
3) Ghost veya Diğer Headless Blog Uygulamasını Kurmak
Ghost kullanıyorsanız Ghost-CLI işinizi oldukça kolaylaştırır:
npm install -g ghost-cli
mkdir -p /var/www/ghost
cd /var/www/ghost
ghost install
Ghost-CLI, kurulum sırasında sizden alan adınızı, veritabanı bilgilerinizi, SMTP ayarlarınızı sorar ve isterseniz Nginx + SSL yapılandırmasını da otomatik oluşturur. Ancak çoğu zaman Nginx ve SSL’i kendiniz elle yönetmek isteyeceksiniz; özellikle aynı sunucuda birden fazla site/uygulama host ediyorsanız.
Kendi Node.js tabanlı blogunuzu geliştiriyorsanız, proje klasörünüzü /var/www/proje-adı altında tutup npm install ve npm run start gibi komutlarla üretim modunda çalıştırmanız yeterlidir. Burada önemli olan, uygulamanın her zaman ayakta kalmasını sağlayacak bir process manager kullanmak.
4) Process Manager: systemd veya PM2
Ghost-CLI zaten systemd servis dosyası oluşturur, ancak kendi uygulamanız için manuel olarak tanımlayabilirsiniz. Örneğin:
[Unit]
Description=Ghost Blog
After=network.target
[Service]
Type=simple
User=ghost
WorkingDirectory=/var/www/ghost
ExecStart=/usr/bin/node current/index.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Alternatif olarak, birden fazla Node.js uygulamasını daha kolay yönetmek için PM2 kullanabilirsiniz. Node.js’i canlıya alırken PM2, Nginx ve SSL’i birlikte kullandığımız daha geniş bir rehbere ihtiyacınız varsa, Node.js’i canlıya alma rehberimiz adım adım yol gösterecektir.
Nginx Reverse Proxy Yapılandırması
Ghost veya headless blog uygulamanız 127.0.0.1:2368 portunda dinliyorsa, Nginx sanal host’unuz yaklaşık olarak şöyle görünür:
server {
listen 80;
server_name blog.ornekalanadi.com;
location / {
proxy_pass http://127.0.0.1:2368;
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;
}
}
Bu yapı temel bir HTTP reverse proxy sağlar. Sonraki adımda buna SSL terminasyonu ekleyerek 443 portunu da devreye alacağız. Nginx tarafında cache, gzip/brotli sıkıştırma ve HTTP/2 gibi performans odaklı ayarlarla ilgileniyorsanız, Brotli ve Gzip sıkıştırma rehberimiz pratik başlangıç noktasıdır.
SSL ve HTTPS: Let’s Encrypt ile Otomatik Sertifika Yönetimi
1) Let’s Encrypt ile Temel SSL Kurulumu
Ghost gibi modern bloglar için HTTPS artık opsiyon değil, zorunluluk. SEO, güvenlik ve tarayıcı uyarıları açısından mutlaka HTTPS kullanmalısınız. En pratik yol, Let’s Encrypt kullanmak ve sertifikaları otomatik yenilemek:
apt install certbot python3-certbot-nginx
certbot --nginx -d blog.ornekalanadi.com
Bu komut, Nginx konfigürasyonunuza gerekli listen 443 ssl bloklarını, ssl_certificate ve ssl_certificate_key ayarlarını ekler ve 90 günde bir otomatik yenileme için cron/systemd timer oluşturur. Let’s Encrypt’i cPanel ve DirectAdmin tarafında nasıl otomatik kullanabileceğinizi merak ediyorsanız, Let’s Encrypt otomatik yenileme rehberimizde detaylı örnekler bulabilirsiniz.
2) HTTP’den HTTPS’e Zorunlu Yönlendirme ve HSTS
SEO kaybı yaşamamak ve kullanıcıların her zaman HTTPS üzerinden bağlanmasını sağlamak için 80 portundaki bütün trafiği 301 ile 443’e yönlendirmek gerekir. Örnek:
server {
listen 80;
server_name blog.ornekalanadi.com;
return 301 https://$host$request_uri;
}
Daha ileri seviye güvenlik için HSTS (HTTP Strict Transport Security) başlığını da ekleyebilirsiniz. HTTP güvenlik başlıkları, CSP ve HSTS’i detaylıca anlattığımız HTTP güvenlik başlıkları rehberimiz, Ghost gibi modern sitelerde HTTPS güvenliğini sertleştirmek için iyi bir referans.
3) Tek IP Üzerinde Birden Fazla HTTPS Blog (SNI)
Ajanslar ve çoklu proje yöneten ekipler için sık sorulan soru: “Tek IP üzerinde birden fazla Ghost blogu HTTPS ile çalıştırabilir miyim?”. Evet, modern tarayıcıların desteklediği SNI (Server Name Indication) teknolojisi sayesinde, aynı IP üzerinde birden fazla alan adı ve sertifika kullanabilirsiniz. Bu konuyu detaylı anlattığımız tek IP üzerinde birden fazla HTTPS site barındırma rehberi tam da bu senaryolar için yazıldı.
Headless Senaryolar: Ghost API + Next.js/Nuxt ve Statik Frontend’ler
Ghost’u sadece klasik blog temalarıyla değil, aynı zamanda bir headless içerik kaynağı (Content API) olarak da kullanabilirsiniz. Örneğin:
- Ghost, admin paneli ve içerik yönetimi için kullanılır.
- Ön yüzde Next.js, Nuxt veya başka bir JS framework ile özel bir arayüz geliştirilir.
- Frontend, Ghost API’den JSON olarak içerikleri çeker.
Bu mimari, headless CMS ve Jamstack siteler için hosting rehberimizde anlattığımız yaklaşıma oldukça benzer. Örneğin:
- Ghost ve veritabanı DCHost VPS üzerinde çalışır.
- Next.js/Nuxt uygulaması SSR (server-side render) ya da SSG (statik export) olarak ayrı bir Node.js sürecinde veya statik olarak host edilir.
- Önde yine Nginx reverse proxy vardır, alt yolları API ve frontend arasında paylaştırırsınız.
Bu senaryolarda dikkat etmeniz gereken ek başlıklar:
- CORS (Cross-Origin Resource Sharing) ayarları.
- API endpointlerinin sadece gerekli origin’lerden çağrılmasına izin verilmesi.
- Önbellekleme (CDN, Nginx cache, statik build) stratejileri.
Güvenlik, Yedekleme ve Güncelleme Stratejileri
1) Sunucu ve Uygulama Güvenliği
Ghost ve benzeri headless blog platformları genellikle admin paneli, API anahtarları ve webhooks gibi hassas yüzeylere sahiptir. Bu yüzden:
- SSH için parola yerine anahtar temelli giriş kullanın.
- Güvenlik duvarında sadece 80, 443 ve yönetim için gerekliyse sınırlı IP’lere açık olan 22 portunu tutun.
- fail2ban ile brute-force denemelerini engelleyin.
- Ghost admin panelini mümkünse özel bir alt yola veya sadece VPN/mTLS ile erişilebilir bir ağa taşıyın.
Genel VPS güvenlik mimarisi hakkında daha derinlemesine bir bakış için, VPS sunucu güvenliği için pratik ve ölçeklenebilir yaklaşımları anlattığımız yazıyı inceleyebilirsiniz.
2) Yedekleme: Veritabanı + İçerik Dosyaları
Ghost için yedeklemenin iki ana ayağı vardır:
- MySQL/MariaDB veritabanı: İçerikler, kullanıcılar, ayarlar.
- İçerik dosyaları: /content klasörü içindeki görseller, temalar, ayarlar.
Günlük veritabanı dump’ları (mysqldump) ve /var/www/ghost/content klasörünün düzenli arşivlenmesi en temel yaklaşımdır. Daha sağlam bir strateji için 3-2-1 kuralını benimseyin: 3 kopya, 2 farklı ortam, 1 kopya farklı lokasyonda. Bu konuyu uygulamaya dökmek için, 3-2-1 yedekleme stratejisi rehberimizi mutlaka okuyun.
3) Güncellemeler: Node.js, Ghost ve Bağımlılıklar
Ghost ve benzeri headless bloglar düzenli aralıklarla güncellenir. Bu güncellemeler sadece özellik değil, güvenlik yamaları da içerir. Dikkat etmeniz gerekenler:
- Node.js’i mümkünse LTS sürümler arasında güncel tutun.
- Ghost-CLI üzerinden ghost update komutuyla güncelleme yapın.
- Güncelleme öncesi veritabanı ve içerik klasörünün yedeğini alın.
- Canlı ortamdan önce staging bir Ghost kurulumu üzerinde güncellemeyi test etmek oldukça sağlıklıdır.
Ölçeklendirme ve Çoklu Blog Senaryoları
Zamanla blog trafiğiniz artabilir veya aynı sunucuda birden fazla Ghost/headless blog host etmek isteyebilirsiniz. Bu durumda tipik olarak şu yollar öne çıkar:
- Aynı VPS’te birden fazla Ghost instance’ı (farklı portlar ve farklı Nginx server_name blokları).
- Veritabanını ayrı bir VPS/dedicated sunucuya taşıyarak uygulama ve veriyi ayırmak.
- Ön tarafa CDN koyarak statik içerik trafiğini hafifletmek.
Uygulama ve veritabanı sunucularını ayırmanın ne zaman mantıklı hale geldiğini merak ediyorsanız, veritabanı sunucusunu uygulama sunucusundan ayırma rehberimiz bu kararı daha net vermenize yardımcı olacaktır.
DCHost Üzerinde Ghost ve Headless Blog Platformları İçin Önerdiğimiz Yol Haritası
DCHost tarafında Ghost ve diğer Node.js tabanlı blog/headless çözümler için pratikte üç tipik profil görüyoruz:
- Kişisel veya küçük ölçekli kurumsal blog: 1–2 vCPU, 2–4 GB RAM, hızlı NVMe diskli bir VPS genellikle fazlasıyla yeterli. Tek bir Ghost instance’ı ve Nginx reverse proxy ile sade bir mimari.
- Ajans ve çoklu proje yönetimi: Birden fazla Ghost veya Node.js tabanlı blogu tek bir güçlü VPS veya dedicated sunucuda barındırmak, her proje için ayrı sistem kullanıcısı ve ayrı Nginx site konfigürasyonu ile izole bir yapı kurmak.
- Yüksek trafikli yayınlar: Ayrı veritabanı sunucusu, ön tarafta CDN, gerekiyorsa birden fazla uygulama sunucusu ve Nginx/HAProxy ile yük dengeleme.
Hangi profile daha yakın olduğunuzdan emin değilseniz, trafik tahmini, içerik tipi ve büyüme planlarınıza göre sizinle birlikte kapasite analizi yapıp uygun DCHost altyapısını önerebiliriz. Zaten bu yazıda bahsettiğimiz mimarilerin büyük kısmını, müşterilerimizle birlikte birebir sahada kuruyor ve işletiyoruz.
Özet ve Sonraki Adımlar
Ghost ve diğer Node.js tabanlı headless blog platformları, klasik PHP tabanlı CMS’lere göre biraz daha fazla altyapı bilgisi istiyor; fakat doğru kurulduğunda performans, esneklik ve modern geliştirme deneyimi açısından çok güçlü bir seçenek sunuyor. Bu yazıda DCHost olarak sahada defalarca uyguladığımız şu çerçeveyi özetledik:
- Paylaşımlı hosting yerine VPS veya dedicated sunucu tercih etmek.
- Node.js uygulamasını systemd/PM2 ile sürekli ayakta tutmak.
- Nginx reverse proxy ile alan adı ve port yönlendirmesini çözmek.
- Let’s Encrypt ile otomatik SSL ve HTTP→HTTPS yönlendirmelerini doğru kurgulamak.
- Güvenlik, yedekleme ve ölçeklendirmeyi baştan planlamak.
Ghost veya başka bir headless blog projesi planlıyorsanız, DCHost üzerindeki VPS, dedicated sunucu veya colocation seçeneklerinden biri sizin için mutlaka uygun bir temel sunacaktır. Mimari tasarım, kapasite planlama ve ilk kurulum adımlarında destek almak isterseniz, ekibimizle iletişime geçmeniz yeterli; birlikte sizin projenize uygun, sürdürülebilir ve güvenli bir hosting mimarisi çıkarabiliriz.
