Menggunakan Custom Domain dan Sertifikat SSL/TLS di GitLab Pages

Selepas berpaling dari Blogger, saya kembali beralih menggunakan static blog. Namun tidak kembali memakai Jekyll di GitHub Pages sebagaimana ketika membuat blog rizaumami.github.io, melainkan mencoba Hugo dan menempatkannya di GitLab Pages. The migration kind of rough, but was nice and well….

Hingga akhirnya beberapa hari lalu mendadak blog tidak bisa diakses. 429, too many requests received galatnya. Sekilas baca-baca isunya karena GitLab menghadang request dari Cloudflare yang bertubi-tubi. Cloudflare saya gunakan agar blog rizaumami.gitlab.io bisa menggunakan domain rizaumami.com dan pula agar bisa diakses melalui HTTPS.
Memang ketika melepas rizaumami.gitlab.io dari Cloudflare, laman rizaumami.gitlab.io bisa diakses kembali namun tidak bisa diakses melalui custom domain rizaumami.com.

Mulanya saya biarkan saja dengan pikiran paling dalam satu-dua hari juga akan kembali normal. Wah, ternyata pada hari ketiga pun blog masih 429. Blog ini memang tidaklah istimewa tapi saya telah keluar uang untuk membeli domainnya, jadi sayang jika hanya ditelantarkan.

Berdiskusi di grup Telegram, ada yang menyarankan untuk beralih dari Cloudflare ke Netlify. Sialnya, ketika mencoba Netlify saya macet di langkah memilih git. Meski telah authorized di GitLab, nyatanya Netlify ini tidak memberikan langkah selanjutnya.
Hingga akhirnya seorang teman di grup tersebut memberi tahu bahwasanya GitLab memiliki fitur custom domain sendiri dan kita bisa memasang sertifikat SSL/TLS dari Let’s Encrypt di dalamnya. Sounds too good to be true, namun laman dokumentasi resmi ini ternyata memang mengamini.

Ternyata langkah-langkahnya lumayan rumit bagi seorang awam seperti diri ini. Setelah seharian bergelut dengan beragam pengaturan, barulah blog ini bisa kembali diakses melalui domain rizaumami.com dan www.rizaumami.com. Dan tentunya bisa diakses secara aman melalui protokol HTTPS.

Artikel ini sebagai catatan pengingat, jika 3 bulan mendatang saya mesti kembali memperbaharui sertifikat SSL/TLS dari Let’s Encrypt. Maklumlah, cara yang diikuti untuk mendapat sertifikat ini adalah cara manual yang harus diulang tiap 3 bulan.

Menambahkan custom domain ke GitLab Pages

  • Login ke GitLab dan buka laman proyek GitLab Pages
  • Tambahkan domain: Setting > Pages dan klik +New Domain. Isi kolom domain saja, Sertifikatnya nanti kita tambahkan belakangan.
Jendela untuk menambahkan domain dan sertifikat SSL/TLS di GitLab Pages
Sumber: gitlab.com
  • Setelah menambahkan domain, kini saatnya untuk membuktikan bahwa domain tersebut adalah benar milik kita. Caranya dengan menambahkan DNS dan Verification status dari laman ini ke layanan tempat kita membeli domain.
Jendela verifikasi domain di GitLab Pages
Sumber: gitlab.com

Selain menambahkan domain rizaumami.com, saya menambahkan pula www.rizaumami.com dengan maksud agar rizaumami.gitlab.io ini bisa diakses melalui rizaumami.com atau pun www.rizaumami.com.

Menambahkan DNS record ke penyedia domain

  • Login ke layanan tempat kita membeli domain
  • Buka laman pengaturan DNS
  • Buat rekaman baru untuk DNS A dan TXT sesuai data yang kita dapat pada langkah di atas. Tiap penyedia domain mungkin memiliki antarmuka pengaturan yang berbeda, dan sebagai gambaran berikut gambar pengaturan DNS yang saya lakukan di Rumah Web.
Jendela contoh pengaturan DNS di Rumah Web, sebuah layanan penyedia domain

Verifikasi domain

  • Masuk kembali ke GitLab dan buka laman proyek GitLab Pages
  • Buka kembali pengaturan domain di Settings > Pages
  • Klik tombol verifikasi di kolom Verification status untuk membuktikan bahwa domain yang telah kita isi adalah milik kita. Jika ternyata gagal melakukan verifikasi, coba lain kali. Seperti diketahui, perambatan (propagasi) DNS bisa seketika atau memerlukan waktu hingga 24 jam.

Mendapatkan sertifikat SSL/TLS dari Let’s Encrypt

Setelah verifikasi berhasil, blog saya di rizaumami.gitlab.io kini bisa diakses melalui http://rizaumami.com dan http://www.rizaumami.com. Awesome.

Ketika menggunakan Cloudflare, selain ia menyediakan fitur custom domain juga memberikan sertifikat SSL/TLS bagi blog sehingga bisa diakses melalui HTTPS. HTTPS adalah protokol yang lebih aman dibanding HTTP. Ini akan memberikan nilai tambah bagi SEO (not that I care of) dan bahkan kini banyak peramban yang akan memberikan peringatan ke pengunjung jika mereka mengakses situs tanpa HTTPS. Not cool.

Beruntung, selain kini GitLab menyediakan fitur memasang sertifikat SSL/TLS di GitLab Pages, juga ada Let’s Encrypt yang memberikan sertifikatnya secara cuma-cuma.
Ikuti cara di laman ini, atau cara berikut di bawah untuk mendapat sertifikat SSL/TLS dar Let’s Encrypt secara manual di mana kita harus memperbaharuinya per triwulan. Semoga kelak akan ada fitur GitLab Pages untuk mengotomasi pembuatan sertifikat ini.

  1. Gandakan lumbung Let’s Encrypt di GitHub.

    git clone https://github.com/letsencrypt/letsencrypt
    
  2. Masuk ke dalam map letsencrypt

    cd letsencrypt
    
  3. Buat sertifikat, misalnya untuk rizaumami.com

    ./letsencrypt-auto certonly -a manual -d rizaumami.com
    
  4. Setelah kita menyetujui bahwa IP kita akan dicatat, akan muncul pesan serupa berikut:

    Make sure your web server displays the following content at
    http://rizaumami.com/.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
    before continuing:
    
    5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U
    
    #
    # aslinya banyak output lainnya di sini
    #
    
    Press ENTER to continue
    

    Jangan tekan ENTER dan biarkan jendela terminal ini terbuka.

  5. Masuk ke map lokal public di blog statis kita. Kemudian buat berkas sebagaimana diminta pada langkah di atas.

    mkdir -p .well-known/acme-challenge
    echo 5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U > .well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
    
  6. Publikasikan berkas tersebut.

    git add .
    git commit -m 'Add letsencrypt challenge file.'
    git push
    

    Tunggu beberapa saat hingga GitLab selesai rebuild blog. Ini bisa seketika, atau bisa juga sampai beberapa menit. Baiknya lihat saja indikator laju build di laman GitLab Pages blog kita, atau dengan curling:

    curl http://rizaumami.com/.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
    
  7. Setelah blog selesai rebuilded, kembali ke jendela terminal letsencrypt tadi kemudian tekan tombol ENTER. Tunggu beberapa saat hingga muncul hasilnya.

    IMPORTANT NOTES:
      Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/rizaumami.org/fullchain.pem. Your cert will
       expire on 2019-01-24. To obtain a new version of the certificate in
       the future, simply run Let's Encrypt again.
    
      If you like Let's Encrypt, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    

Memasukkan sertifikat SSL/TLS ke GitLab Pages

  • Masuk kembali ke GitLab dan buka laman proyek GitLab Pages
  • Buka kembali pengaturan domain di Settings > Pages
  • Di kolom Domain, klik tombol Details pada domain yang hendak diberi sertifikat
  • Salin isi sertifikat /etc/letsencrypt/archive/rizaumami.com/fullchain1.pem dan tempelkan di kolom Certificate (PEM)
  • Salin isi private key /etc/letsencrypt/archive/rizaumami.com/privkey1.pem dan tempelkan di kolom Key (PEM)

Ulangi langkah-langkah tersebut untuk tiap domain.

Demikianlah bagaimana kemarin saya menerapkan sertifikat SSL/TLS dan custom domain rizaumami.com untuk blog rizaumami.gitlab.io. Lumayan rumit, but I wont complaint, justru bersyukur dengan adanya GitLab yang bisa menyediakan layanan one stop hosting. Perhaps, I’m just their product. Oh, well…