Panduan Deploy Laravel ke Production untuk Pemula

Deploy Laravel ke production berarti memindahkan aplikasi dari komputer lokal ke server publik yang stabil, aman, dan bisa diakses lewat domain. Jawaban cepatnya: siapkan VPS, arahkan domain, install PHP dan dependency server, konfigurasi Nginx ke folder public, isi .env production, jalankan migration, build asset, atur permission, lalu cek queue, scheduler, storage, dan log sebelum membagikan link.

Untuk pemula, bagian tersulit dari deploy bukan mengetik satu perintah. Tantangannya adalah memahami urutan komponen yang saling bergantung. Laravel butuh web server, PHP-FPM, database, file .env, folder writable, dan kadang queue worker atau scheduler. Kalau satu bagian salah, gejalanya bisa terlihat seperti error Laravel, padahal akar masalahnya ada di server.

Panduan ini adalah hub untuk cluster production Laravel. Gunakan halaman ini sebagai peta besar, lalu buka panduan detail sesuai masalah yang sedang kamu hadapi.

Gambaran Alur Deploy Laravel

Alur umum deploy Laravel sederhana:

Kode Laravel
  -> repository Git
  -> VPS
  -> Composer install
  -> npm build
  -> .env production
  -> migration database
  -> Nginx + PHP-FPM
  -> permission storage
  -> queue, scheduler, storage link
  -> smoke test

Tidak semua project butuh queue, Redis, atau GitHub Actions sejak awal. Tetapi semua project production perlu hal dasar: web server benar, .env aman, database benar, permission benar, dan cara membaca log saat error.

Urutan Belajar Deploy yang Aman

Jika kamu baru pertama kali deploy Laravel, ikuti urutan ini.

1. Pahami Deploy Manual Dulu

Mulai dari deploy manual ke VPS:

  • clone project ke server
  • install dependency PHP
  • install dependency frontend jika ada
  • isi .env
  • jalankan migration
  • arahkan Nginx ke folder public
  • cek halaman utama

Panduan detailnya ada di Cara Deploy Laravel ke VPS.

Contoh perintah inti:

cd /var/www/toko-laravel
git pull origin main
composer install --no-dev --optimize-autoloader
npm ci
npm run build
php artisan migrate --force
php artisan optimize

Jangan langsung mengotomatisasi deploy kalau deploy manual belum pernah berhasil. Otomatisasi hanya akan menyembunyikan masalah yang belum kamu pahami.

2. Pastikan Nginx dan PHP-FPM Benar

Nginx harus mengarah ke folder public, bukan folder utama project:

server {
    listen 80;
    server_name tokolaravel.com;

    root /var/www/toko-laravel/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Kalau root salah, file internal seperti .env bisa berisiko terekspos. Kalau socket PHP-FPM salah, halaman bisa menjadi 502 Bad Gateway. Ikuti Setup Nginx + PHP-FPM untuk Laravel untuk konfigurasi lengkap.

3. Kunci .env Production

Minimal cek nilai ini:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://tokolaravel.com

DB_CONNECTION=mysql
DB_DATABASE=toko_laravel
DB_USERNAME=toko_user
DB_PASSWORD=password-kuat

QUEUE_CONNECTION=database
SESSION_SECURE_COOKIE=true

Setelah mengubah .env, jalankan:

php artisan config:clear
php artisan config:cache

Untuk checklist detail, baca Laravel .env Production: Checklist Aman.

4. Bereskan Permission dan Storage

Laravel harus bisa menulis log, cache, session, compiled view, dan file upload.

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R ug+rw storage bootstrap/cache

Jika project punya upload gambar publik, jalankan:

php artisan storage:link

Jika gambar upload menjadi 404 di server, buka Storage Link Laravel Tidak Jalan di Server. Jika error berhubungan dengan owner atau permission folder, buka Permission Folder Storage Laravel di Linux.

5. Aktifkan Queue Jika Project Memakainya

Queue worker tidak boleh dijalankan manual dari SSH untuk production. Gunakan Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start toko-laravel-worker:*
sudo supervisorctl status

Setelah deploy kode baru:

php artisan queue:restart

Detailnya ada di Setup Supervisor untuk Queue Laravel. Jika antrean mulai ramai atau cache butuh lebih cepat, lanjut ke Setup Redis untuk Queue dan Cache Laravel.

6. Aktifkan Scheduler Jika Ada Task Terjadwal

Laravel scheduler biasanya cukup memakai satu cron setiap menit:

* * * * * cd /var/www/toko-laravel && php artisan schedule:run >> /dev/null 2>&1

Jangan membuat banyak cron manual untuk tiap command kalau Laravel scheduler sudah dipakai. Baca Cara Menjalankan Scheduler Laravel di Production untuk diagnosis kalau task tidak jalan.

7. Otomatisasi Setelah Stabil

Kalau deploy manual sudah stabil, kamu bisa membuat workflow GitHub Actions:

git push origin main

Lalu workflow menjalankan SSH ke server, git pull, composer install, npm run build, migrate, cache ulang config, dan restart queue. Detailnya ada di Cara Deploy Laravel dengan GitHub Actions Sederhana.

Checklist Deploy Cepat

Sebelum menganggap deploy selesai, cek:

php artisan about
php artisan migrate:status
php artisan route:list
php artisan queue:failed
sudo nginx -t
sudo supervisorctl status

Buka halaman penting:

  • homepage
  • login dan logout
  • form utama
  • halaman yang membaca database
  • halaman upload file
  • halaman yang mengirim email
  • endpoint API jika ada

Untuk versi checklist yang lebih rinci, gunakan Checklist Sebelum Laravel Go Live.

Kesalahan yang Sering Terjadi

Deploy Tanpa Membaca Log

Saat website error 500, jangan langsung menebak. Cek log:

tail -f storage/logs/laravel.log
sudo tail -f /var/log/nginx/error.log

Log biasanya lebih jujur daripada tampilan browser.

Nginx Mengarah ke Folder Project

Root Nginx harus ke public. Kalau diarahkan ke folder utama project, struktur Laravel menjadi tidak aman dan route bisa kacau.

Lupa APP_DEBUG=false

Debug yang aktif di production bisa menampilkan detail error sensitif. Set production ke:

APP_DEBUG=false

Permission Diselesaikan dengan chmod 777

chmod 777 terlihat cepat, tetapi terlalu longgar. Perbaiki owner dan group folder sesuai user PHP-FPM.

Queue Worker Masih Memakai Kode Lama

Setelah deploy, jalankan:

php artisan queue:restart

Jika tidak, worker lama bisa tetap memakai class lama.

FAQ

Apakah Laravel wajib dideploy ke VPS?

Tidak. Bisa juga ke shared hosting, managed hosting, PaaS, atau layanan khusus Laravel. Namun VPS bagus untuk belajar karena kamu melihat langsung Nginx, PHP-FPM, permission, cron, dan process worker.

Apakah php artisan serve boleh untuk production?

Jangan. php artisan serve cocok untuk development lokal, bukan server publik. Gunakan Nginx atau Apache dengan PHP-FPM.

Apakah harus memakai Redis?

Tidak. Project kecil bisa mulai dari cache file dan queue database. Redis mulai berguna saat queue, cache, session, atau traffic sudah lebih serius.

Kapan perlu GitHub Actions?

Gunakan setelah deploy manual sudah stabil. GitHub Actions membantu mengurangi lupa langkah, tetapi bukan pengganti pemahaman deploy.

Apa tanda deploy sudah siap dibagikan?

Halaman utama bisa dibuka, login berjalan, form penting berhasil, log tidak penuh error baru, migration sudah sesuai, queue dan scheduler sehat, serta APP_DEBUG=false.

Bacaan Terkait