Shared hosting cPanel masih jadi pilihan banyak developer karena harganya terjangkau dan mudah dikelola. Masalahnya, proses deploy-nya biasanya manual - upload file lewat FTP atau File Manager satu per satu, lalu jalankan migration sendiri. Dengan GitHub Actions, semua itu bisa diotomatisasi. Setiap kali push ke branch main, server langsung pull code terbaru, install dependency, build assets, dan jalankan migration.
Baca juga artikel sebelumnya untuk tau Cara Deploy Web Laravel Ke Hosting Cpanel
TL;DR
- Clone repo langsung ke folder
public_html - Tambah
.htaccessdi root project supaya traffic diarahkan kepublic/ - Install Node.js via NVM di terminal cPanel
- Generate SSH key di server, simpan private key ke GitHub Secrets
- Buat file
.github/workflows/deploy.yml, push, dan selesai
Step 1. Clone Project ke public_html
Buka cPanel → Terminal, lalu clone repo langsung ke folder public_html. Karena public_html adalah web root default domain, kita pakai folder ini sebagai project root Laravel.
|
|
Tip: Backup dulu isi
public_htmlkalau ada file penting di sana sebelum di-remove.
Step 1.1: tambahan jika repo yang digunakan adalah repo private
Jika repo yang digunakan adalah private, clone via HTTPS akan minta autentikasi. Cara paling proper di server adalah pakai SSH deploy key.
Generate SSH key di cPanel Terminal:
|
|
Tekan Enter saat diminta passphrase (biarkan kosong).
Tampilkan public key-nya:
|
|
Copy seluruh output-nya.
Tambahkan ke GitHub:
- Buka repository GitHub → Settings → Deploy keys
- Klik Add deploy key
- Isi Title (contoh:
cpanel-production) - Paste public key tadi ke kolom Key
- Centang Allow write access jika diperlukan (untuk deployment biasanya tidak perlu)
- Klik Add key
Buat SSH config supaya git tahu pakai key mana:
~/.ssh/config
|
|
|
|
Sekarang clone pakai SSH URL, bukan HTTPS:
|
|
Tip: SSH URL ada di halaman repo GitHub → tombol Code → tab SSH.
Step 2. Setup .htaccess untuk Redirect ke public/
Laravel serve request dari subfolder public/, bukan dari root project. Buat file .htaccess di root public_html supaya semua traffic diarahkan ke sana — tanpa /public/ muncul di URL.
~/public_html/.htaccess
|
|
Step 3. Install Dependency dan Konfigurasi .env
Install Composer dependency, buat file .env, lalu generate application key dan jalankan migration.
|
|
Isi bagian database di .env dengan kredensial dari cPanel. Perlu diingat, nama database dan username di cPanel selalu ada prefix sesuai nama akun cPanel-nya (contoh: myaccount_laraveldb).
|
|
Step 4. Install Node.js via NVM
Karena kita pakai Vite untuk build assets, kita perlu Node.js di server. Cara paling aman di shared hosting adalah lewat NVM.
|
|
Versi diatas adalah versi paling baru saat artikel ini ditulis. untuk melihat versi nvm paling baru bisa cek dokumentasi di [nvm-sh/nvm]
Setelah install, load NVM ke shell dan install Node.js LTS:
|
|
Supaya NVM tetap ter-load waktu GitHub Actions konek via SSH, tambahkan baris di atas ke ~/.bashrc dan source ~/.bashrc di ~/.bash_profile.
Step 5. Generate SSH Key dan Simpan ke GitHub Secrets
GitHub Actions butuh akses SSH ke server. Generate key pair di cPanel Terminal:
|
|
Sebenarnya kita juga bisa menggunakan key yang sama yang dibuat pada Step 1.1 jika tidak ingin membuat key ssh yang berbeda
Tampilkan private key, lalu copy seluruh isinya termasuk baris -----BEGIN----- dan -----END-----:
|
|
Buka repository GitHub → Settings → Secrets and variables → Actions, lalu tambahkan 5 secrets ini:
| Secret | Value |
|---|---|
SSH_HOST |
IP atau hostname server |
SSH_USERNAME |
Username cPanel |
SSH_KEY |
Private key dari langkah di atas |
SSH_PORT |
22 |
PROJECT_PATH |
/home/cpaneluser/public_html |
Step 6. Buat Workflow GitHub Actions
Di project lokal, buat file workflow-nya:
|
|
.github/workflows/deploy.yml
|
|
Step 7. Push dan Verifikasi
Commit workflow-nya dan push ke main:
|
|
Push ini sendiri sudah langsung trigger deployment pertama. Pantau hasilnya di tab Actions di GitHub — setiap step akan muncul log-nya secara real-time.
Kalau semua step hijau, buka domain dan verifikasi. Mulai sekarang, setiap git push origin main = deploy otomatis ke server.
Troubleshooting Cepat
npm: command not found— NVM belum ter-load di SSH session. Tambahkanexport NVM_DIRdan source NVM di awal blokscript:di workflow.Permission denied (publickey)— Cek ulangchmod 700 ~/.sshdanchmod 600 ~/.ssh/authorized_keys.- Site 404 / directory listing — File
.htaccessdi~/public_htmlbelum ada atau isinya salah. Ulangi langkah 2. - Migration gagal — Cek prefix nama database dan username di
.env, sesuaikan dengan nama akun cPanel.
Jika ada kendala lain, silakan tanyakan di komentar atau boleh juga hubungi saya :).
Setup ini memang butuh waktu di awal, tapi setelahnya workflow deploy jadi jauh lebih rapi. Tidak ada lagi upload manual, tidak ada lagi lupa jalankan migration. Semua jalan otomatis setiap kali kita push.
Selamat ngoding!