Saya rasa tulisan pembuka yang paling tepat untuk blog ini adalah tentang bagaimana saya membuat blog ini. Karena saat saya menulis tulisan ini sudah jam 2 pagi, mohon maaf jika saya hanya bisa memberikan selayang pandang saja tentang proses pembuatan blog ini beserta tautan-tautan terkait.

Hosting

Pertama-tama, layanan hosting yang saya pilih adalah DigitalOcean, karena menyediakan virtual private server (VPS) dengan harga terjangkau: $5 per bulan, bandingkan dengan penyedia hosting lokal yang umumnya membanderol layanan VPS mereka di kisaran Rp300.000 per bulan. Sudah begitu, saya mendapatkan kupon senilai $10 dari teman saya, yang bisa Anda dapatkan juga di sini.

Kenapa harus VPS? Kenapa tidak shared hosting saja? Kan murah tuh, paling cuma Rp15.000 - Rp30.000 per bulan.

Memiliki VPS itu layaknya memiliki server sendiri, bisa kita utak-atik semau kita, lain halnya dengan shared hosting yang umpamanya kita hanya menjadi user pada satu server bersama. Saat kita ingin membeli paket shared hosting, tidak jarang kita khawatir, "Apakah software yang kita butuhkan tersedia di server mereka?". Lain halnya dengan VPS, di mana kita diberikan satu virtual server kosongan yang bisa kita mainkan sesuka hati kita.

Kemudian saya memilih server berbasis Ubuntu 16.04, karena saya paling familiar dengan Ubuntu. Memang benar kata orang, tak kenal maka tak sayang. Tapi yang saya sesali adalah saya tidak mengambil preset Ubuntu + Docker yang disediakan oleh DigitalOcean. Saya saat itu tidak mengira akan membutuhkan Docker.

Platform Blogging

Sebenarnya alasan saya membeli hosting VPS adalah untuk iseng-iseng belajar Node.js, tapi saya pikir daripada belajar sendirian lebih enak belajar ramai-ramai toh? Kemudian terbesitlah di pikiran saya untuk membuat blog untuk berbagi ilmu seiring proses belajar saya.

Nah, seperti yang sudah saya ceritakan di tulisan sebelumnya, saya tertarik untuk mencoba platform Ghost ini utamanya karena alasan kesimpelannya. Sebenarnya sudah sejak kuliah saya kepincut dengan hantu satu ini, tapi baru sekarang saya sanggup menggunakannya secara live, mengingat tidak ada penyedia shared hosting yang mendukung Node.js saat itu.

Cara Kerja

Di sini saya mencoba untuk mengurai secara singkat bagaimana server blog ini bekerja.

Web Server dan SSL/TLS

Web server yang saya gunakan adalah Nginx. Tidak ada alasan khusus, hanya ingin mencoba hal baru saja setelah sebelumnya lebih banyak menggunakan Apache. Instalasi Nginx ini cukup sederhana, Anda cukup mengikuti langkah-langkah yang dijabarkan di sini.

Setelah Nginx terpasang, untuk keamanan, saya mengimplementasikan SSL/TLS pada server saya dengan sertifikat gratis dari Let's Encrypt. Seperti yang Anda lihat di bagian address bar dari browser Anda terdapat gembok hijau yang diikuti label "Secure", hehe. SSL/TLS membuat transaksi informasi antara server dengan client jauh lebih aman dengan enkripsi. Langkah-langkah implementasinya bisa Anda dapatkan di sini.

Docker

Tentang Docker ini sebenarnya saya belum bisa memberi banyak penjelasan karena saya baru dua hari kenal dengannya saat menulis ini. Kurang lebih Docker itu bekerja seperti virtual machine tetapi berjalan di atas sistem operasi host-nya. Docker membuat kita bisa menjalankan banyak aplikasi yang masing-masing terisolasi dalam container-nya di dalam satu host yang sama.

Dengan Docker, saya bisa melakukan instalasi Ghost tanpa harus meng-install satu pun dependensinya di server saya. Yap, Ghost yang saya gunakan ini berjalan di Docker. Untuk langkah-langkah implementasinya bisa didapatkan di sini.

Menyatukan Semuanya

Sekarang saya mempunyai VPS yang terdaftar dengan domain icalrn.id, melayani port 80 (HTTP) dan 443 (HTTPS). Port 80 diatur supaya mengarahkan ke port 443 untuk menegakkan koneksi yang aman di atas protokol SSL/TLS.

Lalu saya punya blog Ghost yang berjalan di Docker, yang melayani port bawaannya, yang ternyata hanya mendengarkan request di dalam container Docker-nya.

Untuk membuatnya dapat diakses oleh pengguna internet di seluruh dunia, saya perlu membuat web server saya menunjuk ke instalasi Ghost di dalam Docker tersebut. Hal itu saya capai dengan dua langkah: membuat proxy pada Nginx agar semua request ke web root secara langsung diarahkan ke port yang sudah ditentukan [tutorial], kemudian mengekspos port yang dilayani oleh Ghost dan mengaitkannya ke port yang sudah ditentukan tadi[tutorial].

Voila! Jadilah blog cantik yang anti-mainstream ini!