Menjalankan Ghost di Docker untuk Blog Pengembang Anda

· 7 min read
Menjalankan Ghost di Docker untuk Blog Pengembang Anda
Photo by Anete Lūsiņa / Unsplash

Ghost adalah salah satu platform blogging sumber terbuka paling populer. Ini menawarkan fitur-fitur canggih untuk hampir semua hal yang berhubungan dengan blogging, seperti pengeditan, penerbitan, buletin email, dan menawarkan langganan berbayar. Ghost menawarkan tema siap pakai yang dapat Anda gunakan untuk menyiapkan blog Anda dengan cepat, namun berkat API-nya yang luas, Anda juga dapat menggunakannya sebagai CMS tanpa kepala untuk frontend khusus Anda.Anda dapat menginstal Ghost dengan beberapa cara , salah satunya adalah Docker .

Menerapkan Ghost dengan Docker memiliki banyak keuntungan. Dengan wadah Docker, Anda mendapatkan cara yang fleksibel dan mudah direproduksi untuk menjalankan blog Anda. Ini memungkinkan Anda menjalankan instance lain dengan cepat ketika ada yang gagal atau diperbarui. Selain itu, Anda mendapatkan pengalaman penyiapan yang sama, terlepas dari apakah Anda berada di lingkungan pengembangan atau produksi.

Artikel ini akan memandu Anda melalui seluruh proses pengaturan blog Ghost dengan Docker. Anda dapat menemukan semua file konfigurasi dari tutorial ini di repo GitHub ini .

Fitur Ghost

Sebelum mendalaminya, mari kita jelajahi dulu beberapa fitur Ghost secara mendalam.

Kesederhanaan dan Kemudahan Penggunaan

Seperti yang akan Anda lihat sebentar lagi, Ghost sangat mudah diatur, terutama dengan image Docker yang sudah dibuat sebelumnya. Selain itu, bagian lain dari pengalaman Ghost juga mudah dipahami. Segala sesuatu mulai dari editor konten hingga panel pengaturan memiliki desain yang bersih dan minimal.

Pengalaman Mengedit dan Menerbitkan

Editor Ghost adalah salah satu yang terbaik dalam bisnis ini. Ini menyediakan semua yang Anda butuhkan untuk membuat konten luar biasa, termasuk:

  • Menu pemformatan mengambang.
  • Blok gambar, HTML, dan konten lainnya.
  • Penyematan media untuk Twitter, YouTube, CodePen, dan banyak lagi.
  • Pintasan penurunan harga.
  • Cuplikan konten yang dapat digunakan kembali.

Ketika Anda selesai menulis, penerbitan hanyalah masalah menyediakan beberapa metadata dan menekan tombol Publikasikan .

Buletin Email

Selain untuk blogging, Ghost juga dapat digunakan untuk buletin email. Dengan editor desain email bawaan, daftar anggota, analisis email, dan integrasi Mailgun , Anda mendapatkan solusi lengkap fitur untuk menjalankan buletin Anda sendiri langsung dari blog Anda.

Langganan dan Keanggotaan

Berkat integrasi Stripe, API khusus, dan dasbor administrasi anggota, Ghost memiliki semua yang Anda perlukan untuk menerapkan langganan berbayar dan memonetisasi blog Anda. Anda dapat membuat apa saja mulai dari sistem donasi sederhana hingga konten berbayar atau buletin premium.

Menyiapkan Ghost dengan Docker

Panduan ini mengasumsikan Anda menjalankan Ubuntu 18.04 atau lebih baru. Untuk menjalankan Ghost di Docker, disarankan minimal 1 GB RAM dan CPU yang layak.

Menginstal Docker

Sebelum memasang Ghost, Anda harus memasang Docker Engine dan Docker Compose . Pastikan untuk menghapus instalasi Docker Engine versi sebelumnya yang mungkin diinstal pada sistem Anda:

sudo apt-get remove docker docker-engine docker.io containerd runc

Gunakan apt untuk menginstal semua paket yang dibutuhkan oleh Docker:

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Tambahkan kunci GPG resmi Docker untuk memverifikasi integritas paket Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Siapkan repositori stabil Docker sebagai sumber pengunduhan paket:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instal Docker Engine dan Docker Compose, lalu verifikasi instalasi:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
docker --version
docker-compose --version

Jika semuanya sudah diatur dengan benar, Anda akan melihat nomor versi untuk Docker Engine dan Docker Compose di terminal Anda.

Menjalankan Gambar Ghost

Dengan Docker yang siap, Anda sekarang dapat menggunakannya untuk mengunduh dan menjalankan image Ghost.

Untuk Pembangunan

Ini adalah cara termudah untuk mengaktifkan dan menjalankan image Ghost untuk tujuan pengembangan. Dengan pengaturan ini, container tidak memiliki kewarganegaraan, artinya semua data akan hilang jika terjadi sesuatu padanya. Selain itu, secara default, blog Ghost menggunakan database SQLite .

Jalankan gambar Ghost menggunakan perintah berikut:

docker run -d --name my-ghost-blog -e url=http://localhost:2368 -p 2368:2368 ghost

Ini akan membuat sebuah container diberi nama my-ghost-blogmenggunakan image Ghost resmi yang disediakan oleh komunitas Docker. Blog Ghost akan dapat diakses di port 2368.

Meskipun nyaman dan bagus untuk tujuan pengembangan, penyiapan ini belum siap untuk produksi. Untuk itu, diperlukan konfigurasi lebih lanjut.

Untuk Produksi

Mulailah dengan membuat direktori khusus, seperti my-ghost-blog, dan docker-compose.ymlfile di dalamnya:

mkdir my-ghost-blog
cd my-ghost-blog
touch docker-compose.yml

Di dalam file, tentukan konfigurasi untuk container Docker:

version: "3.3"
services:
  ghost:
    image: ghost:latest
    restart: always
    ports:
      - "2368:2368"
    depends_on:
      - db
    environment:
      url: http://localhost:2368
      database__client: mysql
      database__connection__host: db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    volumes:
      - /home/ghost/content:/var/lib/ghost/content

  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home/ghost/mysql:/var/lib/mysql

Dengan konfigurasi ini, container database MySQL tambahan akan dibuat menggunakan image MariaDB . Selain itu, volume khusus ditambahkan untuk blog Ghost guna menyediakan penyimpanan stateful.

Sekarang, jalankan konfigurasi dengan docker-compose up -d. Anda sekarang dapat melihat blog Ghost di port 2368.

Hantu dengan tema Casper default

Menyiapkan Blog Ghost Anda

Untuk memulai dengan Ghost, buka http://localhost:2368/ghost. Di sinilah panel admin Anda akan ditempatkan. Pergi ke sana untuk pertama kalinya, Anda akan melihat layar pengaturan seperti di bawah ini:

Pengaturan admin hantu

Isi formulirnya, dan Anda akan disambut dengan dashboard.

Dasbor hantu

Untuk membuat postingan pertama Anda, klik tombol + di sebelah Postingan , yang akan membawa Anda ke editor postingan.

Editor hantu

Dari dalam editor, Anda dapat menulis postingan blog dan mengatur semua metadatanya. Setelah selesai, klik Publikasikan untuk menjadikan postingan Anda publik.

Mengekspos dan Mengamankan Blog Hantu

Sekarang, ketika blog Ghost sudah aktif dan berjalan, masih ada beberapa pengaturan yang harus dilakukan di backend. Anda harus mengekspos aplikasi untuk akses luar dengan proxy seperti Nginx dan mengamankannya dengan sertifikat SSL. Proses ini memerlukan domain, yang kami sebut sebagai example.com.

Memperoleh Sertifikat SSL

Untuk mendapatkan sertifikat SSL untuk domain Anda, pertama-tama Anda harus menginstal paket Certbot terbaru dengan penginstal paket Snapd .

Pertama, pastikan Snapd terbaru dan tidak ada Certbot versi lama yang diinstal:

sudo snap install core
sudo snap refresh core
sudo apt remove certbot

Selanjutnya, instal Certbot dan buat symlink ke jalur instalasinya untuk memastikannya dapat diakses melalui certbotperintah:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Terakhir, jalankan perintah berikut untuk membuat dan mengunduh sertifikat untuk domain Anda:

sudo certbot certonly --standalone -d example.com

Setelah sertifikat SSL siap, Anda dapat melanjutkan ke Nginx.

Membuat Gambar Nginx Docker Kustom

Dalam contoh ini, Anda akan melihat cara menjalankan Nginx sebagai container terpisah dengan Docker Compose.

Untuk memulai, buat nginxfolder baru:

mkdir nginx
cd nginx

Anda harus mengubah image resmi Nginx untuk menyertakan konfigurasi Nginx khusus. Untuk melakukannya, buat file yang dipanggil ghost.confuntuk menyimpan konfigurasi Nginx khusus:

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }
  location / { return 301 https://$server_name$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;
    
  access_log /var/log/nginx/ghost.access.log;
  error_log /var/log/nginx/ghost.error.log;
  client_max_body_size 20m;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://ghost:2368;
  }
}

Konfigurasi ini mengekspos aplikasi Ghost yang berjalan dalam wadah terpisah (at http://ghost:2368), dan mencakup konfigurasi yang diperlukan agar sertifikat SSL dapat berfungsi dengan benar.

Sekarang, buat Dockerfile baru di mana Anda akan mengubah image default Nginx:

FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
COPY ghost.conf /etc/nginx/conf.d

Setelah Dockerfile siap, Anda kini dapat kembali ke konfigurasi Docker Compose.

Memperbarui Konfigurasi Docker Compose

Jika blog Ghost Anda masih berjalan, sebaiknya hentikan terlebih dahulu dengan docker-compose downperintah. Karena konfigurasi sudah memiliki volume yang terpasang, semua data akan tetap ada melalui pengaturan ulang.

Perbarui docker-compose.ymlfile untuk menambahkan container Nginx terpisah, dan hapus portsproperti dari ghostcontainer:

version: '3.3'
services:

  ghost:
    image: ghost:latest
    restart: always
    depends_on:
      - db
    environment:
      url: https://example.com
      database__client: mysql
      database__connection__host: db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    volumes:
      - /home/ghost/content:/var/lib/ghost/content

  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home/ghost/mysql:/var/lib/mysql
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    restart: always
    depends_on:
      - ghost
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /etc/letsencrypt/:/etc/letsencrypt/
      - /usr/share/nginx/html:/usr/share/nginx/html

Setelah selesai, jalankan aplikasi docker-compose up -dsekali lagi. Jika semuanya sudah diatur dengan benar, Anda akan melihat blog Ghost Anda di bawah https://example.com.

Opsi Penerapan

Berkat popularitas dan fleksibilitas Docker, ada banyak sekali opsi yang dapat dipilih saat menghosting aplikasi Anda. Aplikasi dalam container yang dirancang dengan baik dapat berjalan di mana saja mulai dari server pribadi virtual hingga lingkungan cloud Docker khusus atau cluster Kubernetes.

Beberapa platform penerapan Docker yang paling populer meliputi:

Sekian Terimakasih..