Selamat tinggal unggah file ZIP via FTP! Belajar bagaimana mendorong kode (push) ke GitHub dan server langsung ter-update otomatis.
Daftar Isi
- TL;DR (Ringkasan Eksekutif)
- Tanya-Jawab Cepat (Q&A Terminologi)
- Tabel Komparasi Ringkas: FTP vs CI/CD Actions
- 1. Belajar DevOps: Persiapan Server dan Pembuatan SSH Keys
- Langkah-Langkah Konfigurasi SSH Keys (Terminal)
- 2. Konfigurasi Keamanan GitHub Secrets
- 3. Script Workflow CI/CD (.github/workflows/deploy.yml)
- Struktur Direktori Workflow
- Penjelasan Perintah YAML
- Tips Belajar DevOps: Troubleshooting Error Deployment
- Glosarium Singkat (Terminologi DevOps)
- 📚 Referensi Otoritas dan Outbound Links
TL;DR (Ringkasan Eksekutif)
- Transisi metode upload manual (FTP) ke eksekusi proaktif menggunakan GitHub Actions.
- Praktik mengamankan server menggunakan SSH Keys tanpa password dan penerapan non-root user.
- Injeksi kredensial peladen yang aman melalui GitHub Secrets.
- Penulisan alur kerja otomatis (YAML) berserta kapabilitas rollback instan yang akan menarik (pull) dan membangun ulang (build) kode di VPS setiap kali pengembang memicu
git push.
Tanya-Jawab Cepat (Q&A Terminologi)
J: CI/CD adalah praktik DevOps untuk mengotomatisasi integrasi dan pengiriman kode ke server produksi tanpa campur tangan manual.
J: Layanan komputasi cloud bawaan GitHub yang menjalankan skrip terprogram (runner) setiap kali ada mutasi kode di repositori.
J: SSH Keys memberikan GitHub akses mesin-ke-mesin tanpa password, sedangkan Secrets menjaga kunci tersebut terenkripsi rapat dari publik.
CI/CD (Continuous Integration / Continuous Deployment) adalah budaya dan praktik mutlak dalam kultur DevOps untuk mendistribusikan kode tanpa campur tangan manusia. Selamat tinggal hari-hari di mana Anda mengunggah file `.zip` atau menggunakan FileZilla secara manual!
Tabel Komparasi Ringkas: FTP vs CI/CD Actions
| Aspek Deployment | Tradisional (FTP / FileZilla) | Modern (CI/CD) |
|---|---|---|
| Kecepatan Eksekusi | Sangat lambat (Unggah file satu per satu) | Instan (Hanya hitungan detik via Git) |
| Risiko Human Error | Sangat tinggi (Rentan salah timpa folder) | Nihil (Dieksekusi otomatis oleh mesin) |
| Penanganan Downtime | Downtime panjang jika terjadi error fatal | Otomatis di-rollback dalam hitungan detik |
| Jejak Audit Keamanan | Tidak ada riwayat mutasi kolaborasi | Terekam detail di histori commit Git |
1. Belajar DevOps: Persiapan Server dan Pembuatan SSH Keys
Pembuatan SSH Keys adalah proses komputasi kriptografi untuk men-generate sepasang kunci digital (publik dan privat) guna mengamankan akses otentikasi server jarak jauh tanpa menggunakan password tradisional.
Agar GitHub Actions dapat "masuk" ke VPS Anda dan mengeksekusi perintah terminal, kita membutuhkan kunci kriptografi. Praktik Keamanan (Security Best Practice): Jangan pernah mengeksekusi deploy menggunakan user root. Buatlah user khusus (misal: deployer) dengan hak akses terbatas yang hanya memiliki kewenangan pada direktori public_html.
Langkah-Langkah Konfigurasi SSH Keys (Terminal)
- Generate Key: Jalankan perintah pembuatan kunci di VPS menggunakan algoritma ed25519 (sebagai user aplikasi).
- Bypass Passphrase: Kosongkan sandi (tekan Enter dua kali) agar GitHub dapat terhubung secara non-interaktif tanpa prompt kata sandi.
- Otorisasi Kunci Publik: Masukkan Public Key yang dihasilkan ke dalam daftar file
authorized_keysdengan hak akses aman (chmod 600). - Ekspor Kunci Privat: Tampilkan teks dari Private Key untuk disalin secara utuh ke dalam GitHub Secrets.
ssh-keygen -t ed25519 -C "github-actions-deploy"
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519
2. Konfigurasi Keamanan GitHub Secrets
GitHub Secrets adalah brankas enkripsi bawaan repositori yang berfungsi menyimpan variabel kredensial sensitif (seperti IP Server dan Private Key) agar terisolasi dari kode publik dan log eksekusi.
Salin seluruh teks Private Key dari langkah sebelumnya (dimulai dari baris -----BEGIN OPENSSH PRIVATE KEY-----). Kemudian, masuk ke repositori GitHub Anda:
- Navigasi ke menu Settings > Secrets and variables > Actions.
- Klik tombol New repository secret.
- Buat tiga rahasia (secrets) berikut:
SERVER_IP: Alamat IP publik VPS Anda (misal: 192.168.1.10)SERVER_USERNAME: Nama user di VPS Anda (misal: ubuntu atau infokoding)SSH_PRIVATE_KEY: Tempelkan kunci privat yang baru saja Anda salin.
3. Script Workflow CI/CD (.github/workflows/deploy.yml)
Script Workflow (YAML) adalah berkas konfigurasi deklaratif yang berisi set instruksi terprogram bagi mesin runner GitHub Actions untuk melakukan kompilasi dan penyebaran kode ke server produksi.
Struktur Direktori Workflow
Selanjutnya, Anda harus mendefinisikan instruksi apa saja yang harus dieksekusi oleh bot GitHub di server Anda. Buat sebuah file baru tepat di direktori proyek lokal Anda pada jalur .github/workflows/deploy.yml.
Penjelasan Perintah YAML
name: Deploy Aplikasi ke VPS Produksi
on:
push:
branches:
- main # Memicu deployment setiap ada push ke branch main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Eksekusi Perintah Deployment via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
# 1. Navigasi ke direktori aplikasi & simpan hash commit saat ini untuk rollback
cd /home/infokoding/public_html
OLD_HASH=$(git rev-parse HEAD)
# 2. Tarik kode terbaru & rollback otomatis jika gagal (|| OR operator)
git pull origin main || { git reset --hard $OLD_HASH; exit 1; }
# 3. Instal dependensi PHP (Abaikan jika menggunakan Node.js/Go)
composer install --no-dev --optimize-autoloader || { git reset --hard $OLD_HASH; exit 1; }
# 4. Hapus cache atau restart service
php spark cache:clear
sudo systemctl restart php8.2-fpm
Begitu Anda melakukan commit dan push berkas YAML ini, buka tab Actions di GitHub untuk melihat pipeline Anda menyala hijau seketika!
Tips Belajar DevOps: Troubleshooting Error Deployment
- Host key verification failed: Pastikan Anda tidak menggunakan Strict Host Key Checking yang agresif atau pastikan SSH Key memiliki hak akses yang benar. Plugin
appleboy/ssh-actionbiasanya menangani hal ini otomatis. - Permission Denied (publickey): Verifikasi apakah kunci publik (
.pub) sudah dimasukkan keauthorized_keysdengan hak akses (chmod 600). Pastikan Anda menyalin seluruh isi kunci privat tanpa spasi ekstra di GitHub Secrets. - Perintah Git tertolak (Merge Conflicts): Jangan pernah mengedit kode langsung di dalam VPS produksi! Ini akan membuat perintah
git pullbentrok. Lakukangit reset --hard origin/mainjika server Anda berantakan. - Koneksi Timeout (Terblokir UFW): Jika Anda menggunakan Firewall (UFW) yang sangat restriktif, akses SSH dari GitHub bisa diblokir. Secara praktis, izinkan lalu lintas port 22 global (
sudo ufw allow ssh) dengan tetap mengandalkan keamanan lapis Private Key kriptografi, atau gunakan API meta GitHub untuk melakukan *whitelist* rentang IP GitHub Actions dinamis ke dalam aturan sistem operasi Anda.
Glosarium Singkat (Terminologi DevOps)
- SSH Keys
- Pasangan kunci kriptografi (publik dan privat) yang digunakan untuk otentikasi log masuk jarak jauh tanpa menggunakan password yang rentan dibobol (brute-force).
- YAML (.yml)
- Format serialisasi data yang sangat mudah dibaca manusia, menjadi standar de-facto industri untuk menulis file konfigurasi deklaratif alur kerja (workflow) di sistem seperti Docker, Kubernetes, dan GitHub Actions.
- VPS (Virtual Private Server)
- Mesin virtual mandiri di cloud yang memberikan Anda hak akses root penuh untuk menginstal dan mengonfigurasi aplikasi dasar, berbeda dengan Shared Hosting yang dibatasi oleh penyedia.
📚 Referensi Otoritas dan Outbound Links
Untuk mendalami skema penulisan dan batasan penggunaan runners, Anda dapat merujuk langsung pada dokumentasi resmi dari GitHub:
Ditulis oleh Rusmawan Abdullah Sani., S.Kom (GitHub)
Berpengalaman luas dalam pengembangan perangkat lunak dan arsitektur sistem berbasis web modern. Rusmawan memiliki dedikasi tinggi untuk merancang struktur kode yang bersih (Clean Code) dan mentransfer pengetahuan teknis berstandar industri kepada para pengembang muda di Indonesia.