Cara Commit Otomatis ke GitHub di CyberPanel Tanpa Git Manager

Cara alternatif untuk melakukan commit otomatis ke GitHub untuk website-website yang ada di CyberPanel dengan GitHub Deploy Keys.
On this page

Saat saya mencoba menggunakan fitur bawaan CyberPanel Git Manager, saya menemui banyak permasalahan. Salah satu diantaranya adalah error yang mengatakan: “You are not authorized to access this resource”. Hal tersebut selalu terjadi meskipun saya sudah mengikuti panduan komunitas.

Selain itu, dengan mengikuti panduan komunitas dengan memberikan SSH key yang digenerate oleh CyberPanel ke akun GitHub utama juga akan memberikan akses ke semua repositori milik akun tersebut. Hal ini tentu saja tidak baik jika suatu saat seseorang mampu menanamkan backdoor / webshell di aplikasi website Anda. Dan sebagai informasi tambahan, konfigurasi CyberPanel secara default memberikan akses read kepada publik ke folder .git yang ada di folder public_html.

Di artikel ini, saya ingin berbagi cara alternatif untuk melakukan commit otomatis ke GitHub untuk website-website yang ada di CyberPanel (ditambah dengan metode yang lebih baik dengan memanfaatkan fitur GitHub Deploy keys daripada global SSH access key ke akun utama).

Informasi Penting

  1. Cara ini tidak mensupport fitur pull / webhook seperti yang tersedia di fitur bawaan CyberPanel Git Manager. Metode ini hanya melakukan commit dan push file-file website yang berubah ke remote git repositori.
  2. Direktori kerja berbeda dengan CyberPanel Git manager. Repositori root official CyberPanel Git Manager berada di /home/USERNAME/public_html, sedangkan metode ini menggunakan $HOME user direktori (/home/USERNAME).
  3. Sehubungan dengan point ke-2 diatas, JANGAN menggunakan kedua metode secara bersamaan di satu website! Pilih salah satu yang sesuai dengan style Anda.
  4. Selalu lalukan test di testing / staging environment sebelum mengimplementasikannya ke production environment!
  5. Fitur backup official dari CyberPanel hanya melakukan backup folder public_html, vhost config dan database saja. Jadi jika suatu hari anda melakukan restore website Anda, Anda perlu melakukan semua langkah ini lagi dari awal.

Konfigurasi

Saya beransumsi bahwa Anda sudah memiliki akun GitHub dan memiliki server CyberPanel yang berjalan normal tanpa kendala apapun.

Buat GitHub Deploy Key

Login ke server CyberPanel anda menggunakan SSH milik akun website yang Anda (atau buat website baru jika Anda belum memiliki website di server CyberPanel Anda).

Buat public & private key untuk kita berikan ke repositori GitHub yang nantinya akan kita buat debgab menjalankan perintah:

1ssh-keygen -t rsa -f ~/.ssh/example_com_github_rsa -C "example.com github auto push"

Ubah example_com_github_rsa dengan nama yang Anda inginkan. Saat muncul command yang meminta untuk memasukan passpharse key, kosongkan saja karena kita ingin key-pair tersebut digunakan tanpa password.

Kemudian, buat repositori baru di GitHub untuk website Anda, pergi ke Repositori -> Settings -> Deploy keys -> Add deploy keys.

Tampilan repositori baru Github

GitHub Deploy keys

menambahkan GitHub deploy key baru

Paste isi konten public key (di contoh artikel adalah ~/.ssh/example_com_github_rsa.pub) ke textarea Key field dan pastikan Allow write access tercentang.

Manfaatkan Fitur SSH Config File

Sekarang, tambahkan (atau buat jika filenya belum ada) baris berikut ini ke SSH config file milik user bersangkutan di ~/.ssh/config.

Host example_com
    HostName github.com
    User git
    IdentityFile ~/.ssh/example_com_github_rsa

Keterangan dari konfigurasi diatas: Host example_com adalah sebuah alias. Konfigurasi tersebut memerintahkan SSH untuk melakukan koneksi ke github.com menggunakan user git dengan private key ~/.ssh/example_com_github_rsa saat perintah SSH option ke example_com dijalankan.

Cek konfigurasi dan koneksi SSH diatas dengan perintah ssh -T example_com. Seharusnya Anda menerima pesan bahwa koneksi Anda ke GitHub berhasil: “Hi your_github_username/example-repo! You’ve successfully authenticated, but GitHub does not provide shell access.”.

Membuat File .gitignore

Karena metode ini tidak menggunakan public_html sebagai repositori root, melainkan menggunakan direktori $HOME milik user, Anda perlu melakukan exclude file-file yang digenerate oleh CyberPanel, seperti: ~/bash_history, ~/logs folder, dll.

Buat file ~/.gitignore dan isi dengan konfigurasi berikut:

# Ignore hidden files and directory
.*
!/.gitignore
!/public_html/.*

# Ignore backup and logs directory
/backup/
/logs/

# Optional, but recommended:
# Ignore WordPress upload folder
/public_html/wp-content/uploads
# if you want to ignore wp-config.php file
/public_html/wp-config.php

Koneksi Ke Remote Git Repositori

Sekarang, saatnya membuat koneksi ke remote Git repositori, jalankan perintah:

1git init
2git remote add origin example_com:your_git_username/example-repo.git

INFORMASI PENTING pada perintah git remote add diatas: example_com harus cocok atau sesuai dengan variable Host yang ada di file ~/.ssh/config yang kita buat sebelumnya. Jangan lupa ubah juga your_git_username/example-repo dengan repositori milik Anda.

Cek apakah konfigurasi .gitignore yang kita buat sebelumnya sudah sesuai dengan apa yang kita inginkan dengan perintah git status. Kurang lebih hasil output git status menyatakan bahwa .gitignore dan public_html masuk ke untracked files.

perintah git status

First Commit

Sebelum mengimplementasikan ke proses otomatisasi, kita perlu melakukan first commit, membuat remote branch (defaultnya: main) dan melakukan push ke remote repositori. Langkah ini juga akan membantu kita melakukan verifikasi apakah semua berjalan sesuai dengan apa yang kita inginkan.

1# buat git config user dan email jika kita belum pernah mengkonfigurasi sebelumnya
2git config user.email "[email protected]"
3git config user.name "Your Name"
4
5git add .
6git commit -m "first commit"
7git branch -M main
8git push -u origin main

Setelah melakukan perintah diatas, cek repositori GitHub anda, file-file website Anda seharusnya sudah ada disana.

Otomatisasi

Buat bash script sederhana untuk mengeksekusi perintah git commit dan push. Letakan script tersebut dibawah $HOME direktori milik user (kecuali folder public_html):

1#!/bin/bash
2
3cd ~/
4git add .
5git commit -m "Updated: `date +'%Y-%m-%d %H:%M:%S'`"
6git push origin main

Terakhir, pergi ke CyberPanel Web UI, masuk ke halaman Crob Job milik website yang sudah kita konfigurasi, tambahkan cron job untuk mengesekusi script bash yang sudah kita buat diatas:

/bin/bash /home/example.com/backup.sh >/dev/null 2>&1

Ubah example.com ke nama domain milik Anda, saya menyarankan untuk tidak men-setting cron job ini terlalu sering. Menurut saya, 2x sehari sudah lebih dari cukup.