Menghubungkan VPS (GCP) ke GitHub Actions untuk CI/CD#
Dokumen ini bertujuan menyiapkan koneksi aman antara server Virtual Machine VPS (Google Cloud Platform) dengan GitHub, sehingga GitHub Actions dapat menjalankan perintah di dalam server secara otomatis. Ini adalah fondasi untuk membangun pipa Continuous Integration / Continuous Deployment (CI/CD) tanpa perlu campur tangan manual setiap kali ada pembaruan kode.
1. Tahap Persiapan di VPS#
Di bagian ini, Anda akan membuat kunci SSH khusus untuk GitHub Actions dan mengizinkan kunci tersebut masuk ke server.
1.1 Login ke VPS#
Buka terminal lokal Anda, lalu sambungkan ke VPS:
ssh username@alamat_ip_vpsCatatan: Ganti
usernamedengan nama pengguna di VPS (misal:wildanfq) danalamat_ip_vpsdengan IP publik server Anda (misal:34.101.32.154).
1.2 Buat Pasangan Kunci SSH Khusus untuk GitHub#
Di dalam VPS, jalankan perintah berikut untuk membuat kunci baru:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github_actions_key -C "github-actions-vps" -N ""Penjelasan Perintah:
-t rsa$\rightarrow$ Jenis kunci menggunakan algoritma enkripsi RSA.-b 4096$\rightarrow$ Panjang kunci 4096 bit (standar keamanan tinggi).-f ~/.ssh/github_actions_key$\rightarrow$ Lokasi dan nama file kunci pribadi (private key), sedangkan kunci publiknya otomatis bernamagithub_actions_key.pub.-C "github-actions-vps"$\rightarrow$ Komentar untuk mengidentifikasi asal-usul kunci.-N ""$\rightarrow$ Passphrase kosong, wajib agar GitHub Actions dapat menggunakan kunci tanpa interaksi manual (tanpa meminta password).
Setelah perintah berhasil, sistem akan menghasilkan dua file baru di direktori ~/.ssh/:
github_actions_key(Private Key – Sangat Rahasia)github_actions_key.pub(Public Key – Boleh diketahui umum)
1.3 Pasang Public Key ke Authorized Keys Server#
Agar server mengizinkan login dari pemegang kunci tersebut, masukkan isi public key ke dalam file daftar otorisasi authorized_keys:
cat ~/.ssh/github_actions_key.pub >> ~/.ssh/authorized_keysPerintah di atas membaca public key dan menambahkannya ke baris paling bawah pada file authorized_keys. Hasilnya, siapa pun yang memegang private key yang cocok akan diizinkan masuk ke VPS sebagai user Anda.
1.4 Ambil dan Simpan Teks Private Key#
Tampilkan private key di layar terminal untuk disalin:
cat ~/.ssh/github_actions_keyAksi: Salin (Copy) seluruh teks yang muncul di terminal secara utuh, mulai dari baris pembuka hingga baris penutup:
-----BEGIN OPENSSH PRIVATE KEY-----
...
... [Isi Kunci Rahasia Anda] ...
...
-----END OPENSSH PRIVATE KEY-----Simpan salinan ini di tempat aman (misal notepad sementara) karena akan dimasukkan ke fitur GitHub Secrets pada tahap berikutnya.
PENTING: Jangan pernah membagikan private key ini kepada siapa pun. Kunci ini bersifat rahasia dan memegang hak akses penuh ke server Anda.
2. Tahap Konfigurasi di GitHub#
Setelah VPS siap dengan kuncinya, langkah selanjutnya adalah menyimpan informasi kredensial koneksi tersebut dengan aman di dalam repositori GitHub Anda.
2.1 Buka Halaman Secrets Repositori#
- Buka browser, masuk ke akun GitHub Anda, lalu buka repositori proyek Anda.
- Klik tab Settings yang berada di barisan menu atas.
- Di menu sebelah kiri, gulir ke bawah lalu pilih Secrets and variables $\rightarrow$ Actions.
- Klik tombol New repository secret yang berwarna hijau.
2.2 Buat Tiga Secrets yang Diperlukan#
Anda wajib membuat tiga buah secret dengan ketentuan nama (Name) dan nilai (Secret) sebagai berikut:
| Nama Secret (Name) | Nilai (Secret) | Keterangan |
|---|---|---|
VPS_HOST | Alamat IP publik VPS Anda (contoh: 34.101.32.154) | Alamat server target yang akan dihubungi oleh GitHub |
VPS_USERNAME | Nama user SSH VPS Anda (contoh: wildanfq) | User yang akan mengeksekusi perintah di dalam VPS |
VPS_SSH_KEY | Isi teks private key dari langkah 1.4 secara utuh | Kunci rahasia untuk proses otentikasi masuk tanpa password |
Cara Membuat Masing-Masing Secret:
- Klik tombol New repository secret.
- Isi kolom Name dengan variabel di atas (wajib huruf besar semua, misal:
VPS_HOST). - Isi kolom Value / Secret dengan datanya masing-masing.
- Klik tombol Add secret.
- Ulangi langkah ini hingga ketiga variabel di atas terdaftar.
Peringatan: Pastikan private key dimasukkan persis, termasuk baris
-----BEGIN ...dan-----END .... Jangan sampai ada karakter atau spasi tambahan di awal maupun di akhir teks kunci.
3. Tahap Membuat Workflow GitHub Actions (Uji Koneksi)#
Sebelum mengimplementasikan otomatisasi deployment yang rumit (seperti Docker atau Git Pull), buatlah sebuah skrip workflow sederhana untuk memastikan GitHub Actions benar-benar bisa menembus SSH ke VPS Anda.
3.1 Struktur Folder Workflow#
Di komputer lokal Anda (buka terminal pada folder proyek aplikasi lokal Anda), buat struktur direktori khusus GitHub Actions dengan perintah:
mkdir -p .github/workflows3.2 Buat File Workflow#
Buat sebuah file baru bernama test-ssh.yml di dalam direktori tersebut:
touch .github/workflows/test-ssh.yml3.3 Isi Kode Workflow#
Buka file test-ssh.yml menggunakan text editor (misal VS Code, Nano, atau Vim), lalu tempelkan kode clean format di bawah ini:
name: Test SSH Connection to VPS
on:
push:
branches:
- main
jobs:
test-ssh:
runs-on: ubuntu-latest
steps:
- name: SSH into VPS and run a command
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USERNAME }}
key: ${{ secrets.VPS_SSH_KEY }}
port: 22
script: |
echo "Koneksi berhasil dari GitHub Actions!"
whoami
pwd
ls -laPenjelasan Kode (Workflow Breakdown):
name$\rightarrow$ Nama workflow yang akan muncul di tab Actions GitHub.on: push: branches: [ main ]$\rightarrow$ Pemicu otomatis. Skrip akan berjalan setiap kali ada aktivitas push kode ke branchmain.jobs$\rightarrow$ Kumpulan tugas yang didefinisikan. Di sini kita membuat satu tugas bernamatest-ssh.runs-on: ubuntu-latest$\rightarrow$ Lingkungan tempat GitHub mengeksekusi perintah (menggunakan mesin virtual Ubuntu terbaru milik GitHub).steps$\rightarrow$ Urutan langkah pengerjaan.uses: appleboy/ssh-action@v1.0.3$\rightarrow$ Menggunakan pustaka action resmi pihak ketiga (oleh Appleboy) yang berfungsi menangani protokol remote SSH.with$\rightarrow$ Parameter input untuk mengakses rahasia yang telah disimpan sebelumnya di GitHub Secrets:host$\rightarrow$ Memanggil nilai dari secretVPS_HOST.username$\rightarrow$ Memanggil nilai dari secretVPS_USERNAME.key$\rightarrow$ Memanggil nilai dari secretVPS_SSH_KEY.port: 22$\rightarrow$ Port standar layanan SSH.script$\rightarrow$ Perintah dasar Linux yang akan langsung dikirim dan dieksekusi di dalam terminal VPS setelah proses jabat tangan SSH berhasil (echo, cek user aktifwhoami, lokasi folderpwd, dan daftar filels -la).
3.4 Commit dan Push ke GitHub#
Simpan file workflow tersebut, kemudian kirimkan (push) perubahan ke repositori remote GitHub Anda:
git add .github/workflows/test-ssh.yml
git commit -m "chore: menambahkan workflow uji koneksi SSH ke VPS"
git push origin main4. Pengujian dan Verifikasi Hasil#
Setelah proses push selesai, sistem otomasi GitHub secara otomatis mendeteksi file tersebut dan langsung menjalankan tugasnya.
4.1 Memantau Proses di GitHub#
- Buka repositori Anda di platform GitHub lewat browser.
- Klik tab Actions (berada di sebelah tab Pull Requests).
- Anda akan melihat alur kerja bernama “Test SSH Connection to VPS” sedang berjalan dengan indikator lingkaran kuning berputar.
- Klik pada nama commit atau nama workflow tersebut untuk masuk ke halaman detail.
- Klik menu job
test-sshdi bilah kiri untuk memantau log pengerjaan secara langsung (live log).
4.2 Interpretasi Hasil Akhir#
- Indikator Centang Hijau (Success): Semua tahapan berhasil dilewati tanpa kendala. Jika Anda mengklik bagian dropdown log pada menu
SSH into VPS and run a command, Anda akan melihat teks output dari server Anda berupa nama user (wildanfq), lokasi direktori awal, dan daftar file di dalam VPS. Ini menandakan jalur pipa CI/CD Anda sudah sukses terhubung. - Indikator Silang Merah (Failed): Proses otomatisasi terhenti karena ada kendala teknis. Jika ini terjadi, periksalah beberapa poin berikut:
- Apakah IP publik VPS di
VPS_HOSTsudah sesuai? - Apakah baris pembuka/penutup pada kunci rahasia
VPS_SSH_KEYikut tersalin utuh tanpa spasi sisa? - Apakah aturan firewall pada Google Cloud Platform (Port 22) menutup akses masuk bagi publik?