Menghubungkan Private GitHub Repository dengan Web Hosting cPanel untuk Otomatisasi Proses Deployment Web


Pendahuluan

Artikel ini ditulis berdasarkan pengalaman saya ketika ingin menghubungkan hosting cPanel website pribadi saya (https://www.drianium.com/) dengan private repository GitHub yang berisikan file konfigurasi web tersebut. Ini semua berangkat dari 'kemalasan' saya, di mana saya melihat ketidakefisienan proses deploy web secara manual. Dalam proses deploy web secara manual, hal yang harus dilakukan antara lain:

  1. Mengkompresi file konfigurasi web dalam format *.zip.

  2. Setelah jadi file *.zip, langkah selanjutnya yakni melakukan upload file tersebut ke cPanel dengan tool File Manager.

  3. File yang sudah ter-upload, selanjutnya dilakukan extract pada folder public_html sehingga file konfigurasi web dapat secara otomatis dibaca oleh cPanel dan membuat tampilan web berubah.

Memang, langkah-langkah yang dilakukan untuk deploy web ke web hosting cPanel secara manual tidak terlalu banyak. Namun, ketika saya ingin melakukan update untuk memperbaharui beberapa fitur atau memperbaiki bug yang ada pada web, saya harus mengulangi langkah-langkah di atas secara iteratif sesuai perubahan yang saya lakukan. Pada bagian ini lah saya bilang bahwa proses deploy web secara manual tidak efisien, karena akan menghasilkan banyak file *.zip pada komputer lokal yang digunakan dalam proses pembaharuan web. Ini bisa terlihat dari gambar di bawah ini.

Banyakanya file *.zip yang dihasilkan apabila dilakukan pembaharuan web

Setelah saya mengeksplorasi fitur-fitur yang ada di cPanel, saya melihat ada fitur yang berpeluang untuk mengatasi permasalahan tersebut. Fitur tersebut adalah Git™ Version Control dan SSH (Secure Shell). Git sendiri merupakan sebuah distributed version control system yang memungkinkan pengembang melacak perubahan dalam source code perangkat lunak dan berkolaborasi dengan tim secara efisien. GitHub merupakan salah satu platform Git berbasis web yang populer digunakan saat ini. Platform ini memungkinkan pengembang untuk menyimpan, mengelola, dan berkolaborasi dalam pengembangan perangkat lunak menggunakan fitur seperti version control, manajemen proyek, pelacakan isu, dan banyak lagi.

Dalam GitHub dikenal repository. Repository merupakan tempat di mana proyek perangkat lunak disimpan dan dikelola. Setiap repository biasanya berisi berkas-berkas yang membentuk source code project, bersama dengan riwayat perubahan (commit history) yang mencatat semua perubahan yang dilakukan pada kode tersebut. Terdapat dua jenis utama repository pada GitHub, public dan private. Dalam artikel ini, digunakan private repository karena saya tidak ingin membagikan source code website saya yang memuat beberapa key API. Maka dari itu, untuk menghubungkan hosting cPanel dengan private repository GitHub dapat menggunakan SSH. SSH adalah protokol jaringan yang digunakan untuk mengamankan komunikasi data antara dua perangkat, sering digunakan untuk mengakses dan mengelola perangkat remote secara aman. SSH menggunakan key publik dan pribadi untuk otentikasi, yang membuatnya lebih aman daripada HTTPS yang menggunakan username dan password.

Berikut merupakan cara untuk menghubungkan web hosting cPanel dengan Private Repository GitHub melalui protokol jaringan SSH dan otomatisasi proses deploy web ke cPanel.


Mengatur Akses ke Private Repository

  1. Pastikan fitur terminal dan SSH pada akun cPanel sudah aktif, jika belum maka Anda dapat mengaktifkannnya melalui WHM. Jika paket layanan hosting yang Anda beli tidak termasuk WHM, maka Anda harus menghubungi pengelola hosting untuk mengaktifkannya.

  2. Masuk ke fitur Terminal pada cPanel.

    Membuat key SSH dengan perintah di bawah ini. Pastikan Anda mengganti username dengan username GitHub Anda sendiri.

     ssh-keygen -t rsa -b 4096 -C "username@github.com"
    

    Perintah ini terdiri dari beberapa bagian. Jika Anda mengubah bagian apa pun dari perintah tersebut maka akan berpengaruh pada kinerja kunci SSH Anda.

    • Flag -t menentukan jenis algoritma untuk kunci SSH Anda.

    • Flag -f menentukan nama untuk kunci publik dan privat Anda. Dengan flag -f, tidak perlu menentukan nama kunci publik karena akan selalu memiliki nama yang sama dengan kunci privat, tetapi dengan .pub sebagai akhiran.

    • Flag -b menentukan ukuran kunci SSH dalam bit.

    • Flag -C menentukan komentar yang akan ditambahkan ke kunci publik Anda. Ini membantu dalam mengidentifikasi kunci publik mana yang telah Anda otorisasi dalam sistem remote, sehingga umumnya disarankan untuk menambahkan alamat email Anda sebagai komentar.

  3. Selanjutnya, Anda akan diminta untuk memberi nama file key SSH dan akan tersimpan pada direktori /home/username/.ssh . Secara default, nama file adalah id_rsa. Jika Anda tidak ingin memberi nama file key SSH dan ingin default, maka langsung tekan Enter saja.

  4. Setelah itu, Anda diminta untuk memasukkan passphrase . Ini merupakan password yang perlu dimasukkan setiap kali Anda melakukan perintah git nantinya. Saya sarankan untuk membiarkannya kosong dengan cara langsung tekan Enter sebanyak dua kali, karena jika Anda memberi password, Anda tidak bisa melakukan perintah Git pada fitur Git™ Version Control di UI cPanel. Anda hanya bisa melakukan perintah Git melalui terminal saja. Jika berhasil, maka akan muncul tampilan seperti ini.

  5. Buat file config pada folder .ssh perintah touch ./.ssh/config , kemudian berikan akses 700 pada file yang sudah dibuat dengan perintah chmod 0700 ./ssh/config. Akses 700 berarti hanya pemilik file yang memiliki hak penuh untuk membaca, menulis, dan mengeksekusi file tersebut, sementara grup pengguna lain dan pengguna lain di luar grup tidak memiliki hak akses apa pun terhadap file tersebut.

  6. Masuk ke direktori .ssh dengan perintah cd .ssh, kemudian edit isi dari file config yang sudah dibuat menggunakan vim editor dengan perintah vi config. Setelah masuk ke vim editor, tekan i untuk masuk ke mode insert. Masukkan kode berikut dengan cara klik kanan -- paste (jangan gunakan CTRL+C atau CTRL+V), ganti namakeySSH dengan nama key SSH yang Anda buat pada langkah nomor 3.

     Host *
     IdentityFile ~/.ssh/namakeySSH
    

    Keluar dari mode insert dengan tekan Esc, kemudian langsung ketikkan :wq untuk menyimpan hasil peng-edit-an file config.

  7. Selanjutnya, masuk pada private repository GitHub yang ingin Anda hubungkan dengan cPanel. Pada menu repository, klik Setting.

    Pada side menu Setting klik Deploy keys. Selanjutnya klik Add deploy key pada bagian pojok kanan atas halaman Deploys keys. Kembali ke terminal cPanel, gunakan perintah cat ./.ssh/namakeySSH.pub untuk melihat key Publik. Salin key tersebut dan paste -kan pada kolom Key. Untuk kolom Title, beri nama sesuai keinginan Anda. Ceklis Allow write access jika Anda ingin mengizinkan cPanel melakukan push pada repository tersebut, jika tidak di ceklis maka push hanya bisa dilakukan dari GitHub ke cPanel. Klik Add key.

  8. Kembali ke terminal cPanel, gunakan perintah ssh -T git@github.com. Jika berhasil, maka akan muncul tulisan berikut.

    Hi <username GitHub Anda>/<nama repo yang Anda hubungkan>! You've successfully authenticated, but GitHub does not provide shell access.

  9. Pada cPanel, masuk ke fitur Git™ Version Control.

    Klik tombol Create, kemudian akan muncul form yang perlu diisi. Pada bagian ini, Anda cukup mengisi kolom Clone URL. Clone URL dapat Anda peroleh dari private repository GitHub Anda. Setelah Anda mengisi kolom tersebut, semua kolom secara otomatis akan terisi juga. Kemudian klik tombol Create pada bagian bawah.

    Jika berhasil, maka Anda akan arahkan secara otomatis ke halaman List Repositories.

  10. Klik Manage pada repository yang baru Anda tambahkan untuk memilih branch dan melakukan Pull atau Deploy.


Otomatisasi Proses Deployment Web ke cPanel

Otomatisasi proses deployment web ke cPanel hanya bisa dilakukan dengan skema Push Deployment seperti yang disajikan pada gambar berikut ini.

Pada skema tersebut, pada komputer lokal, Anda akan melakukan pull request ke remote repository (dalam artikel ini adalah private repository GitHub yang sudah Anda konfigurasi di bagian sebelumnya). Kemudian, Anda dapat langsung melakukan push ke repositori yang ada pada cPanel. Sistem cPanel akan otomatis menerapkan perubahan yang Anda lakukan ke repositori yang dikelola cPanel, sehingga tampilan web Anda akan otomatis berubah sesuai push yang Anda lakukan terakhir.

Untuk melakukan otomatisasi ini caranya cukup mudah, Anda cukup membuat file bernama .cpanel.yml pada top-level direktori web Anda. Kemudian pada file tersebut, Anda dapat melakukan konfigurasi dengan isian sebagai berikut.

---
deployment:
  tasks:
    - export DEPLOYPATH=/home/<username cpanel>/public_html/
    - /bin/cp <file.extension) $DEPLOYPATH # Untuk single file
    - /bin/cp <more file.extension) $DEPLOYPATH # Untuk single file lain
    - /bin/cp -R <directory name> $DEPLOYPATH # Untuk folder
    - /bin/cp -R <directory name> $DEPLOYPATH # Untuk folder lain

Ubah <username cpanel> dengan username cPanel yang Anda gunakan. Ubah juga <file.extension> dengan file yang ingin Anda clone ke public_html, misalnya index.html. Anda dapat menambahkan file lain pada baris selanjutnya, misalnya Anda ingin menambahkan styles.css, maka ganti <more file.extension> dengan styles.css. Hal serupa juga bisa Anda lakukan untuk direktori, cukup menambahkan flag -R sebelum nama direktori. Anda dapat menambahkan beberapa direktori sekaligus juga, sama dengan file.

Untuk pertama kali setelah mengubah konfigurasi .cpanel.yml, Anda perlu melakukan pull request & deploy secara manual dengan cara skema pada gambar berikut ini.

Anda melakukan push ke repository GitHub, kemudian pada Git™ Version Control, Anda melakukan pull request dengan menekan tombol Update from remote, kemudian tekan Deploy HEAD Commit untuk melakukan deployment.

Selanjutnya, Anda tidak perlu melakukannya secara manual karena sistem cPanel akan secara otomatis melakukan command yang ada paad .cpanel.yaml.


Referensi