Instalasi Ghost dalam Docker di DigitalOcean

Seperti yang sudah saya ceritakan sebelumnya di Bagaimana Blog Ini Dibuat, blog ini dibangun dengan platform Ghost (ghost.io) yang berjalan di dalam container Docker (docker.io). Metode ini saya pilih karena kepraktisannya dan modularitasnya, proses instalasinya pun mudah. Di sini saya akan menjabarkan langkah-langkah yang saya lakukan dalam membangun blog ini.

Pertama-tama, seperti yang tertera di judul, kita akan menggunakan hosting server di DigitalOcean. Jika Anda ingin langsung mencobanya, Anda dapat menyewa droplet dengan opsi paling ekonomis ($5/bulan) dengan bebas biaya dua bulan pertama di sini. Opsi droplet yang saya gunakan dalam tulisan ini berbasis Ubuntu 16.04.2, Anda bisa menyesuaikan jika Anda menggunakan opsi lain.

Setelah droplet dibuat, SSH ke dalam droplet tersebut kemudian lakukan instalasi Docker.

Persiapan Docker

Instalasi

Tambahkan repository resmi Docker untuk Ubuntu 16.04 dengan perintah berikut.

$ sudo apt-get update
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
$ sudo apt-get update
$ sudo apt-get install -y docker-engine

Pastikan bahwa repositori apt untuk docker-engine merujuk ke apt.dockerproject.org.

$ apt-cache policy docker-engine
docker-engine:
  Installed: (none)
  Candidate: 1.11.1-0~xenial
  Version table:
     1.11.1-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
     1.11.0-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Jika semuanya sudah sesuai, install Docker.

$ sudo apt-get install -y docker-engine

Persiapan Image Ghost

Container Ghost sudah tersedia di public repository. Yang kita perlu lakukan adalah menariknya ke server kita.

docker pull ghost

Setelah proses pull selesai, kita sebenarnya sudah bisa menjalankan Ghost dengan membuat container berdasarkan image ghost tersebut. Namun, tentunya untuk implementasi tingkat production kita butuh melakukan konfigurasi lebih lanjut.

Konfigurasi Ghost

Platform inti Ghost yang akan kita buat beserta seluruh dependensinya berjalan terenkapsulasi di dalam container Docker. Untuk dapat menyuntik konfigurasi dan konten ke dalam container, kita akan melakukan mounting direktori berisi konfigurasi dan konten Ghost dari server kita ke dalam direktori berkaitan di dalam container Ghost.

Mari buat direktori untuk menyimpan berkas-berkas Ghost. Direktori ini lokasinya bebas, namun untuk mempermudah kita buat di direktori home.

$ mkdir ~/ghost
$ cd ~/ghost

Download berkas zip instalasi Ghost dan ekstrak direktori content dan berkas config.example.js ke dalam direktori konfigurasi kita. Jangan lupa ganti nama config.example.js menjadi config.js.

$ wget https://ghost.org/zip/ghost-latest.zip
$ unzip ghost-latest.zip "content/*"
$ unzip ghost-latest.zip "config.example.js" -d content
$ mv content/config.example.js content/config.js
$ rm ghost-latest.zip

Setelah itu, ubah berkas config.js pada bagian production

production: {
  url: 'https://icalrn.id', // isi konfigurasi ini dengan domain Anda
  paths: {
      contentPath: path.join(process.env.GHOST_CONTENT, ‘/’) // ubah menjadi seperti ini
  },
  // ...
}

Konfigurasi Ghost selesai. Sekarang saatnya kita menghidupkan container Ghost yang menggunakan konfigurasi tadi.

Menghidupkan Container Ghost

Untuk membuat container pada Docker, kita akan menggunakan perintah docker run.

Kita akan memberikan nama pada container tersebut dengan opsi --name. Penamaan ini sifatnya opsional, jika kita tidak memberikan nama maka Docker akan membuatkan nama untuk container kita.

Kemudian kita akan menggunakan opsi -v untuk melakukan volume mounting direktori konfigurasi kita ke dalam container tersebut. Sebagai contoh, direktori konfigurasi yang saya buat berada di /home/icalrn/ghost/content, maka saya petakan ke /var/lib/ghost dengan opsi -v /home/icalrn/ghost/content:/var/lib/ghost.

Kita juga perlu mem-publish port yang akan dipetakan agar bisa diakses dari luar lingkungan Docker dengan opsi -p. Ghost berjalan di port 2368 secara default. Kita ingin memetakannya ke port 80 di server kita untuk secara otomatis mengarahkan request HTTP ke Ghost. Maka, kita bisa berikan opsi -p 80:2368.

Kemudian, kita juga perlu memberikan environment variable agar Ghost dan Node di dalam container berjalan dalam mode production dengan opsi -e. Terakhir, kita akan menjalankan container dalam mode detached agar terminal kita tidak harus selalu memantau container yang sedang berjalan dengan opsi -d.

Lancarkan!

$ docker run --name blog -v /home/icalrn/ghost/content:/var/lib/ghost -p 80:2368 -e NODE_ENV=production -d ghost

Anda bisa kunjungi domain Anda di browser kesukaan Anda untuk menguji keberhasilan memasang Ghost ini. Semoga bermanfaat!