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:
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:
Jangan biarkan production memakai local, karena beberapa package atau konfigurasi bisa memperlakukan environment local dengan cara yang lebih longgar.
2. APP_DEBUG=false
Gunakan:
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 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:
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:
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:
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:
Jika sudah memakai queue production:
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:
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:
Untuk deploy production, biasanya urutannya:
Jika sedang debugging konfigurasi, mulai dari config:clear agar nilai .env terbaru terbaca.
Cara Mengecek Nilai yang Aktif
Gunakan:
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:
Pastikan file secret masuk .gitignore.
Mengubah .env Tetapi Lupa config:clear
Gejalanya: nilai di server terasa tidak berubah walaupun .env sudah diedit. Bersihkan cache:
Lalu cache ulang setelah benar:
APP_DEBUG=true Saat Error Production
Saat panik, pemula sering menyalakan debug di server publik. Lebih aman cek 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:
Ubah ke domain production.
Password Mengandung Spasi Tidak Dikutip
Jika value mengandung spasi, bungkus dengan tanda kutip:
Ini juga berguna untuk nama aplikasi atau value lain yang bukan satu kata.
Pencegahan
- Simpan
.env.exampleyang rapi dan tidak berisi secret. - Gunakan password manager untuk secret production.
- Cek
APP_DEBUG,APP_URL, database, session, mail, queue, dan cache sebelum go live. - Jalankan
php artisan aboutsetelah deploy. - Jangan menulis
env()langsung di controller atau model; baca lewat file config. - Dokumentasikan perubahan
.envdi checklist deploy internal.
Bacaan Terkait
- Cara Deploy Laravel ke VPS
- Setup Nginx + PHP-FPM untuk Laravel
- Cara Menjalankan Scheduler Laravel di Production
- Setup Supervisor untuk Queue Laravel
- Cara Mengatasi 419 Page Expired di Laravel
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.