# 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.

Zorluk: Orta\
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS

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.

> **Not**
>
> Ghost, belgelerinde hâlâ **önizleme** (preview) olarak etiketlenen resmi Docker Compose araçları da sunar. Bu araçlar Ghost'u, MySQL'i ve Caddy'yi konteynerlerde çalıştırır ve Ghost-CLI kurulumlarında çalışmayan, isteğe bağlı kendi sunucunuzda ActivityPub ve Tinybird tabanlı web analitiği ekler. Rehberin sonlarına doğru bir bölüm bunu kısaca açıklar.

## Ö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](/guides/ssh-keys) rehberinde anlatıldığı gibi SSH anahtarıyla giriş. [Yeni bir Linux sunucusunu güvenli hale getirin](/guides/secure-a-new-linux-server) 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:

| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | Yayınlanmamış | 1 vCPU |
| RAM | 1 GB | 2 GB |
| Disk | Yayı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.

> **İpucu**
>
> Root için soket kimlik doğrulamasını da koruyabilirsiniz: Ghost için bir veritabanını ve ayrı bir MySQL kullanıcısını kendiniz oluşturun, bu kullanıcıya veritabanı üzerinde tüm yetkileri verin ve Ghost-CLI MySQL kullanıcısını sorduğunda bu bilgileri girin. Ghost belgeleri bu durumda veritabanının önceden var olması gerektiğini belirtir.

## 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.

> **Not**
>
> HyperDC VPS'lerde giden 25 numaralı port varsayılan olarak kapalıdır. 3 ay veya daha uzun süreyle satın alınan hizmetlerde talep üzerine açılır: [destek talebi açın](/guides/support-tickets). O zamana kadar e-postaları 587 numaralı port üzerinden bir SMTP relay ile gönderin.

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' <noreply@example.com>",
    "transport": "SMTP",
    "options": {
      "host": "smtp.example.com",
      "port": 587,
      "secure": false,
      "auth": {
        "user": "postmaster@example.com",
        "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

- Ghost'u WordPress ile [Nginx, PHP-FPM ve MariaDB ile WordPress](/guides/install-wordpress-lemp) veya [Docker ile WordPress](/guides/install-wordpress-docker) rehberlerinde karşılaştırın.
- Nginx ve Let's Encrypt hakkında daha fazlasını [Nginx reverse proxy ve Certbot](/guides/nginx-reverse-proxy-certbot) rehberinde öğrenin.
- Yayınınız için sunucuları [Ghost hosting](/ghost-hosting) sayfasında bulun.
- Tüm komutlar ve seçenekler için resmi [Ghost-CLI belgelerini](https://docs.ghost.org/ghost-cli/) okuyun.

## 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.

---

Kaynak: <https://hyperdc.com/tr/guides/tutorials/install-ghost>\
Son güncelleme: 2026-10-09
