İçeriğe geç

EğitimlerCMS ve web siteleri

Ghost, Ubuntu'ya Ghost-CLI, Nginx ve MySQL ile nasıl kurulur

Ghost 6'yı Ubuntu 24.04 veya 26.04'e Ghost-CLI, Nginx, MySQL ve Node.js 22 ile kurun; HTTPS ekleyin, e-posta ve bülteni ayarlayın, güvenle yedekleyin.

  • Orta
  • 40 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS

Bu sayfada
  1. Ön koşullar
  2. Adım 1 — Root olmayan bir kullanıcı oluşturun
  3. Adım 2 — Nginx'i kurun ve güvenlik duvarını açın
  4. Adım 3 — MySQL'i kurun ve bir root parolası belirleyin
  5. Adım 4 — Node.js 22'yi kurun
  6. Adım 5 — Ghost-CLI'ı kurun
  7. Adım 6 — Ghost'u kurun
  8. Adım 7 — Sahip hesabını oluşturun
  9. Adım 8 — İşlemsel e-postayı yapılandırın
  10. Alternatif: Ghost'un Docker kurulumu (önizleme)
  11. Yedekleme ve geri yükleme
  12. Ghost güncelleme
  13. Sorun giderme
  14. Ghost-CLI root olarak çalışmayı reddediyor veya izin hataları veriyor
  15. ghost install sırasında Access denied for user 'root'@'localhost'
  16. ghost start başarısız oluyor veya site 502 Bad Gateway gösteriyor
  17. Kurulum aracı desteklenmeyen bir Node.js sürümü nedeniyle duruyor
  18. E-postalar teslim edilmiyor
  19. Sonraki adımlar

Ghost; bloglar, dergiler ve bültenler için açık kaynaklı bir yayın platformudur. Hızlı bir editörü, üyelik ve abonelik özelliklerini ve yerleşik e-posta bültenlerini bir araya getirir; Node.js üzerine kuruludur ve MySQL veritabanı kullanır.

Ghost belgeleri kendi sunucunuzda barındırmak için birkaç yol listeler. Bu rehber, resmi belgelerdeki standart yöntem olan Ghost-CLI ile Ubuntu kurulumunu izler: root olmayan bir kullanıcı, Nginx, MySQL ve Node.js 22 hazırlarsınız; ardından Ghost-CLI Ghost'u kurar, ayrı bir veritabanı kullanıcısı oluşturur, Nginx yapılandırmasını yazar, bir Let's Encrypt sertifikası alır ve bir systemd servisi kaydeder. Sonrasında işlemsel e-postayı ve bültenleri yapılandırır, yedekleme ve güncellemeyi ayarlarsınız.

Ön koşullar

  • Ubuntu 24.04 LTS veya Ubuntu 26.04 LTS çalıştıran bir sunucu. Ghost Ubuntu 22.04'ü de destekler; Debian, Ghost'un desteklenen sistemler listesinde yer almaz, bu yüzden bu yöntem için Ubuntu kullanın.
  • Adım 1'de root olmayan bir kullanıcı oluşturmak için root veya sudo erişimi ve SSH anahtarlarını ayarlayın rehberinde anlatıldığı gibi SSH anahtarıyla giriş. Yeni bir Linux sunucusunu güvenli hale getirin rehberindeki temel adımlar burada da geçerlidir.
  • Ghost-CLI TLS sertifikasını kurulum sırasında istediği için, başlamadan önce sunucuyu gösteren bir A kaydına (IPv6 için AAAA kaydına) sahip example.com gibi bir alan adı.
  • Giriş bağlantıları ve davetler için işlemsel e-posta sağlayıcısından bir SMTP hesabı, bülten göndermek istiyorsanız bir Mailgun hesabı.

Ghost en az 1 GB bellek kullanılmasını önemle önerir ve CPU veya disk için değer yayınlamaz; bu yüzden aşağıdaki öneriler tek bir yayın için temkinli bir başlangıç noktasıdır:

KaynakEn düşük (resmi)Önerilen başlangıç
CPUYayınlanmamış1 vCPU
RAM1 GB2 GB
DiskYayınlanmamış20 GB SSD ve görselleriniz ile medya dosyalarınız

Adım 1 — Root olmayan bir kullanıcı oluşturun

Ghost-CLI root olarak çalışmayı reddeder ve siteyi çalıştırmak için ghost adında kendi sistem kullanıcısını oluşturur. Root olarak giriş yapın ve ghost dışında herhangi bir adla, örneğin webadmin, bir yönetici kullanıcı oluşturun; ardından ona sudo yetkisi verip bu kullanıcıya geçin. Böyle bir kullanıcınız zaten varsa bu adımı atlayın:

Bash
adduser webadmin
usermod -aG sudo webadmin
su - webadmin

Sonraki tüm komutları bu kullanıcıyla çalıştırın.

Adım 2 — Nginx'i kurun ve güvenlik duvarını açın

Sistemi güncelleyin ve Nginx'i kurun. Ghost-CLI daha sonra kendi Nginx site yapılandırmasını yazar:

Bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Nginx Full profili 80 ve 443 numaralı portları açar. Nginx'in yanıt verdiğini curl -I http://localhost ile kontrol edin.

Adım 3 — MySQL'i kurun ve bir root parolası belirleyin

MySQL sunucusunu Ubuntu arşivinden kurun. Ubuntu 24.04 MySQL 8.0, Ubuntu 26.04 ise MySQL 8.4 sağlar; ikisi de Ghost tarafından desteklenir:

Bash
sudo apt-get install mysql-server
mysql --version

Ubuntu'da MySQL root hesabı Unix soketi üzerinden kimlik doğrular ve Ghost-CLI bunu kullanamaz. Bu yüzden Ghost belgeleri root'a bir parola verir. openssl rand -hex 24 ile güçlü bir parola üretin, ardından sudo mysql ile MySQL kabuğunu açıp şunu çalıştırın:

SQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'change-me';
FLUSH PRIVILEGES;
EXIT;

change-me yerine ürettiğiniz parolayı yazın ve parolayı parola yöneticinizde saklayın. mysql -u root -p -e "SELECT VERSION();" ile test edin.

Adım 4 — Node.js 22'yi kurun

Ghost 6, Node.js 22 LTS gerektirir; Node 20, 21 ve 23 veya daha yenisi desteklenmez. Ghost belgeleri Node.js'i NodeSource deposundan kurar ve başka kurulum yöntemlerinin sorunlara yol açabileceği konusunda uyarır:

Bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
node -v

node -v komutu v22 ile başlayan bir sürüm yazdırmalıdır.

Adım 5 — Ghost-CLI'ı kurun

Ghost-CLI, Ghost'u kuran, yapılandıran ve güncelleyen komut satırı aracıdır. npm ile genel (global) olarak kurun:

Bash
sudo npm install ghost-cli@latest -g
ghost help

ghost help, install, update, backup ve doctor gibi kullanılabilir komutları listeler.

Adım 6 — Ghost'u kurun

Kurulum klasörünü oluşturun, Ghost-CLI'ın beklediği izinlerle kullanıcınıza verin ve kurulum aracını bu klasörün içinden çalıştırın. Boş bir klasör kullanın:

Bash
sudo mkdir -p /var/www/ghost
sudo chown $USER:$USER /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost
ghost install

Ghost-CLI sistemi kontrol eder, güncel Ghost sürümünü indirir ve bir dizi soru sorar:

  • Blog URL: https://example.com gibi protokolüyle birlikte tam adres. SSL adımının sunulması için HTTPS kullanın; IP adresleri hataya yol açar.
  • MySQL hostname: localhost değerini kabul etmek için Enter'a basın.
  • MySQL username and password: root ve Adım 3'teki parola ya da ipucundaki ayrı kullanıcı.
  • Ghost database name: öneriyi kabul edin; root ile Ghost-CLI veritabanını oluşturur.
  • Set up a ghost MySQL user?: evet yanıtını verin. Ghost-CLI yalnızca Ghost veritabanına erişebilen bir MySQL kullanıcısı oluşturur ve bilgilerini yapılandırma dosyasına yazar; böylece çalışma sırasında root kullanılmaz.
  • Set up Nginx?: evet. Ghost-CLI alan adınızı Ghost'a yönlendiren bir site yapılandırması yazar.
  • Set up SSL?: evet. Let's Encrypt için bir e-posta adresi girin; Ghost-CLI sertifikayı acme.sh ile alır ve 443 numaralı portta HTTPS'i yapılandırır.
  • Set up systemd? ve Start Ghost?: Ghost'un bir servis olarak çalışması ve açılışta başlaması için ikisine de evet deyin.

Kurulum aracı bittiğinde sonucu kontrol edin:

Bash
ghost ls
ghost doctor
curl -I https://example.com

ghost ls siteyi running durumuyla gösterir, ghost doctor hata bildirmez ve curl geçerli bir sertifikayla HTTP/2 200 döndürür.

Adım 7 — Sahip hesabını oluşturun

https://example.com/ghost adresini hemen açın ve adınız, e-posta adresiniz ve güçlü bir parolayla sahip hesabını (owner) oluşturun. Bu yapılana kadar adresi bulan herkes siteyi sahiplenebilir. Ardından kurulum sihirbazını tamamlayın: site başlığı, tasarım ve ilk ekip davetleri.

Adım 8 — İşlemsel e-postayı yapılandırın

Ghost, üretimde ekip davetleri, parola sıfırlama, üye kayıtları ve üye giriş bağlantıları için çalışan bir e-posta yapılandırmasına ihtiyaç duyar. Bir SMTP sağlayıcısını /var/www/ghost/config.production.json içinde yapılandırın.

Dosyayı nano config.production.json ile açın ve mevcut mail bloğunu sağlayıcınızın bilgileriyle değiştirin. 587 numaralı port ve false değerindeki secure ayarıyla bağlantı STARTTLS ile şifrelenir:

JSON
  "mail": {
    "from": "'Example Blog' <[email protected]>",
    "transport": "SMTP",
    "options": {
      "host": "smtp.example.com",
      "port": 587,
      "secure": false,
      "auth": {
        "user": "[email protected]",
        "pass": "change-me"
      }
    }
  },

Teslim edilebilirliği artırmak için kendi alan adınızda gerçek bir gönderici adresi kullanın. Dosya geçerli JSON olarak kalmalıdır; virgülleri ve tırnakları kontrol edin. Değişikliği uygulayın:

Bash
cd /var/www/ghost
ghost restart

Bir ekip üyesini davet ederek veya başka bir adresle üye olarak kaydolarak test edin. E-posta gelmezse ghost log -e hatayı gösterir.

Bültenler ayrı bir yoldur. Ghost belgeleri, toplu bültenlerin basit SMTP ile gönderilemeyeceğini ve şu anda desteklenen tek toplu e-posta sağlayıcısının Mailgun olduğunu belirtir. Mailgun alan adınızı ve API anahtarınızı Ghost Admin'deki Email newsletter ayarlarına girin. Üye giriş e-postaları yukarıdaki SMTP yapılandırmasını kullanmaya devam eder.

Alternatif: Ghost'un Docker kurulumu (önizleme)

Ghost'un Docker araçları resmi TryGhost/ghost-docker deposunda bulunur. Depoyu /opt/ghost klasörüne klonlar, .env.example ve caddy/Caddyfile.example dosyalarını kopyalar, alan adınızı, veritabanı parolalarını ve SMTP bilgilerini ayarlar, ardından docker compose pull ve docker compose up -d çalıştırırsınız. TLS'i Caddy yönetir; isteğe bağlı profiller kendi sunucunuzda ActivityPub ve web analitiği ekler. Güncellemeler git pull, docker compose pull ve docker compose up -d ile yapılır. Depo, mevcut bir Ghost-CLI sitesini konteynerlere taşıyan scripts/migrate.sh betiğini içerir. Ghost bu kurulumu hâlâ önizleme olarak etiketlediği için üretimde kullanmadan önce Ghost'un kurulum belgelerinde güncel durumu kontrol edin.

Yedekleme ve geri yükleme

Ghost'un durumu MySQL veritabanında, content klasöründe (görseller, medya, dosyalar, temalar ve loglar) ve config.production.json dosyasında tutulur. Ghost'un her güncellemeden önce önerdiği Ghost-CLI yedeğiyle başlayın. Bu komut; JSON içerik dışa aktarımı, üyeler CSV dosyası, temalarınız, görseller, dosyalar ve medya ile routes ve redirects dosyalarını içeren bir zip dosyası oluşturur. Zip dosyasının konumu için komut çıktısına bakın:

Bash
cd /var/www/ghost
ghost backup

Felaket kurtarma veya birebir kopya için Ghost'un elle yedekleme rehberinde anlatıldığı gibi veritabanının dökümünü de alın ve content klasörünü arşivleyin. Veritabanı adını, kullanıcıyı ve parolayı config.production.json içindeki database.connection bloğunda bulun, ardından aşağıdaki ghost_user ve ghost_production değerlerini kendi değerlerinizle değiştirin:

Bash
sudo mkdir -p /opt/backups
sudo chown $USER:$USER /opt/backups
cd /var/www/ghost
mysqldump --single-transaction --no-tablespaces -u ghost_user -p ghost_production > /opt/backups/ghost-db-$(date +%F).sql
sudo tar czf /opt/backups/ghost-content-$(date +%F).tar.gz -C /var/www/ghost content config.production.json
sudo chmod 600 /opt/backups/ghost-*

--no-tablespaces, PROCESS yetkisi olmayan bir kullanıcı tablespace bilgisini dökmeye çalıştığında MySQL 8'in verdiği hatayı önler. Yedekleri başka bir makineye, örneğin rsync ile kopyalayın; yalnızca sunucuda duran bir yedek sunucuyla birlikte kaybolur.

Yeni bir sunucuya geri yüklemek için Adım 1-7'yi yedeğin alındığı aynı Ghost sürümüyle tamamlayın (eski sunucuda ghost ls sürümü gösterir; ghost install 6.69.0 belirli bir sürümü kurar), ardından veritabanını yeni config.production.json içindeki bilgilerle içe aktarın ve içeriği geri koyun:

Bash
cd /var/www/ghost
ghost stop
mysql -u ghost_user -p ghost_production < /opt/backups/ghost-db-2026-10-09.sql
sudo tar xzf /opt/backups/ghost-content-2026-10-09.tar.gz -C /var/www/ghost content
sudo chown -R ghost:ghost /var/www/ghost/content
ghost start

Sürümü, tarihleri, kullanıcıyı ve veritabanı adını kendi değerlerinizle değiştirin, ardından en yeni sürüme geçmek için ghost update çalıştırın. Yalnızca yazıları, sayfaları, etiketleri ve üyeleri yeni bir siteye taşımak için Ghost Admin'deki Settings → Advanced → Import/Export ekranını da kullanabilirsiniz; JSON dışa aktarımı yorumları, üye etkinliklerini ve medya dosyalarını içermez, bu yüzden yukarıdaki tam yedek daha güvenli varsayılandır.

Ghost güncelleme

Ghost her hafta güncelleme yayınlar. Ghost-CLI'ı güncel tutun, yedek alın, güncelleme olup olmadığını kontrol edin ve uygulayın:

Bash
cd /var/www/ghost
sudo npm install -g ghost-cli@latest
ghost backup
ghost check-update
ghost update

ghost update yeni sürümü indirir, veritabanı geçişlerini çalıştırır, Ghost'u yeniden başlatır ve güncelleme başarısız olursa otomatik olarak geri alır. Önceki sürüme elle dönmek için ghost update --rollback çalıştırın. Ana Ghost sürümleri 12 ila 18 ayda bir gelir ve daha fazla özen ister: sürüm notlarını ve uyumsuz değişiklikleri okuyun, temanızın yeni sürümü desteklediğinden emin olun ve gerekli Node.js sürümünün değişip değişmediğini kontrol edin. Değiştiyse Adım 4'teki NODE_MAJOR değerini yeni sürüme ayarlayın, NodeSource komutlarını yeniden çalıştırın ve ardından Ghost'u güncelleyin. Nginx, MySQL ve sistemin geri kalanını sudo apt-get update && sudo apt-get upgrade ile güncel tutun.

Sorun giderme

Ghost-CLI root olarak çalışmayı reddediyor veya izin hataları veriyor

Ghost-CLI 1.5.0'dan bu yana Ghost komutlarını root olarak çalıştırmaya izin verilmez. Adım 1'deki gibi bir sudo kullanıcısı oluşturun. Kurulumu zaten root olarak yaptıysanız, Ghost'un root kullanıcı düzeltmesi /root/.ghost/config dosyasını yeni kullanıcının ev klasörüne taşır ve /var/www/ghost içindeki root'a ait dosyaların sahipliğini find . -group root -user root -exec chown webadmin:webadmin {} \; ile değiştirir. Kurulum klasöründe setuid veya setgid bitlerini ayarlamayın; Ghost-CLI bunları desteklemez.

ghost install sırasında Access denied for user 'root'@'localhost'

MySQL root hâlâ soket kimlik doğrulaması kullanıyor veya parola yanlış. Adım 3'teki ALTER USER komutunu sudo mysql ile tekrarlayın, parolayı mysql -u root -p ile test edin, ardından kuruluma devam etmek için ghost setup çalıştırın.

ghost start başarısız oluyor veya site 502 Bad Gateway gösteriyor

Nginx çalışıyor ama Ghost çalışmıyor. Durumu görmek için ghost ls, yapılandırmayı kontrol etmek için ghost doctor ve Ghost'u ön planda başlatmak için ghost run çalıştırın; açılış hataları doğrudan terminalinizde görünür. Log dosyaları /var/www/ghost/content/logs/ klasöründedir; ghost log -e son hataları gösterir.

Kurulum aracı desteklenmeyen bir Node.js sürümü nedeniyle duruyor

Ghost 6, Node.js 22 gerektirir. node -v ile kontrol edin; örneğin Ubuntu arşivinden veya nvm ile başka bir sürüm kurulmuşsa onu kaldırın ve Node.js 22'yi NodeSource paketinin sağlaması için Adım 4'ü tekrarlayın.

E-postalar teslim edilmiyor

config.production.json içindeki mail bloğunda yazım hatası, 587 dışında bir port veya 587 numaralı portla birlikte true yapılmış bir secure ayarı olup olmadığını kontrol edin ve her değişiklikten sonra ghost restart çalıştırmayı unutmayın. ghost log -e, reddedilen kimlik bilgileri gibi SMTP hatalarını gösterir. Bültenler ayrıca Ghost Admin'deki Mailgun ayarlarına ihtiyaç duyar.

Sonraki adımlar

Sık sorulan sorular

Ghost'u Ghost-CLI ile mi yoksa Docker ile mi kurmalıyım?

Ghost belgeleri Ghost-CLI ile Ubuntu kurulumunu standart self-hosting yöntemi olarak listeler ve Docker Compose araçlarını önizleme (preview) olarak etiketler. Bugün olgun yol Ghost-CLI'dır; Docker önizlemesi kendi sunucunuzda web analitiği gibi özellikler ekler ve Ghost-CLI siteleri için bir taşıma betiği içerir.

Linux kullanıcısının adı neden ghost olmamalı?

Ghost-CLI, Ghost sürecini en az yetkiyle çalıştırmak için ghost adında kendi sistem kullanıcısını oluşturur. Giriş kullanıcınız aynı adı taşırsa ikisi çakışır ve kurulum başarısız olur; bu yüzden Ghost belgeleri başka herhangi bir ad seçmenizi söyler.

Ghost 6 hangi Node.js ve MySQL sürümlerine ihtiyaç duyar?

Ghost 6, Node.js 22 LTS gerektirir; Node 20, 21 ve 23 veya daha yenisi desteklenmez. Veritabanı olarak Ghost MySQL 8.0 veya 8.4'ü destekler. Ubuntu 24.04 MySQL 8.0, Ubuntu 26.04 ise MySQL 8.4 ile gelir.

Ghost bültenleri kendi SMTP sunucumla gönderebilir mi?

Hayır. SMTP; giriş bağlantıları, davetler ve parola sıfırlama gibi işlemsel e-postaları karşılar. Toplu bültenler bir toplu e-posta sağlayıcısı gerektirir ve Ghost'un bunun için şu anda desteklediği tek sağlayıcı Mailgun'dır.

Ghost'u bir HyperDC sunucusunda çalıştırabilir miyim?

Evet. Rehber, Ubuntu 24.04 veya 26.04 çalıştıran, root erişiminiz olan ve Ghost'un önerdiği en az 1 GB belleğe sahip bir HyperDC Linux VPS, VDS veya dedicated sunucuda çalışır.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın