TechTopia Casing SSD NVMe NGFF USB 3.1 Type-C Enclosure Eksternal M.2 SATA & NVMe High Speed

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:

  • tries
  • timeout
  • retry_after
  • backoff
  • 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.