Laravel Production Checklist: Konfigurasi yang Perlu Dicek Sebelum Deploy ke VPS
Kenapa Perlu Production Checklist?
Deploy aplikasi Laravel ke VPS bukan hanya menjalankan:
php artisan migrate
Ada banyak komponen yang harus bekerja bersama:
Internet
↓
Nginx
↓
PHP-FPM
↓
Laravel
↓
MySQL / Redis
↓
Queue Worker
↓
Scheduler
Jika salah satu konfigurasi bermasalah, aplikasi mungkin:
- Mengalami 500 Internal Server Error
- Tidak dapat terhubung ke database
- Queue tidak berjalan
- Scheduler tidak menjalankan task
- Redis gagal digunakan
- File upload gagal
- Permission error
- Menampilkan error sensitif
- Tidak dapat diakses melalui HTTPS
Karena itu, sebelum menyatakan deployment selesai, sebaiknya lakukan pengecekan secara sistematis.
1. Pastikan APP_ENV Production
Periksa .env:
APP_ENV=production
Jangan menggunakan:
APP_ENV=local
pada server production.
APP_ENV membantu Laravel dan package mengetahui environment aplikasi.
2. Pastikan APP_DEBUG=false
Ini salah satu pemeriksaan paling penting.
Production:
APP_DEBUG=false
Jangan:
APP_DEBUG=true
Jika debug aktif, halaman error dapat menampilkan informasi internal aplikasi yang seharusnya tidak terlihat oleh pengguna.
Minimal konfigurasi:
APP_ENV=production
APP_DEBUG=false
3. Pastikan APP_KEY Sudah Diisi
Periksa:
APP_KEY=base64:...
Jika belum ada, generate:
php artisan key:generate
Jangan menjalankan key:generate sembarangan pada aplikasi production yang sudah berjalan.
Mengganti APP_KEY dapat membuat data yang sebelumnya dienkripsi menggunakan key lama tidak dapat digunakan lagi.
4. Pastikan APP_URL Benar
Contoh:
APP_URL=https://example.com
Hindari meninggalkan:
APP_URL=http://localhost
jika aplikasi sudah berada di production.
APP_URL dapat digunakan oleh Laravel atau package tertentu ketika membuat URL aplikasi.
5. Pastikan .env Tidak Masuk Git
Periksa:
git status
.env seharusnya tidak menjadi file yang akan di-commit.
Pastikan .gitignore memiliki:
.env
Gunakan:
.env.example
sebagai template konfigurasi.
6. Periksa Credential Production
Pastikan credential yang digunakan adalah credential production:
DB_DATABASE=myapp
DB_USERNAME=myapp
DB_PASSWORD=...
Jangan menggunakan credential database development secara tidak sengaja.
Hal yang sama berlaku untuk:
- Redis
- SMTP
- API key
- Payment gateway
- Storage
- Third-party service
7. Periksa Konfigurasi Database
Contoh MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myapp
DB_PASSWORD=secret
Kemudian tes koneksi:
php artisan migrate:status
Jika berhasil, Laravel dapat berkomunikasi dengan database.
Jika gagal, periksa:
- Host
- Port
- Database name
- Username
- Password
- User permission
- MySQL service
8. Jangan Sembarangan Menjalankan Migration
Sebelum:
php artisan migrate
pastikan Anda memahami migration yang akan dijalankan.
Untuk production, biasanya gunakan:
php artisan migrate --force
jika migration memang sudah diverifikasi dan deployment membutuhkan eksekusi non-interaktif.
--force tidak membuat migration menjadi lebih aman. Option tersebut hanya memungkinkan migration dijalankan pada environment production tanpa prompt konfirmasi.
9. Pastikan PHP Version Sesuai
Periksa:
php -v
Kemudian cocokkan dengan requirement aplikasi dan versi Laravel yang digunakan.
Jangan mengasumsikan aplikasi yang berjalan di laptop otomatis kompatibel dengan PHP di VPS.
Masalah version mismatch dapat menyebabkan:
Class not found
Deprecated
Fatal error
Package conflict
Composer error
10. Pastikan PHP Extension Terinstall
Tergantung aplikasi, Laravel dapat membutuhkan extension seperti:
mbstring
openssl
pdo
pdo_mysql
tokenizer
xml
ctype
json
fileinfo
bcmath
curl
Daftar extension sebenarnya bergantung pada versi Laravel dan package aplikasi.
Periksa:
php -m
Jika menggunakan package tertentu, cek juga requirement Composer:
composer check-platform-reqs
11. Jalankan composer install
Untuk production, gunakan:
composer install --no-dev --optimize-autoloader
Tujuannya:
- Tidak memasang development dependency
- Mengoptimalkan autoloader
- Menghasilkan dependency berdasarkan
composer.lock
Jika composer.lock tersedia, sebaiknya jangan sembarangan menggunakan:
composer update
di server production.
composer update dapat mengubah versi dependency.
12. Pastikan vendor/ Tersedia
Setelah:
composer install --no-dev --optimize-autoloader
pastikan:
vendor/
tersedia.
Tes:
php artisan --version
Jika Artisan dapat berjalan, dependency dasar kemungkinan sudah tersedia.
13. Bersihkan Cache Lama
Setelah konfigurasi berubah, bersihkan cache:
php artisan optimize:clear
Kemudian pada production Anda dapat melakukan optimasi:
php artisan optimize
Atau secara eksplisit:
php artisan config:cache
php artisan route:cache
php artisan view:cache
Gunakan command yang sesuai dengan versi Laravel dan kebutuhan aplikasi.
14. Pastikan Configuration Cache Tidak Menyimpan Konfigurasi Lama
Jika .env sudah diubah tetapi Laravel masih membaca nilai lama, periksa configuration cache.
Jalankan:
php artisan config:clear
Kemudian rebuild:
php artisan config:cache
Alur sederhananya:
.env
↓
config/*.php
↓
config:cache
↓
Laravel
15. Pastikan env() Tidak Digunakan Sembarangan
Gunakan pola:
// config/services.php
'payment' => [
'url' => env('PAYMENT_API_URL'),
],
Kemudian:
config('services.payment.url');
Hindari menggunakan:
env('PAYMENT_API_URL')
di banyak bagian application code, terutama ketika konfigurasi di-cache.
16. Periksa Storage Symlink
Jika aplikasi menggunakan file yang disimpan di:
storage/app/public
biasanya perlu:
php artisan storage:link
Kemudian periksa:
ls -la public/storage
Jika symlink tidak tersedia, file public yang disimpan melalui Laravel dapat menghasilkan 404.
17. Periksa Permission Laravel
Laravel perlu menulis ke beberapa directory, terutama:
storage/
bootstrap/cache/
Periksa:
ls -ld storage
ls -ld bootstrap/cache
Pastikan user yang menjalankan PHP-FPM memiliki permission yang sesuai.
Jangan menyelesaikan permission error dengan:
chmod -R 777 .
Cara tersebut terlalu longgar dan dapat menimbulkan masalah keamanan.
18. Periksa User PHP-FPM
Pastikan Anda mengetahui user yang menjalankan PHP-FPM.
Pada Ubuntu, misalnya dapat menggunakan:
ps aux | grep php-fpm
atau:
systemctl status php8.3-fpm
Versi PHP-FPM tentu menyesuaikan versi PHP yang digunakan.
User tersebut harus dapat membaca source code dan menulis ke directory yang memang membutuhkan write access.
19. Pastikan Document Root Mengarah ke public
Ini merupakan kesalahan deployment yang sangat penting untuk dihindari.
Nginx seharusnya mengarah ke:
/var/www/myapp/public
bukan:
/var/www/myapp
Struktur:
/var/www/myapp
├── app/
├── bootstrap/
├── config/
├── resources/
├── routes/
├── storage/
├── vendor/
├── .env
└── public/
├── index.php
├── build/
└── ...
Entry point Laravel adalah:
public/index.php
20. Periksa Konfigurasi Nginx
Konfigurasi Nginx Laravel secara umum harus menangani request melalui:
public/index.php
Konsep sederhananya:
root /var/www/myapp/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Konfigurasi aktual perlu disesuaikan dengan PHP-FPM dan kebutuhan server Anda.
Setelah mengubah Nginx:
sudo nginx -t
Jika valid:
sudo systemctl reload nginx
21. Pastikan PHP-FPM Berjalan
Periksa:
sudo systemctl status php8.3-fpm
Jika service mati:
sudo systemctl restart php8.3-fpm
Gunakan versi PHP-FPM yang sesuai dengan server.
Jika Nginx hidup tetapi PHP-FPM mati, request PHP biasanya akan gagal.
22. Periksa Nginx Error Log
Jika muncul:
502 Bad Gateway
periksa:
sudo tail -f /var/log/nginx/error.log
Masalah umum:
- PHP-FPM mati
- Socket PHP-FPM salah
- Permission socket
- Konfigurasi Nginx salah
- PHP-FPM overload
23. Periksa Laravel Log
Jika aplikasi menghasilkan:
500 Internal Server Error
periksa:
tail -f storage/logs/laravel.log
Atau:
tail -n 100 storage/logs/laravel.log
Karena:
APP_DEBUG=false
halaman browser mungkin hanya menampilkan error generik.
Detail error biasanya lebih berguna di log.
24. Pastikan HTTPS Aktif
Production sebaiknya menggunakan:
https://example.com
bukan:
http://example.com
HTTPS penting untuk:
- Login
- Session
- Cookie
- Data user
- API request
- Form
- Credential
Setelah SSL aktif, pastikan APP_URL juga sesuai:
APP_URL=https://example.com
25. Periksa Redirect HTTP ke HTTPS
Jika HTTP tetap tersedia, sebaiknya arahkan ke HTTPS.
Alurnya:
http://example.com
↓
https://example.com
Konfigurasi ini biasanya dilakukan di web server.
26. Periksa Domain dan DNS
Sebelum menyalahkan Laravel, pastikan DNS sudah mengarah ke VPS.
Periksa:
dig example.com
atau:
nslookup example.com
Pastikan IP yang muncul adalah IP server yang benar.
27. Periksa Firewall
Jika menggunakan UFW:
sudo ufw status
Pastikan port yang dibutuhkan tersedia, biasanya:
22 SSH
80 HTTP
443 HTTPS
Jangan membuka semua port tanpa alasan.
Misalnya:
3306 MySQL
6379 Redis
sebaiknya tidak dibuka ke internet publik jika service tersebut hanya digunakan secara internal.
28. Jangan Mengekspos MySQL dan Redis ke Internet
Idealnya:
Internet
↓
Nginx
↓
Laravel
↓
MySQL / Redis
bukan:
Internet
↓
MySQL :3306
Redis :6379
Jika database atau Redis hanya digunakan oleh aplikasi di server yang sama, bind ke interface internal/localhost sesuai kebutuhan.
29. Periksa Redis
Jika Laravel menggunakan Redis:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
Periksa service:
sudo systemctl status redis
Kemudian:
redis-cli ping
Output yang diharapkan:
PONG
30. Periksa Cache
Jika menggunakan Redis:
CACHE_STORE=redis
Tes aplikasi sesuai konfigurasi cache.
Masalah cache dapat menyebabkan aplikasi terlihat seperti tidak membaca perubahan konfigurasi.
Saat debugging:
php artisan optimize:clear
sering menjadi langkah awal yang berguna.
31. Periksa Queue Configuration
Jika aplikasi menggunakan Queue:
QUEUE_CONNECTION=redis
atau driver lain sesuai kebutuhan.
Pastikan Queue Worker benar-benar berjalan.
Contoh:
php artisan queue:work redis
Jika command tersebut dijalankan manual dan berhasil, masalah kemungkinan berada pada process manager atau konfigurasi deployment.
32. Jangan Menjalankan Queue Worker Tanpa Process Manager di Production
Jangan mengandalkan:
php artisan queue:work
yang dijalankan di terminal SSH.
Ketika session SSH ditutup, worker dapat berhenti.
Gunakan process manager seperti Supervisor atau systemd sesuai arsitektur server.
Contoh alur:
Supervisor
↓
queue:work
↓
Redis
33. Periksa Supervisor
Jika menggunakan Supervisor:
sudo supervisorctl status
Pastikan worker:
RUNNING
Jika perlu:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart laravel-worker:*
Nama program menyesuaikan konfigurasi Anda.
34. Periksa Failed Jobs
Jika menggunakan Queue, periksa:
php artisan queue:failed
Jika terdapat job gagal, cari penyebabnya sebelum menghapus atau melakukan retry secara massal.
Untuk retry:
php artisan queue:retry all
Gunakan dengan hati-hati jika job memiliki side effect.
35. Pastikan Queue Tidak Memproses Job Dua Kali
Untuk job penting, perhatikan:
triestimeoutretry_afterbackoff- Idempotency
WithoutOverlapping- Unique Job jika memang dibutuhkan
Jangan hanya mengandalkan Queue Worker tanpa memahami bagaimana job dapat di-retry.
36. Periksa Laravel Scheduler
Jika aplikasi memiliki task otomatis, pastikan Scheduler dikonfigurasi.
Periksa:
php artisan schedule:list
Anda harus dapat melihat task yang terdaftar.
Tes manual:
php artisan schedule:run
37. Pastikan Cron Scheduler Berjalan
Untuk Laravel Scheduler yang menggunakan schedule:run, server biasanya membutuhkan cron yang menjalankannya secara berkala.
Contoh:
* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1
Gunakan path PHP dan project yang benar untuk server Anda.
38. Jangan Lupa Queue dan Scheduler Itu Berbeda
Ini sering membingungkan.
Scheduler:
Menentukan kapan task dijalankan
Queue:
Memproses pekerjaan di background
Contoh:
Cron
↓
Scheduler
↓
Artisan Command
↓
Dispatch Job
↓
Redis
↓
Queue Worker
Scheduler tanpa Worker tidak akan membuat Queue Job diproses.
39. Periksa Mail Production
Pastikan:
MAIL_MAILER=smtp
MAIL_HOST=...
MAIL_PORT=...
MAIL_USERNAME=...
MAIL_PASSWORD=...
Sesuai provider email yang digunakan.
Tes pengiriman email sebelum aplikasi digunakan user secara penuh.
Jangan menguji email production dengan daftar penerima nyata tanpa kontrol.
40. Periksa File Upload
Jika aplikasi memiliki upload:
- Periksa
storage:link - Permission
storage - Maximum upload size PHP
- Maximum request size
- Nginx
client_max_body_size - Storage disk
- Permission directory
Contohnya Nginx dapat memiliki:
client_max_body_size 20M;
Nilainya harus disesuaikan dengan kebutuhan aplikasi.
41. Periksa PHP Upload Limit
Periksa:
php -i | grep upload_max_filesize
dan:
php -i | grep post_max_size
Jangan hanya mengubah Nginx jika PHP masih memiliki batas upload lebih kecil.
42. Periksa Timezone
Pastikan timezone aplikasi sesuai kebutuhan.
Misalnya:
APP_TIMEZONE=Asia/Jakarta
dan konfigurasi Laravel menggunakannya.
Timezone yang salah dapat menyebabkan masalah pada:
- Scheduler
- Timestamp
- Report
- Expired token
- Subscription
- Reminder
Terutama jika server menggunakan UTC tetapi aplikasi mengharapkan waktu lokal.
43. Periksa Scheduler dan Timezone
Misalnya Anda menjadwalkan:
Schedule::command('report:daily')
->dailyAt('08:00');
Pastikan Anda memahami timezone yang digunakan scheduler.
Jangan berasumsi bahwa:
08:00
pasti berarti 08:00 waktu lokal jika environment server dan aplikasi menggunakan timezone berbeda.
44. Pastikan URL Asset Benar
Jika CSS atau JavaScript tidak muncul, periksa:
APP_URL=https://example.com
dan konfigurasi asset/build aplikasi.
Jika menggunakan Vite, pastikan asset production sudah dibuild:
npm install
npm run build
Biasanya proses build dilakukan saat deployment atau CI/CD, bukan setiap request.
45. Jangan Menjalankan Development Server di Production
Hindari menggunakan:
php artisan serve
sebagai web server production.
Command tersebut cocok untuk development/testing.
Production sebaiknya menggunakan web server seperti Nginx atau Apache dengan PHP-FPM.
46. Periksa .gitignore
Pastikan file sensitif dan file lokal tidak ikut deployment melalui Git.
Minimal perhatikan:
.env
/vendor/
node_modules/
Namun aturan aktual bergantung pada strategi deployment project.
47. Periksa Build Frontend
Jika project menggunakan Vite:
npm run build
Kemudian pastikan hasil build tersedia di directory yang digunakan aplikasi.
Jika halaman tampil tetapi:
CSS hilang
JavaScript tidak berjalan
404 asset
periksa hasil build dan URL asset.
48. Pastikan Mode Maintenance Dipahami
Laravel menyediakan:
php artisan down
untuk maintenance mode.
Kemudian aplikasi dapat dikembalikan:
php artisan up
Sebelum deployment besar, maintenance mode dapat membantu mencegah user mengakses aplikasi saat database atau source code sedang berubah.
49. Periksa Health Check
Untuk production, sebaiknya tersedia cara sederhana untuk mengetahui apakah aplikasi hidup.
Misalnya endpoint:
/health
yang dapat memeriksa status dasar aplikasi.
Health check dapat digunakan oleh:
- Monitoring
- Load balancer
- Uptime checker
- Deployment system
Jangan memasukkan credential atau informasi sensitif ke endpoint health check.
50. Periksa Log Rotation
Production application menghasilkan log.
Jika tidak dikelola, file log dapat terus membesar.
Periksa konfigurasi logging Laravel dan sistem operasi.
Tujuannya:
Log
↓
Rotate
↓
Compress
↓
Delete old logs
Jangan membiarkan disk VPS penuh hanya karena log.
51. Periksa Disk Space
Gunakan:
df -h
Perhatikan terutama:
/
dan filesystem tempat Laravel berada.
Jika disk penuh:
- Laravel gagal menulis log
- Queue dapat bermasalah
- Database dapat bermasalah
- Deployment dapat gagal
- Nginx/PHP dapat mengalami error
52. Periksa Memory
Gunakan:
free -h
dan:
top
atau:
htop
Perhatikan proses:
php-fpm
queue worker
mysql
redis
nginx
Jika aplikasi menggunakan Queue dalam jumlah besar, worker dapat menjadi salah satu pengguna memory terbesar.
53. Periksa Cron
Untuk user tertentu:
crontab -l
Untuk system cron:
sudo cat /etc/crontab
Pastikan command menggunakan path yang benar.
Environment Cron berbeda dengan terminal SSH, sehingga command yang berhasil di shell belum tentu berhasil di Cron.
54. Pastikan Environment Cron Benar
Contoh yang lebih aman:
* * * * * cd /var/www/myapp && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
Dibandingkan mengandalkan:
* * * * * php artisan schedule:run
karena php atau working directory mungkin tidak tersedia dalam PATH Cron.
55. Periksa Supervisor Setelah Deployment
Jika source code berubah, Queue Worker yang sedang berjalan mungkin masih menggunakan code lama.
Setelah deployment, worker biasanya perlu direstart dengan mekanisme yang sesuai.
Laravel juga menyediakan:
php artisan queue:restart
Command tersebut memberi sinyal kepada worker untuk berhenti setelah menyelesaikan job saat ini, kemudian process manager seperti Supervisor dapat menjalankan worker baru.
56. Periksa Route Cache
Jika aplikasi menggunakan route caching:
php artisan route:cache
pastikan tidak ada route yang menggunakan closure dengan cara yang tidak kompatibel dengan route cache.
Untuk troubleshooting:
php artisan route:clear
57. Periksa View Cache
Production dapat menggunakan:
php artisan view:cache
untuk mengompilasi Blade views terlebih dahulu.
Jika terdapat perubahan view saat deployment, pastikan cache tidak menyimpan hasil lama.
58. Periksa Application Log Setelah Deployment
Setelah deployment selesai, jangan langsung meninggalkan server.
Pantau:
tail -f storage/logs/laravel.log
Kemudian lakukan:
- Buka halaman utama
- Login
- Test CRUD
- Upload file
- Test email
- Test Queue
- Test fitur penting
Perhatikan error baru yang muncul.
59. Lakukan Smoke Test
Smoke test adalah pengujian singkat untuk memastikan fungsi utama aplikasi berjalan.
Contoh:
[ ] Homepage
[ ] Login
[ ] Logout
[ ] Dashboard
[ ] Database query
[ ] CRUD
[ ] Upload
[ ] Email
[ ] Queue
[ ] Scheduler
[ ] Redis
[ ] HTTPS
Tidak harus menguji semua fitur secara manual, tetapi fungsi kritis harus diperiksa.
60. Checklist Keamanan Dasar
Sebelum production, pastikan:
[ ] APP_DEBUG=false
[ ] .env tidak public
[ ] .env tidak masuk Git
[ ] HTTPS aktif
[ ] SSH aman
[ ] Firewall aktif
[ ] MySQL tidak terbuka ke internet
[ ] Redis tidak terbuka ke internet
[ ] Permission sesuai
[ ] Credential production tidak bocor
[ ] Document root mengarah ke public/
61. Checklist Database
[ ] Database production tersedia
[ ] Credential benar
[ ] Laravel dapat connect
[ ] Migration sudah dijalankan
[ ] Backup tersedia
[ ] User database memiliki permission yang sesuai
[ ] Database tidak terbuka ke publik tanpa kebutuhan
Tes:
php artisan migrate:status
62. Checklist Redis
Jika menggunakan Redis:
[ ] Redis service aktif
[ ] REDIS_HOST benar
[ ] REDIS_PORT benar
[ ] Password benar jika digunakan
[ ] Laravel dapat connect
[ ] Cache berjalan
[ ] Queue berjalan
[ ] Redis tidak terbuka ke internet tanpa kebutuhan
Tes:
redis-cli ping
63. Checklist Queue
[ ] QUEUE_CONNECTION benar
[ ] Redis/database tersedia
[ ] Worker aktif
[ ] Supervisor/systemd aktif
[ ] Failed jobs dipantau
[ ] Timeout sesuai
[ ] Retry sesuai
[ ] Worker direstart setelah deployment
Tes:
php artisan queue:work
Gunakan hanya untuk testing manual; production sebaiknya menggunakan process manager.
64. Checklist Scheduler
[ ] Schedule terdaftar
[ ] php artisan schedule:list
[ ] schedule:run dapat berjalan
[ ] Cron aktif
[ ] Timezone benar
[ ] Command tidak membutuhkan input interaktif
[ ] Task tidak overlap jika tidak diinginkan
Tes:
php artisan schedule:run
65. Checklist Web Server
[ ] Nginx aktif
[ ] PHP-FPM aktif
[ ] Document root → public/
[ ] try_files benar
[ ] PHP-FPM socket benar
[ ] Domain benar
[ ] HTTPS aktif
[ ] Upload limit sesuai
[ ] Nginx config valid
Tes:
sudo nginx -t
66. Checklist Laravel Production
Checklist singkat yang dapat digunakan sebelum deployment:
Environment
[ ] APP_ENV=production
[ ] APP_DEBUG=false
[ ] APP_KEY tersedia
[ ] APP_URL benar
Security
[ ] HTTPS aktif
[ ] .env tidak masuk Git
[ ] Permission benar
[ ] Firewall aktif
[ ] Database/Redis tidak exposed
PHP
[ ] PHP version sesuai
[ ] Extension lengkap
[ ] PHP-FPM aktif
Laravel
[ ] composer install --no-dev
[ ] config cache
[ ] route cache jika digunakan
[ ] view cache jika digunakan
[ ] storage:link
Database
[ ] Connection berhasil
[ ] Migration sudah diverifikasi
[ ] Backup tersedia
Redis
[ ] Redis aktif
[ ] Connection berhasil
Queue
[ ] Worker aktif
[ ] Supervisor/systemd aktif
[ ] Failed jobs dipantau
Scheduler
[ ] schedule:list benar
[ ] Cron aktif
Web Server
[ ] Nginx aktif
[ ] Root mengarah ke public/
[ ] HTTPS aktif
Monitoring
[ ] Laravel log
[ ] Nginx log
[ ] Disk monitoring
[ ] Memory monitoring
[ ] Backup
Contoh Urutan Deployment Laravel ke VPS
Urutan sederhana yang dapat digunakan:
1. Upload / clone source code
↓
2. Siapkan .env production
↓
3. composer install --no-dev
↓
4. npm run build
↓
5. Konfigurasi database
↓
6. php artisan migrate --force
↓
7. php artisan storage:link
↓
8. php artisan optimize
↓
9. Konfigurasi Nginx
↓
10. Konfigurasi PHP-FPM
↓
11. Konfigurasi Queue Worker
↓
12. Konfigurasi Scheduler
↓
13. Aktifkan HTTPS
↓
14. Smoke test
↓
15. Monitor log
Tidak semua project membutuhkan semua langkah tersebut, tetapi urutan ini memberikan gambaran deployment Laravel yang cukup lengkap.
Checklist Sebelum DNS Diarahkan ke VPS
Sebelum domain diarahkan ke server baru, pastikan aplikasi dapat berjalan menggunakan server tersebut.
Minimal:
[ ] Nginx berjalan
[ ] PHP-FPM berjalan
[ ] Laravel dapat dibuka
[ ] Database connect
[ ] APP_DEBUG=false
[ ] Storage bekerja
[ ] Queue worker berjalan
[ ] Scheduler berjalan
[ ] Redis bekerja jika digunakan
[ ] SSL siap
[ ] Backup tersedia
Dengan begitu, perubahan DNS tidak sekaligus menjadi proses debugging aplikasi.
Setelah Deploy, Jangan Langsung Dianggap Selesai
Deployment selesai bukan berarti pekerjaan selesai.
Beberapa jam atau hari pertama, pantau:
tail -f storage/logs/laravel.log
Periksa juga:
sudo tail -f /var/log/nginx/error.log
Kemudian pantau:
df -h
free -h
Perhatikan apakah ada:
- Error baru
- Memory tinggi
- Disk penuh
- Queue menumpuk
- Failed jobs
- Scheduler tidak berjalan
- Request lambat
Kesimpulan
Deploy Laravel ke VPS membutuhkan lebih dari sekadar memindahkan source code dan menjalankan aplikasi.
Beberapa konfigurasi paling penting yang wajib diperiksa adalah:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
Kemudian pastikan:
Laravel
↓
PHP-FPM
↓
Nginx
↓
HTTPS
serta service pendukung:
MySQL
Redis
Queue Worker
Scheduler
berjalan sesuai kebutuhan.
Checklist paling penting sebelum production adalah:
[ ] .env production benar
[ ] APP_DEBUG=false
[ ] APP_KEY aman
[ ] Database connect
[ ] Redis connect jika digunakan
[ ] Permission benar
[ ] public/ menjadi document root
[ ] Nginx + PHP-FPM berjalan
[ ] HTTPS aktif
[ ] Queue Worker berjalan
[ ] Scheduler + Cron berjalan
[ ] Cache Laravel sudah diperbarui
[ ] Backup tersedia
[ ] Log dapat dipantau
[ ] Smoke test berhasil
Dengan melakukan pengecekan ini secara sistematis, risiko masalah setelah deployment Laravel ke VPS dapat dikurangi secara signifikan.

