laravel ke shared hosting

📋 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.

  1. Aktifkan SSH: Masuk ke cPanel, cari menu SSH Access, dan pastikan statusnya aktif.
  2. Versi PHP: Masuk ke Select PHP Version, pastikan versi PHP di server sesuai (atau lebih tinggi) dari versi di laptop Anda.
  3. 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.

  1. Hapus atau Kosongkan folder public_html yang asli (pastikan sudah backup jika ada isinya).
  2. Buat Symbolic Link (Symlink): Jalankan perintah ini di terminal SSH:
  3. Bash

  4. ln -s /home/username/project-laravel/public /home/username/public_html
    
  5. (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:

  1. Lokal: git push origin main
  2. Server (SSH):
  3. Bash

  4. 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!";
});