Laravel .env Production: Checklist Aman

File .env production menentukan cara Laravel berjalan di server publik. Jawaban cepatnya: gunakan APP_ENV=production, APP_DEBUG=false, APP_URL sesuai domain, database production yang benar, kredensial yang kuat, lalu jalankan ulang cache config setelah perubahan.

Kesalahan .env bisa membuat aplikasi terlihat rusak walaupun kode sudah benar. Form login bisa gagal, URL asset bisa salah, email tidak terkirim, queue tidak jalan, atau detail error sensitif tampil ke user.

Kenapa .env Production Penting?

Laravel membaca konfigurasi penting dari .env, misalnya:

  • mode aplikasi
  • debug aktif atau tidak
  • domain utama
  • koneksi database
  • session dan cache
  • mail server
  • queue driver
  • storage disk

Di lokal, .env boleh dibuat nyaman untuk development. Di production, .env harus aman, stabil, dan sesuai server.

Contoh .env Production Minimal

Contoh ini bukan untuk disalin mentah-mentah. Gunakan sebagai checklist:

APP_NAME="Toko Laravel"
APP_ENV=production
APP_KEY=base64:isi-key-production
APP_DEBUG=false
APP_URL=https://tokolaravel.com

LOG_CHANNEL=stack
LOG_LEVEL=error

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=toko_laravel
DB_USERNAME=toko_user
DB_PASSWORD=password-kuat-dari-password-manager

CACHE_STORE=file
QUEUE_CONNECTION=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_SECURE_COOKIE=true

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=apikey-atau-username
MAIL_PASSWORD=secret-mail
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"

Nama key bisa sedikit berbeda antar versi Laravel atau starter kit. Ikuti .env.example dari project kamu, lalu isi nilai production dengan benar.

Checklist Wajib

1. APP_ENV=production

Gunakan:

APP_ENV=production

Jangan biarkan production memakai local, karena beberapa package atau konfigurasi bisa memperlakukan environment local dengan cara yang lebih longgar.

2. APP_DEBUG=false

Gunakan:

APP_DEBUG=false

Jika debug aktif di server publik, Laravel bisa menampilkan stack trace dan detail konfigurasi yang tidak seharusnya dilihat user.

3. APP_URL Sesuai Domain

Gunakan domain final:

APP_URL=https://tokolaravel.com

APP_URL berpengaruh pada URL yang dibuat Laravel, link email, asset tertentu, signed URL, dan beberapa integrasi. Jangan biarkan tetap http://localhost.

4. APP_KEY Ada dan Stabil

Project Laravel butuh APP_KEY untuk enkripsi. Jika belum ada:

php artisan key:generate

Jangan mengganti APP_KEY sembarangan di production. Perubahan key bisa membuat data terenkripsi lama tidak bisa dibaca, termasuk cookie atau data lain yang bergantung pada enkripsi Laravel.

5. Database Mengarah ke Production

Cek ulang:

DB_DATABASE=toko_laravel
DB_USERNAME=toko_user
DB_PASSWORD=password-kuat

Jangan memakai database lokal, database staging, atau user database yang terlalu luas permission-nya. Untuk aplikasi kecil, minimal pastikan nama database dan user sudah khusus untuk aplikasi tersebut.

6. Session Cocok dengan Domain dan HTTPS

Jika aplikasi memakai HTTPS, aktifkan secure cookie:

SESSION_SECURE_COOKIE=true

Jika login sering mental atau error 419 muncul di production, cek juga APP_URL, domain, HTTPS, dan session driver. Masalah ini sering terlihat seperti bug auth, padahal akar masalahnya konfigurasi environment.

7. Queue dan Scheduler Jelas

Jika aplikasi belum memakai background job:

QUEUE_CONNECTION=sync

Jika sudah memakai queue production:

QUEUE_CONNECTION=database

Lalu pastikan queue worker dijalankan dengan Supervisor. Untuk pekerjaan terjadwal, pastikan cron scheduler juga aktif.

8. Mail Tidak Masih log

Di lokal, MAIL_MAILER=log aman untuk testing. Di production, gunakan SMTP atau provider email yang benar:

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587

Test fitur lupa password, verifikasi email, invoice, atau notifikasi setelah deploy.

Setelah Mengubah .env

Jika aplikasi memakai cache config, perubahan .env tidak otomatis terbaca sampai cache dibersihkan atau dibuat ulang.

Gunakan:

php artisan config:clear
php artisan config:cache

Untuk deploy production, biasanya urutannya:

composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart

Jika sedang debugging konfigurasi, mulai dari config:clear agar nilai .env terbaru terbaca.

Cara Mengecek Nilai yang Aktif

Gunakan:

php artisan about
php artisan config:show app
php artisan config:show database

Jangan menampilkan seluruh .env di screenshot, tiket support publik, atau chat. File ini berisi secret.

Kesalahan yang Sering Terjadi

Commit File .env ke Git

File .env berisi password, token, dan secret. Jangan commit file ini.

Yang boleh dicommit adalah .env.example:

.env
.env.local
.env.production

Pastikan file secret masuk .gitignore.

Mengubah .env Tetapi Lupa config:clear

Gejalanya: nilai di server terasa tidak berubah walaupun .env sudah diedit. Bersihkan cache:

php artisan config:clear

Lalu cache ulang setelah benar:

php artisan config:cache

APP_DEBUG=true Saat Error Production

Saat panik, pemula sering menyalakan debug di server publik. Lebih aman cek log:

tail -f storage/logs/laravel.log

Jika harus men-debug, lakukan sebentar, batasi akses, dan matikan lagi. Untuk situs publik, default-nya tetap APP_DEBUG=false.

APP_URL Masih Localhost

Ini bisa membuat link email dan URL asset mengarah ke domain salah:

APP_URL=http://localhost

Ubah ke domain production.

Password Mengandung Spasi Tidak Dikutip

Jika value mengandung spasi, bungkus dengan tanda kutip:

APP_NAME="Toko Laravel"

Ini juga berguna untuk nama aplikasi atau value lain yang bukan satu kata.

Pencegahan

  1. Simpan .env.example yang rapi dan tidak berisi secret.
  2. Gunakan password manager untuk secret production.
  3. Cek APP_DEBUG, APP_URL, database, session, mail, queue, dan cache sebelum go live.
  4. Jalankan php artisan about setelah deploy.
  5. Jangan menulis env() langsung di controller atau model; baca lewat file config.
  6. Dokumentasikan perubahan .env di checklist deploy internal.

Bacaan Terkait

Referensi Resmi

FAQ

Apakah .env production boleh sama dengan lokal?

Tidak. Domain, database, debug mode, mail, cache, session, dan queue production biasanya berbeda dari lokal.

Kenapa perubahan .env tidak terbaca?

Biasanya karena config sudah di-cache. Jalankan php artisan config:clear, cek ulang, lalu php artisan config:cache jika sudah benar.

Apakah APP_KEY boleh digenerate ulang?

Untuk project baru boleh. Untuk production yang sudah punya user dan data, jangan ganti sembarangan karena bisa berdampak pada data terenkripsi dan session.

Apa nilai LOG_LEVEL yang aman?

Untuk production pemula, error cukup aman. Jika perlu investigasi sementara, bisa dinaikkan lebih detail, lalu dikembalikan setelah masalah selesai.

Apakah .env.example harus lengkap?

Sebaiknya iya. .env.example tidak berisi secret, tetapi harus menunjukkan key apa saja yang dibutuhkan agar deploy tidak menebak-nebak.