📋 Pendahuluan
Banyak pengembang terjebak menggunakan FTP yang lambat dan tidak aman untuk deploy Laravel. Menggunakan SSH dan Git bukan hanya soal kecepatan, tapi juga soal profesionalisme dan keamanan data. Dengan metode ini, Anda bisa melakukan pembaruan aplikasi hanya dengan satu perintah git pull.
🛠️ Tahap 1: Persiapan di Server (cPanel)
Sebelum menyentuh kode, pastikan lingkungan server Anda siap.
- Aktifkan SSH: Masuk ke cPanel, cari menu SSH Access, dan pastikan statusnya aktif.
- Versi PHP: Masuk ke Select PHP Version, pastikan versi PHP di server sesuai (atau lebih tinggi) dari versi di laptop Anda.
- Buat Database: Melalui MySQL Databases, buat nama database, user, dan password. Catat kredensial ini.
🔑 Tahap 2: Menghubungkan Server ke GitHub/GitLab
Agar server bisa menarik kode tanpa memasukkan password berulang kali, kita gunakan SSH Key.
1. Generate SSH Key di Server
Buka terminal SSH (bisa pakai PuTTY atau Terminal bawaan OS), lalu jalankan:
Bash
ssh-keygen -t rsa -b 4096 -C "email-anda@example.com"
Tekan Enter terus sampai selesai.
2. Daftarkan ke Provider Git
Ambil kunci publik Anda dengan perintah:
Bash
cat ~/.ssh/id_rsa.pub
Salin (copy) kode yang muncul, lalu tempelkan (paste) di:
- GitHub: Settings > SSH and GPG keys > New SSH Key.
- GitLab: Preferences > SSH Keys.
🏗️ Tahap 3: Proses Deployment
Sekarang kita akan menarik kode dari repository ke server.
1. Clone Repository
Pindah ke direktori root (di luar public_html) agar file inti Anda aman:
Bash
cd ~ git clone git@github.com:username/nama-repo.git project-laravel
2. Instalasi Dependensi
Masuk ke folder project dan install vendor:
Bash
cd project-laravel composer install --no-dev --optimize-autoloader
3. Konfigurasi Environment (.env)
Salin file contoh .env dan sesuaikan isinya:
Bash
cp .env.example .env nano .env
Penting: Ubah APP_ENV=production, APP_DEBUG=false, dan masukkan detail database yang Anda buat di Tahap 1.
📂 Tahap 4: Konfigurasi Struktur Folder (Penting!)
Shared hosting biasanya hanya membaca file di dalam public_html. Kita perlu menghubungkan folder public Laravel ke sana.
- Hapus atau Kosongkan folder public_html yang asli (pastikan sudah backup jika ada isinya).
- Buat Symbolic Link (Symlink): Jalankan perintah ini di terminal SSH:
- Bash
-
ln -s /home/username/project-laravel/public /home/username/public_html
- (Ganti username dengan username cPanel Anda).
Dengan cara ini, file inti Laravel tetap aman di luar folder publik, namun website bisa diakses melalui public_html.
⚡ Tahap 5: Finalisasi & Optimasi
Jalankan rangkaian perintah terakhir untuk memastikan semuanya berjalan mulus:
Perintah | Fungsiphp artisan key:generate | Membuat Application Key baru
php artisan migrate --force | Menjalankan migrasi database di produksi
php artisan storage:link | Menghubungkan folder upload
php artisan optimize | Membersihkan dan membuat cache route & config
Ekspor ke Spreadsheet
🔄 Cara Update di Masa Depan
Jika Anda memiliki perubahan kode baru di lokal, Anda cukup melakukan:
- Lokal: git push origin main
- Server (SSH):
- Bash
-
cd project-laravel git pull origin main php artisan migrate --force php artisan optimize
Tips Keamanan: Selalu pastikan folder storage dan bootstrap/cache memiliki izin akses yang benar (biasanya chmod -R 775).
📄 Konfigurasi .htaccess (Proxy ke Folder Laravel)
Letakkan file ini tepat di dalam folder public_html. File ini akan memerintahkan server untuk mencari file index di dalam folder project Laravel Anda secara otomatis.
Apache
<IfModule mod_rewrite.c>
RewriteEngine On
# 1. Alihkan semua permintaan ke folder public Laravel
RewriteRule ^(.*)$ project-laravel/public/$1 [L]
</IfModule>
Catatan: Ganti project-laravel dengan nama folder tempat Anda melakukan git clone di tahap sebelumnya.
🛠️ Penyesuaian File .env
Jika Anda menggunakan metode .htaccess ini, pastikan baris berikut di file .env (di dalam folder project-laravel) sudah sesuai dengan URL website Anda:
Cuplikan kode
APP_URL=https://domainanda.com ASSET_URL=https://domainanda.com/public
🛡️ Keamanan Tambahan (Opsional tapi Disarankan)
Karena folder project Anda sekarang berada di jalur yang bisa ditebak, tambahkan baris berikut di dalam file .htaccess milik folder project Laravel (di project-laravel/.htaccess) untuk mencegah akses ke file sensitif:
Apache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 1. Paksa HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. REDIRECT PERMANEN: Membuang /public/ dari URL secara fisik
# Menggunakan REDIRECT_STATUS untuk mencegah looping internal LiteSpeed
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^public/(.*)$ https://anakinformatika.com/$1 [L,R=301,NE]
# 3. KEAMANAN: Blokir file sensitif Laravel
RewriteRule ^(\.env|\.git|\.gitignore|.json|composer\.lock|package\.json|artisan)$ - [F,L]
# 4. KEAMANAN: Blokir folder sistem agar tidak bisa diintip
RewriteCond %{REQUEST_URI} !^/public/ [NC]
RewriteRule ^(app|bootstrap|config|database|resources|routes|tests|vendor) - [F,L]
# 5. REWRITE INTERNAL: Mengarahkan traffic ke folder public (Tanpa mengubah URL browser)
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
💡 Tips Pro: Menjalankan Perintah Tanpa SSH
Jika sewaktu-waktu Anda kehilangan akses SSH tetapi perlu menjalankan perintah Laravel (seperti migrate atau link), Anda bisa membuat Route khusus sementara di file routes/web.php:
PHP
// HAPUS SETELAH DIGUNAKAN!
Route::get('/deploy-helper', function () {
\Artisan::call('migrate --force');
\Artisan::call('storage:link');
return "Selesai!";
});