Cara Deploy Hugo di Shared Hosting dengan Git
Shared hosting biasanya digunakan untuk hosting PHP dan deployment-nya dilakukan melalui FTP.
Hugo juga sebenarnya bisa saja di-deploy ke shared hosting dengan FTP.
Tapi… akan memakan waktu yang lama.
Karena banyak sekali file yang harus di-upload.
Kamu bisa cek sendiri di folder public
.
Folder ini berisi semua halaman web yang harus
kita upload ke server.
Sekali deploy, bisa memakan waktu lebih dari 30 menit (tergantung kecepatan internet).
Pasti membosankan menunggu selama itu.
Bayangkan saja, setiap kali kita mengubah sesuatu di Hugo, kita harus melakukan deployment dan menunggu lagi.
Ya Tuhan! betapa menyakitkannya hidup ini… 😄
Terus bagaimana donk solusinya?
Solusinya menggunakan Git.
Untung saja saat ini banyak penyedia layanan hosting yang memberikan fitur Git dan akses SSH.
Sehingga, deployment Hugo di shared hosting menjadi lebih mudah.
Tinggal commit dan push!
Website akan langsung ter-deploy di server.
Enak ‘kan.
Terus bagaimana caranya?
Mari kita simak…
Siapkan dulu ini:
Sebelum memulai, ada beberapa hal yang harus kamu siapkan…
- Website Hugo yang siap untuk di deploy;
- Akun CPanel di Shared Hosing;
- Pastikan di Shared Hosting menyediakan fitur Git dan akses SSH.
Oh ya, untuk akses SSH sendiri sebenarnya bersifat opsional. Tapi ada beberapa tempat hosting, yang memberikan fitur Git dan tapa akses SSH. Akibatnya kita tidak bisa push ke server. Cuma bisa clone saja.
Dan juga dengan SSH, kita akan bisa mengakses repositori private di Github, maupun di Gitlab dan Bitbucket.
Jadi pastikan kamu memilih tempat hosting yang memberikan kedua layanan itu ya…
Ini bisa kamu tanyakan dulu di CS, sebelum membeli paket hosting-nya.
Jika sudah siap, mari kita mulai dengan:
Setup SSH Key
SSH nanti akan berperan sebagai protokol yang akan membantu Git mengirim file dari lokal ke server maupun sebaliknya.
Biasanya, Kita akan diminta memasukkan password saat menggunakan SSH.
Tapi dengan membuat SSH Key, kita tidak perlu lagi memasukkan password terus-menerus setiap deploy maupun menggunakan SSH.
Lalu bagaimana cara membuat SSH Key?
Caranya…
Buka Terminal, lalu ikuti perintah ini:
# Install ssh client, jika kamu belum menginstalnya
sudo apt-get install openssh-client
Buatlah sebuah direktori atau folder baru di dalam home
dengan nama .ssh
. Ikuti perintah ini:
cd && mkdir .ssh && cd .ssh
Perintah tersebut akan membuat direktori .ssh
,
lalu masuk ke dalamnya.
Selanjutnya, buatlah SSH Key dengan mengetik perintah berikut:
ssh-keygen -t rsa -q -C "For SSH" -f rsa_id
Ubah rsa_id
dengan nama SSH Key yang kamu inginkan.
Misalnya: dian
.
Perintah ini akan membuat file SSH Key baru di dalam
direktori ~/.ssh
.
Ada dua Key yang dibuat:
- Private Key berisi kunci private yang tidak boleh diketahui oleh siapapun;
- Public Key berisi kunci yang akan kita taruh di server;
Setelah itu, buat file config
di dalam direktori .ssh
dengan isi sebagai berikut:
Host HOST
Hostname HOST
Port 22
User USER
IdentityFile ~/.ssh/rsa_id
Silakan ubah:
HOST
dengan alamat atau domain server,- nomer port
22
dengan port SSH yang digunakan pada server, USER
dengan username CPanel,- dan
IdentityFile
dengan file SSH Key yang baru saja dibuat.
Contohnya seperti ini:
Belum tahu nomer port yang digunakan?
Tenang, nanti kita akan tahu setelah membuat repositori
dan kamu bisa edit lagi isi file config
.
Tapi umumnya port 64000
yang digunakan untuk SSH
di Shared Hosting.
Selanjutnya kita harus mengirimkan Public Key ke server.
Caranya ketik perintah ini:
ssh-copy-id -i rsa_id.pub [email protected]
Silakan ubah:
rsa_id.pub
dengan nama file Public Key milikmu;USER
dengan user CPanel;HOST.com
dengan alamat server.
Pada proses pengiriman ini, kita akan diminta memasukkan password. Silakan masukan password CPanel.
Terakhir, coba akses SSH Servermu dengan perintah ini:
Silakan ubah:
user
dengan username CPanel;host.com
dengan alamat server;
Maka hasilnya akan seperti ini:
Selamat! 🎉
Kita sudah berhasil menggunakan SSH dengan menggunakan Key.
Nanti, saat kita melakukan push ke server, kita tidak akan dimintai password lagi.
Berarti gak aman donk? karena gak masukin password…
Selama orang lain tidak punya Private Key yang ada di komputer kita, ia akan dimintai password.
Selanjutnya, agar server kita bisa mengambil (clone) repositori private dari Github, Gitlab, dan Bitbucket; maka kita harus menaruh Private Key di dalam server.
Sebenarnya caranya sama seperti yang sudah pernah kita bahas di:
- Cara Konfigurasi SSH Key untuk Github
- Cara Konfigurasi SSH Key untuk Gitlab
- Cara Konfigurasi SSH Key untuk Bitbucket
Buka Public Key yang ada di lokal (~/.ssh/id_rsa.pub
),
kemudian taruh di akun Github, Gitlab, atau Bitbucket.
Setelah itu, upload Private Key ke server hosting. Ini bisa kamu lakukan melalui FTP atau File Manager di CPanel.
Setelah itu, buat file ~/.ssh/config
di Server,
dengan isi seperti ini:
# GitLab.com server
Host gitlab.com
IdentityFile ~/.ssh/id_rsa
# Github
Host github.com
IdentityFile ~/.ssh/id_rsa
# Bitbucket
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
Silakan ubah id_rsa
dengan nama private Key milikmu.
Contohnya:
Setelah itu, coba akses server melalui SSH.
Ikuti perintah ini:
# buka server melalui SSH
ssh [email protected]
# tes SSH ke Github melalui server
ssh -T [email protected]
Jika berhasil muncul seperti ini…
…maka server kita sudah bisa terhubung dengan Github untuk melakukan clone maupun push ke repositori private.
Sampai di sini ada yang ditanyakan?
Kalau tidak, kita lanjut ke tahap deployment…
Membuat Repositori Git di CPanel
Silakan buka CPanel, kemudian buka menu Git.
Kalau tidak ada menu ini, berarti paket hosting yang kamu pilih tidak menyediakan fitur ini.
Setelah itu, silakan klik Create untuk membuat repositori baru.
Setelah itu, ada dua pilihan:
- Buat repositori kosong;
- Clone dari yang sudah ada di Github, Gitlab, maupun Bitbucket.
Jika ukuran repositorimu terlalu besar, saya sarankan pilih yang clone saja. Karena akan lama nanti saat di-push jika kita buat yang kosong.
Anggap saja saya ingin membuat repositori yang kosong, meskipun saya sudah upload reponya di Github.
Setelah itu, kita akan mendapatkan alamat URL dari repositori ini.
Mau pilih cara yang clone, maupun repo kosong.. Kita akan tetap mendapatkan alamat ini.
Simpan baik-baik alamat ini, karena akan kita gunakan untuk push.
Mari Kita Push!
Sebelum itu…
Silakan buka repo lokal yang kamu miliki dengan VS Code atau Terminal. Kemudian tambahkan alamat remote untuk repositori yang di CPanel.
Sebagai contoh, ini alamat remote repo CPanel milik saya:
ssh://[email protected]:64000/home/petaniko/petanikode
Tambahkan ke repo Hugo yang di lokal dengan perintah:
git remote add hosting ssh://[email protected]:64000/home/petaniko/petanikode
Note:
hosting
adalah nama remote, bisa juga menggunakanorigin
atau nama yang lain. Angka64000
adalah nomer port SSH yang digunakan. Nomer port ini yang harus kamu gunakan pada fileconfig
SSH.
Kemudian coba ketik perintah:
git remote -v
Jika tampil seperti ini, maka remote sudah berhasil ditambahkan.
Setelah itu, mari kita coba push!
Silakan ketik:
git push -u origin master
Ubah origin
dengan nama remote yang kamu buat tadi. Jika menggunakan hosting
,
maka perintahnya:
git push -u hosting master
Tunggulah sampai prosesnya selesai, maka semua file yang ada di lokal akan di-upload ke repositori yang ada di CPanel.
Setelah selesai, kamu bisa memeriksanya melalui File Manager di Cpanel.
Jika tampil seperti ini:
Berarti kita sudah berhasil melakukan push!
Tapi kok websitenya belum ter-deploy?
Ini karena kita belum memerintahkan server untuk melakukan Deploy.
Karena itu, langkah selanjutnya adalah:
Membuat File .cpanel.yml
File .cpanel.yml
adalah file dengan format YAML
untuk memberitahu server apa saja perintah-perintah
yang harus dikerjakan.
Perintah ini akan dieksekusi setelah kita melakukan push.
Cara kerjanya mirip seperti CI/DI, tapi tidak ada interface buat memantau log. Sehingga kurang cocok untuk disebut CI/DI.
Nah! untuk deploy Hugo, perintahnya seperti ini:
Pertama, build dulu websitenya
hugo --minify
Setelah itu, hasil build-nya dipindahkan ke public_html
atau www
.
cp public/* /home/username/public_html/
Bisa juga menggunakan rsync
seperti ini:
rsync -az public/* /home/username/public_html/ --delete
Udah itu saja!
Terakhir, jika ingin menghemat space dan melakukan backup ke Github kita bisa tambahkan perintah ini:
rm -rf public/
git push -u origin --all
Maka kita dapat membuat file .cpanel.yml
seperti ini:
---
deployment:
tasks:
- export DEPLOYPATH=/home/username/public_html/
- ./bin/hugo --minify
- rsync -az public/* $DEPLOYPATH --delete
- rm -rf public/
- git push -u origin --all
Silakan ubah username
dengan user CPanel milikmu.
File .cpanel.yml
ini harus ditaruh di dalam root direktori
pada repositori.
Perintah pertama adalah membuat variabel env yang berisi alamat PATH untuk deployment.
Perintah kedua melakukan build website dengan hugo --minify
.
Perintah hugo
memang belum ada di server. Nanti kita akan tambahkan.
Perintah ketiga melakukan copy dengan rsync
. Menurut saya lebih baik
menggunakan rsync
daripada cp
. Karena cara kerjanya lebih cerdas,
ia akan meng-copy file yang sudah diubah saja. Sedangkan cp
akan meng-overwrite
semua file.
Terakhir, kita menghapus hasil build untuk menghemat ruang penyimpanan di server dan melakukan push ke Github.
Jika kamu mencoba melakukan push sekarang, mungkin tidak akan berhasil.
Karena perintah hugo
belum ada di server.
Untuk mengatasi masalah ini, silakan lanjutkan dengan:
Menambahkan Binary Hugo di Server
Ada tiga cara yang bisa dilakukan:
- Membuka server dari SSH, lalu men-download Hugo dari sana;
- Menambahkan
paket node js atau npm
hugo-bin
; - Menambahkan sendiri file binary hugo di repositori.
Kamu akan pilih cara yang mana?
Kalau saya sih akan pilih cara yang ketiga, karena kalau upgrade versi bisa lebih mudah.
Tinggal tindih aja binary hugo yang ada di repo dengan yang baru.
Sementara untuk cara kedua, jika kamu sudah familiar dengan nodejs, kamu bisa pilih cara ini.
Oke…
Kita sepakati saja pilih cara yang ketiga.
Namun sebelum itu, silakan cek arsitektur prosesor yang digunakan di servermu.
Buka melalui ssh, kemudian ketik:
uname -a
Maka akan mendapatkan yang seperti ini:
Dari informasi tersebut, kita tahu kalau server yang digunakan adalah Linux 64 bit.
Maka kita harus men-download, binary Hugo yang 64 bit. Silakan download di https://github.com/gohugoio/hugo/releases
Setelah itu, buat folder bin
di dalam repositori dan
isi dengan file binary hugo
.
Selesai!
Sekarang coba commit dan lakukan push!
Setelah itu, coba buka CPanel. Masuk ke menu Git. Pilih repo dan klik Manage.
Lalu masuk ke menu Pull or Deploy, dan perhatikan di bagian Last Deployment Information.
Artinya, deployment berhasil!
Untuk membuktikannya, silakan buka alamat domain yang digunakan pada hostingan tersebut.
Apa Selanjutnya?
Selanjutnya tinggal update konten dan deploy dengan penuh semangat.
Hehehe…
Maksud saya, jika ada perubahan tinggal commit dan push saja ke server, maka akan otomatis ter-deploy.
Atau kamu bisa tambahkan notifikasi setiap kali selesai ter-deploy.
Misalnya menjalankan script tertentu, untuk mengirim SMS, email, Chat via Bot, dll.
Selamat mencoba!