Cara Mengatur File .env Laravel untuk Server Production dengan Aman
Apa Itu File .env pada Laravel?
File .env adalah file konfigurasi lingkungan yang digunakan Laravel untuk menyimpan nilai yang dapat berbeda pada setiap server.
Sebagai contoh, aplikasi yang dijalankan di komputer lokal dapat menggunakan database, alamat website, layanan email, dan pengaturan cache yang berbeda dari server production.
Beberapa informasi yang biasanya disimpan di dalam file .env meliputi:
Nama dan lingkungan aplikasi.
Application key.
URL website.
Koneksi database.
Konfigurasi session.
Sistem cache.
Queue atau antrean pekerjaan.
Konfigurasi email.
Kredensial Redis.
API key layanan pihak ketiga.
Laravel menggunakan file .env agar informasi tersebut tidak harus ditulis secara langsung di dalam source code. File .env juga tidak boleh dimasukkan ke repository karena dapat berisi password database, API key, dan informasi rahasia lainnya. (Laravel)
Mengapa Konfigurasi .env Production Harus Diperhatikan?
Kesalahan konfigurasi .env dapat menyebabkan berbagai masalah, seperti:
Informasi error tampil kepada pengunjung.
Database gagal terhubung.
Email tidak terkirim.
Session pengguna tidak tersimpan.
Queue tidak berjalan.
URL yang dibuat aplikasi menjadi salah.
Application key tidak ditemukan.
Kredensial layanan bocor.
Website masih menggunakan konfigurasi lokal.
Perubahan
.envtidak terbaca karena cache.
Pada server production, file .env harus disesuaikan dengan domain, database, layanan email, dan infrastruktur yang benar-benar digunakan.
Konfigurasi Dasar Laravel untuk Production
Berikut contoh konfigurasi dasar yang dapat digunakan sebagai referensi:
APP_NAME="Nama Aplikasi"
APP_ENV=production
APP_KEY=base64:APPLICATION_KEY_ANDA
APP_DEBUG=false
APP_URL=https://domainanda.com
APP_LOCALE=id
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=id_ID
LOG_CHANNEL=stack
LOG_LEVEL=error
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=user_database
DB_PASSWORD=password_database
SESSION_DRIVER=database
SESSION_LIFETIME=120
CACHE_STORE=database
QUEUE_CONNECTION=database
MAIL_MAILER=smtp
MAIL_HOST=smtp.domainanda.com
MAIL_PORT=587
MAIL_USERNAME=email@domainanda.com
MAIL_PASSWORD=password_email
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=email@domainanda.com
MAIL_FROM_NAME="${APP_NAME}"
Konfigurasi tersebut hanya contoh. Nama variabel dapat berbeda tergantung versi Laravel, paket yang digunakan, serta isi file dalam folder config.
Sebaiknya gunakan .env.example dari project Anda sebagai acuan utama, kemudian isi nilainya sesuai dengan server production.
1. Gunakan APP_ENV=production
Pada server production, gunakan:
APP_ENV=production
Nilai APP_ENV digunakan Laravel untuk menentukan lingkungan aplikasi yang sedang berjalan.
Beberapa paket atau konfigurasi aplikasi juga dapat menggunakan nilai tersebut untuk membedakan pengaturan lokal, staging, dan production.
Hindari menggunakan:
APP_ENV=local
pada website yang sudah dapat diakses oleh pelanggan.
2. Pastikan APP_DEBUG=false
Konfigurasi terpenting untuk server production adalah:
APP_DEBUG=false
Ketika APP_DEBUG=true, Laravel dapat menampilkan detail error, struktur folder, query, konfigurasi, dan informasi lain yang seharusnya tidak dilihat oleh pengunjung.
Laravel secara resmi memperingatkan bahwa APP_DEBUG harus selalu bernilai false pada production karena mode debug dapat mengekspos nilai konfigurasi sensitif kepada pengguna. (Laravel)
Gunakan APP_DEBUG=true hanya pada lingkungan pengembangan yang tidak dapat diakses secara publik.
3. Atur APP_URL Sesuai Domain
Gunakan alamat domain lengkap dengan HTTPS:
APP_URL=https://domainanda.com
Jangan menggunakan:
APP_URL=http://localhost
atau:
APP_URL=http://127.0.0.1:8000
pada server production.
Nilai APP_URL dapat digunakan aplikasi ketika membuat URL, tautan email, file, notifikasi, atau perintah yang dijalankan melalui terminal.
Jika aplikasi menggunakan subdomain, masukkan alamat subdomain yang benar:
APP_URL=https://app.domainanda.com
Pastikan alamat yang digunakan sesuai dengan konfigurasi SSL dan domain pada server.
4. Pastikan APP_KEY Sudah Terisi
Application key disimpan pada bagian:
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
Jika masih kosong, jalankan:
php artisan key:generate
Laravel merekomendasikan perintah tersebut karena menghasilkan key menggunakan generator angka acak yang aman dari PHP. (Laravel)
Jangan membuat application key baru secara sembarangan pada aplikasi production yang sudah digunakan.
Mengganti APP_KEY dapat menyebabkan:
Seluruh pengguna keluar dari akun.
Cookie lama tidak dapat dibaca.
Data terenkripsi gagal dibuka.
Token tertentu menjadi tidak valid.
Laravel mendukung rotasi key menggunakan APP_PREVIOUS_KEYS, tetapi proses tersebut tetap harus direncanakan dan diuji dengan baik. (Laravel)
Sebelum mengubah APP_KEY, selalu buat backup file .env dan simpan key lama di tempat yang aman.
5. Atur Koneksi Database dengan Benar
Contoh konfigurasi MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=user_database
DB_PASSWORD="password_database"
Pada shared hosting, nilai DB_HOST biasanya menggunakan:
DB_HOST=localhost
Namun, beberapa penyedia hosting menggunakan alamat database khusus. Gunakan informasi yang diberikan oleh penyedia server.
Jika password mengandung karakter khusus atau spasi, gunakan tanda kutip:
DB_PASSWORD="Password!Dengan#Karakter$Khusus"
Jangan menggunakan akun root database untuk aplikasi production apabila server memungkinkan pembuatan pengguna database khusus.
Buat pengguna database dengan hak akses yang hanya diperlukan oleh aplikasi.
6. Pilih Session Driver yang Sesuai
Session digunakan untuk menyimpan status login dan informasi sementara pengguna.
Beberapa pilihan session driver Laravel meliputi:
SESSION_DRIVER=file
SESSION_DRIVER=database
atau:
SESSION_DRIVER=redis
Untuk aplikasi yang berjalan pada satu server sederhana, driver file dapat digunakan selama folder session memiliki permission yang benar.
Untuk aplikasi multi-server atau sistem yang membutuhkan pengelolaan session terpusat, database atau Redis biasanya lebih sesuai.
Jika menggunakan:
SESSION_DRIVER=database
pastikan tabel sessions tersedia. Laravel menyediakan perintah untuk membuat migration tabel session jika project belum memilikinya. (Laravel)
Jalankan:
php artisan make:session-table
php artisan migrate
Periksa terlebih dahulu migration project karena versi Laravel baru mungkin sudah menyertakan tabel session secara default.
7. Atur Cache untuk Production
Cache membantu aplikasi menyimpan data yang sering digunakan agar tidak selalu diproses ulang.
Pilihan yang dapat digunakan antara lain:
CACHE_STORE=file
CACHE_STORE=database
atau:
CACHE_STORE=redis
Untuk aplikasi kecil pada satu server, file atau database dapat digunakan.
Redis lebih sesuai untuk aplikasi dengan trafik lebih besar, banyak worker, atau beberapa server. Laravel mendukung berbagai backend cache, termasuk database, Redis, Memcached, dan DynamoDB. (Laravel)
Jika menggunakan database cache, pastikan tabel cache tersedia dan migration telah dijalankan.
8. Atur Queue Connection
Queue digunakan untuk memproses pekerjaan di belakang layar, seperti:
Mengirim email.
Membuat laporan.
Memproses gambar.
Mengirim notifikasi.
Sinkronisasi data.
Menjalankan integrasi API.
Untuk pengujian sederhana, aplikasi dapat menggunakan:
QUEUE_CONNECTION=sync
Namun, seluruh pekerjaan akan dijalankan pada request yang sama sehingga pengguna harus menunggu proses selesai.
Untuk production, Anda dapat menggunakan:
QUEUE_CONNECTION=database
atau:
QUEUE_CONNECTION=redis
Jika menggunakan queue selain sync, pastikan worker dijalankan melalui Supervisor, systemd, atau process monitor lainnya.
Queue worker merupakan proses yang berjalan dalam waktu lama. Setelah konfigurasi atau source code diperbarui, worker perlu dimulai ulang agar membaca perubahan terbaru. (Laravel)
Perintah yang dapat digunakan:
php artisan queue:restart
Jika menggunakan Laravel Horizon:
php artisan horizon:terminate
9. Atur Konfigurasi Email
Contoh konfigurasi SMTP:
MAIL_MAILER=smtp
MAIL_HOST=smtp.domainanda.com
MAIL_PORT=587
MAIL_USERNAME=email@domainanda.com
MAIL_PASSWORD="password-email"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=email@domainanda.com
MAIL_FROM_NAME="${APP_NAME}"
Periksa informasi berikut:
Alamat server SMTP.
Port SMTP.
Jenis enkripsi.
Username.
Password.
Alamat pengirim.
Nama pengirim.
Jangan menggunakan konfigurasi email pengujian pada server production.
Lakukan pengujian pengiriman email setelah deployment, terutama untuk fitur:
Reset password.
Verifikasi email.
Invoice.
Notifikasi pesanan.
Pemberitahuan sistem.
10. Atur Logging dengan Wajar
Laravel mendukung beberapa channel log, seperti file tunggal, log harian, system error log, dan layanan eksternal. (Laravel)
Contoh sederhana:
LOG_CHANNEL=stack
LOG_LEVEL=error
Untuk kebutuhan monitoring yang lebih lengkap, tingkat log dapat disesuaikan:
LOG_LEVEL=warning
Jangan mencatat password, token, API key, nomor kartu, atau data sensitif lainnya ke dalam log.
Periksa juga kapasitas penyimpanan karena file log yang tidak dikelola dapat memenuhi ruang server.
Untuk log berbasis file, Anda dapat menggunakan channel harian dan menetapkan kebijakan penghapusan log lama melalui konfigurasi aplikasi.
11. Jangan Memanggil env() Langsung di Controller
Hindari penggunaan seperti berikut di controller atau service:
$apiKey = env('PAYMENT_API_KEY');
Masukkan environment variable ke file konfigurasi terlebih dahulu.
Contoh pada config/services.php:
'payment' => [
'key' => env('PAYMENT_API_KEY'),
],
Kemudian panggil melalui:
$apiKey = config('services.payment.key');
Laravel menyatakan bahwa setelah konfigurasi di-cache, file .env tidak dimuat pada setiap request. Karena itu, fungsi env() sebaiknya hanya digunakan di dalam file konfigurasi pada folder config. (Laravel)
12. Jalankan Configuration Cache
Setelah seluruh isi .env diperiksa, jalankan:
php artisan config:clear
php artisan config:cache
Atau gunakan:
php artisan optimize
Laravel merekomendasikan cache konfigurasi sebagai bagian dari proses deployment production. Perintah php artisan optimize juga dapat melakukan cache konfigurasi, event, route, dan view. (Laravel)
Setelah config:cache dijalankan, perubahan pada .env tidak langsung terbaca.
Jika Anda mengubah .env, jalankan kembali:
php artisan config:clear
php artisan config:cache
Untuk membersihkan seluruh cache optimasi:
php artisan optimize:clear
13. Jangan Upload File .env ke Repository
Pastikan file .gitignore memiliki baris berikut:
.env
File .env tidak boleh dimasukkan ke GitHub, GitLab, atau repository publik.
Gunakan .env.example sebagai template:
APP_NAME=
APP_ENV=
APP_KEY=
APP_DEBUG=
APP_URL=
DB_CONNECTION=
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
Jangan masukkan password atau API key asli ke dalam .env.example.
Laravel secara resmi menyarankan agar .env tidak disimpan di source control karena setiap lingkungan memiliki konfigurasi berbeda dan file tersebut dapat mengekspos kredensial sensitif. (Laravel)
14. Lindungi Permission File .env
Batasi akses file .env hanya kepada pengguna dan proses server yang benar-benar membutuhkan.
Permission yang terlalu terbuka dapat memungkinkan pengguna server lain membaca kredensial aplikasi.
Pada VPS, permission dapat diatur sesuai ownership server, misalnya:
chmod 640 .env
atau pada konfigurasi yang lebih terbatas:
chmod 600 .env
Jangan langsung menyalin angka permission tanpa memeriksa user PHP-FPM, web server, dan ownership project.
Prinsip utamanya adalah memberikan akses minimum yang diperlukan. OWASP juga merekomendasikan penggunaan sistem pengelolaan secrets khusus, pembatasan hak akses, audit, serta rotasi kredensial untuk lingkungan production. (cheatsheetseries.owasp.org)
15. Pastikan Web Root Mengarah ke Folder Public
Server Laravel harus diarahkan ke:
/project-laravel/public
Jangan arahkan domain ke root project yang berisi:
.env
app
bootstrap
config
storage
vendor
Laravel memperingatkan bahwa web server harus mengarahkan request ke public/index.php. Menjalankan website dari root project dapat mengekspos file konfigurasi sensitif ke internet. (Laravel)
Pada shared hosting, source Laravel dapat ditempatkan di luar public_html, sedangkan isi folder public digunakan sebagai document root domain.
16. Gunakan Secret Manager untuk Sistem yang Lebih Besar
Untuk aplikasi perusahaan, container, Kubernetes, atau infrastruktur cloud, kredensial tidak harus selalu disimpan sebagai file .env biasa.
Perusahaan dapat menggunakan:
AWS Secrets Manager.
Google Secret Manager.
Azure Key Vault.
HashiCorp Vault.
Secret management dari platform deployment.
Secret injection melalui deployment pipeline.
Secret manager membantu mengelola hak akses, rotasi, audit, dan perubahan kredensial secara lebih terstruktur.
OWASP menyarankan penggunaan layanan yang memang dirancang khusus untuk mengelola secret, termasuk pencatatan aktivitas serta siklus pembuatan, rotasi, pencabutan, dan kedaluwarsa kredensial. (cheatsheetseries.owasp.org)
Urutan Deployment yang Disarankan
Berikut contoh urutan deployment Laravel:
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize:clear
php artisan optimize
php artisan queue:restart
Jika menggunakan Horizon:
php artisan horizon:terminate
Pastikan folder berikut dapat ditulis oleh web server:
storage
bootstrap/cache
Laravel menyebutkan bahwa web server membutuhkan hak tulis pada kedua folder tersebut agar aplikasi dapat berjalan dengan benar. (Laravel)
Checklist File .env Laravel Production
Sebelum website dibuka untuk pengguna, periksa beberapa hal berikut:
APP_ENV=production.APP_DEBUG=false.APP_URLmenggunakan domain dan HTTPS.APP_KEYsudah tersedia.Database production sudah benar.
Password database tidak menggunakan kredensial lokal.
Konfigurasi session tersedia.
Cache driver sudah sesuai.
Queue worker berjalan.
SMTP berhasil mengirim email.
API key production sudah digunakan.
File
.envtidak masuk repository.Permission file dibatasi.
Domain mengarah ke folder
public.Cache konfigurasi sudah dibuat.
Worker telah dimulai ulang.
Backup
.envdisimpan dengan aman.Log tidak menampilkan informasi sensitif.
Kesalahan yang Sering Terjadi
Beberapa kesalahan umum ketika mengatur .env production adalah:
APP_DEBUG Masih Aktif
APP_DEBUG=true
Kondisi ini dapat menampilkan informasi sensitif saat terjadi error.
APP_URL Masih Localhost
APP_URL=http://localhost
Akibatnya, tautan email dan URL aplikasi dapat mengarah ke alamat yang salah.
Mengubah .env tanpa Membersihkan Cache
Perubahan tidak terbaca karena Laravel masih menggunakan cached configuration.
Menggunakan APP_KEY dari Aplikasi Lain
Setiap aplikasi sebaiknya memiliki key sendiri.
Menjalankan key:generate pada Aplikasi Aktif
Hal ini dapat memutus session dan membuat data terenkripsi lama tidak dapat dibaca.
Mengunggah .env ke GitHub
Kredensial server dapat terlihat oleh pihak lain.
Menempatkan Project di Document Root
File .env, source code, dan folder internal dapat berisiko terakses publik.
Menyimpan Password Langsung di Source Code
Kredensial harus dikelola melalui konfigurasi atau secret manager, bukan ditulis di controller maupun repository.
Pengembangan dan Deployment Laravel Bersama Ovla Media
Pengaturan .env merupakan salah satu bagian penting dalam deployment Laravel. Namun, aplikasi production juga membutuhkan konfigurasi web server, database, permission, SSL, queue, scheduler, backup, dan monitoring.
Ovla Media menyediakan layanan pengembangan, deployment, perbaikan, dan pemeliharaan aplikasi Laravel.
Layanan yang dapat disesuaikan meliputi:
Deployment Laravel ke cPanel.
Deployment Laravel ke VPS.
Konfigurasi Nginx atau Apache.
Pengaturan file
.env.Migrasi database.
Konfigurasi queue dan scheduler.
Integrasi payment gateway.
Integrasi email dan API.
Perbaikan permission dan storage.
Optimasi aplikasi production.
Migrasi dari shared hosting ke VPS.
Pengembangan aplikasi bisnis custom.
Kesimpulan
File .env menyimpan berbagai konfigurasi penting yang dibutuhkan aplikasi Laravel.
Pada server production, pastikan konfigurasi utama menggunakan:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://domainanda.com
Pastikan juga APP_KEY, database, email, session, cache, queue, serta kredensial layanan pihak ketiga telah disesuaikan dengan server production.
File .env tidak boleh disimpan di repository, tidak boleh dapat diakses publik, dan hak aksesnya harus dibatasi.
Setelah konfigurasi selesai, jalankan:
php artisan optimize:clear
php artisan optimize
Jika aplikasi menggunakan queue worker, restart worker agar membaca konfigurasi terbaru.
Dengan pengaturan .env yang benar, aplikasi Laravel dapat berjalan dengan lebih aman, stabil, dan siap digunakan dalam lingkungan production.
Butuh implementasi untuk kebutuhan bisnis?
OVLA Media membantu pengembangan dan optimasi aplikasi web, integrasi sistem, serta solusi Laravel sesuai kebutuhan perusahaan Anda.
Artikel Terkait
Cara Membuat Sinkronisasi Stok Antar-Aplikasi Menggunakan Laravel API
Sinkronisasi stok antar-aplikasi memungkinkan jumlah persediaan tetap konsisten antara sistem seperti POS, inventory, marketplace, dan gudang. Laravel API dapat digunakan untuk mengirim perubahan stok secara otomatis sehingga setiap aplikasi memiliki informasi persediaan yang lebih akurat.
Cara Membuat Audit Log Aktivitas Pengguna di Laravel
Audit log Laravel digunakan untuk mencatat aktivitas pengguna di dalam aplikasi, seperti login, logout, membuat data, mengubah data, dan menghapus data. Dengan audit log, administrator dapat mengetahui siapa yang melakukan perubahan, kapan aktivitas terjadi, dan data apa yang terpengaruh.
Cara Deploy Laravel ke VPS Ubuntu Menggunakan Nginx dan PHP-FPM
Deploy Laravel ke VPS Ubuntu membutuhkan beberapa komponen seperti Nginx, PHP-FPM, database, Composer, dan konfigurasi permission. Dengan konfigurasi yang tepat, aplikasi Laravel dapat berjalan lebih stabil dan aman di server production.