Cara Deploy Laravel 12 di Vercel with Supabase


Cara Deploy Laravel di Vercel with Supabase
GM!
Berbeda dengan ekosistem Next.js, men-deploy Laravel ke Vercel memerlukan konfigurasi yang sedikit lebih kompleks. Ditambah lagi, sangat jarang ada penyedia hosting Laravel yang menawarkan paket gratis secara cuma-cuma. Akibatnya, banyak proyek akhirnya hanya tertahan di localhost. Namun, jangan khawatir... ada trik khusus agar Laravel bisa berjalan mulus di Vercel. Kali ini, saya akan membagikan pengalaman saya ketika melakukan deployment Laravel di Vercel menggunakan database Supabase.
Namun, karena Laravel memiliki sifat stateless dan Vercel berbasis serverless, ada beberapa trik khusus agar Laravel berjalan mulus di Vercel. Mari kita bedah...
Persiapan Amunisi
Sebelum mulai, pastikan Anda sudah memiliki hal-hal berikut:
- Akun GitHub: Untuk menyimpan repositori (wajib).
- Akun Vercel: Disarankan login menggunakan GitHub.
- Akun Supabase: Sebagai database PostgreSQL.
- Kopi ☕: Opsional.
Langkah 1: Setup Database Supabase
Karena Vercel berjalan di lingkungan serverless, alamat IP server akan berubah-ubah. Untuk menghindari masalah koneksi, kita wajib menggunakan Connection Pooler.
- Buat proyek baru di Supabase.
- Navigasi ke menu Settings > Database.
- Cari bagian Connection Pooler.
- Aktifkan toggle "Use connection pooler" (Wajib!).
- Pastikan Pool Mode disetel ke
Session. - Catat kredensialnya (Gunakan Port 6543).
Catatan Penting: Jangan gunakan Direct Connection (Port 5432). Banyak platform serverless mengalami masalah resolusi IPv6. Gunakan selalu Port 6543.
Langkah 2: Konfigurasi Laravel untuk Vercel
Agar Laravel dapat berjalan di infrastruktur Vercel, kita perlu menambahkan beberapa file konfigurasi khusus.
1. Membuat vercel.json
Buat file ini di root directory proyek Anda. File ini bertindak sebagai instruksi bagi Vercel untuk menjalankan PHP.
{
"version": 2,
"outputDirectory": "public",
"framework": null,
"functions": {
"api/index.php": { "runtime": "vercel-php@0.7.4" }
},
"routes": [
{ "src": "/build/(.*)", "dest": "/public/build/$1" },
{ "src": "/(images|assets|css|js)/(.*)", "dest": "/public/$1/$2" },
{ "src": "/(.*)", "primary": true, "dest": "/api/index.php" }
],
"env": {
"APP_ENV": "production",
"APP_DEBUG": "false",
"APP_CONFIG_CACHE": "/tmp/config.php",
"CACHE_STORE": "array",
"SESSION_DRIVER": "cookie"
}
}2. Membuat Entry Point api/index.php
Vercel membutuhkan file handler di dalam folder api. Buat folder tersebut dan isi dengan file index.php:
<?php
// Meneruskan request ke file index utama Laravel
require __DIR__ . '/../public/index.php';
3. Konfigurasi .vercelignore
Agar proses deploy lebih cepat, abaikan file yang tidak diperlukan:
.env
/node_modules
/tests
/storage/logs
README.md
4. Penyesuaian .gitignore
Secara bawaan, Laravel mengabaikan folder public/build. Namun, jika Anda melakukan kompilasi aset (Vite) di lokal, folder ini harus ikut diunggah. Hapus atau beri komentar pada baris berikut di .gitignore:
# /public/build <-- Matikan ignore agar aset ikut ter-upload
5. Memaksa Protokol HTTPS
Terkadang terjadi mixed content error di mana Vercel menggunakan HTTPS tetapi Laravel menganggapnya HTTP. Tambahkan kode berikut di app/Providers/AppServiceProvider.php:
public function boot(): void
{
if ($this->app->environment('production')) {
\Illuminate\Support\Facades\URL::forceScheme('https');
}
}
Langkah 3: Build & Deploy
Sekarang saatnya meluncurkan aplikasi Anda ke internet.
- Build Aset: Jalankan
npm run builddi terminal lokal Anda. - Push ke GitHub: Lakukan commit dan push seluruh perubahan.
- Import di Vercel: Buka dashboard Vercel, pilih New Project, dan arahkan ke repositori Anda.
- Environment Variables: Masukkan variabel berikut di bagian Environment Variables sebelum klik Deploy:
| Key | Keterangan |
|---|---|
APP_KEY | Salin dari .env lokal Anda (format base64:...) |
DB_CONNECTION | pgsql |
DB_HOST | Host dari Supabase (Connection Pooler) |
DB_PORT | 6543 |
DB_DATABASE | postgres |
DB_USERNAME | Username database Anda |
DB_PASSWORD | Password database Anda |
Pro Tip: Jika muncul error
prepared statement does not exist, tambahkan konfigurasi ini diconfig/database.phppada bagianpgsql:php'options' => [ PDO::ATTR_EMULATE_PREPARES => true, ],
Langkah 4: Migrasi Database
Karena Vercel tidak menyediakan akses terminal SSH untuk menjalankan php artisan migrate, cara termudah adalah melakukannya dari komputer lokal Anda:
- Buka file
.envdi lokal secara sementara. - Ganti kredensial database lokal dengan kredensial Supabase.
- Jalankan perintah
php artisan migratedari terminal laptop Anda. - Setelah selesai, kembalikan isi
.envlokal ke pengaturan semula.
Langkah 5: Penanganan File Upload
Penyimpanan di Vercel bersifat ephemeral (sementara). File yang diunggah ke folder storage akan hilang secara otomatis. Solusinya, kita gunakan Supabase Storage sebagai penggantinya.
1. Setup di Supabase
- Buka menu Storage, buat bucket baru (misalnya:
uploads). - Pastikan statusnya adalah Public.
2. Install Driver S3
Laravel dapat berkomunikasi dengan Supabase Storage menggunakan protokol S3. Jalankan:
composer require league/flysystem-aws-s3-v3 "^3.0"
3. Konfigurasi Env untuk Storage
Tambahkan variabel berikut di Vercel Dashboard agar Laravel tahu di mana harus menyimpan file:
FILESYSTEM_DISK=s3AWS_ACCESS_KEY_ID= (Cek di Project Settings > API)AWS_SECRET_ACCESS_KEY= (Cek di Project Settings > API)AWS_DEFAULT_REGION=ap-southeast-1(atau region Supabase Anda)AWS_BUCKET=uploadsAWS_URL= (URL publik bucket Anda)AWS_ENDPOINT= (Endpoint S3 dari Supabase)
Troubleshooting & Tips
- CSS/JS Tidak Muncul? Pastikan Anda sudah menjalankan
npm run builddan folderpublic/buildtidak ter-ignore oleh Git. - Error 500? Periksa Function Logs di dashboard Vercel untuk melihat pesan error PHP yang lebih detail.
- Session Bermasalah? Pastikan
SESSION_DRIVERdiatur kecookiekarena serverless tidak mendukung session berbasis file secara stabil.
Penutup
Sekarang aplikasi Laravel 12 Anda sudah mengudara secara gratis dengan performa yang mumpuni. Memanfaatkan infrastruktur serverless memang butuh sedikit penyesuaian, tapi hasilnya sangat sepadan.


