Singkat cerita saya butuh konfigurasi yang berbeda-beda di tiap sub-domain, tapi dengan menggunakan core aplikasi yang sama. Maksudnya gini, kalau membuat sub-domain, maka ada folder khusus untuk sub-domain. Isi sub-domain ini adalah isi dari folder public. Misalnya begini struktur folder-nya

~/company1.example.com
  company2.example.com
  company3.example.com
  main_app

Nah, lokasi aplikasi utama ada di main_app. Sedangkan company1/2/3 maunya menggunakan core-nya si main_app tapi dengan konfigurasi environment dan database yang berbeda. Gimana caranya? :/

Update bootstrap/app.php

Tambahkan ini sebelum return $app;

if (is_readable(getcwd().'/.env')) {
    $app->useEnvironmentPath( getcwd() );
}

Yup, selesai šŸ˜€

Sekarang kalau menuju ke http://company1.example.com, maka akan menggunakan konfigurasi dari company1.example.com/.env

Weits, jangan lupa juga file .env diamankan. Kalau menggunakan Apache HTTPD

<Files ".env">
    Order Allow,Deny
    Deny from all
</Files>

Nginx

location ~ /\.env
{ 
    deny all; 
}
Iklan

8 pemikiran pada “Multiple .env di Laravel

  1. Mau minta saran, untuk pengembangan 3 web dengan subdomain yg berbeda. Lebih baik di pisah menjadi 3 project (aplikasi laravel) atau semua ditempatkan dalam 1 project?

    Jika dijadikkan satu project, saat dilakukan maintenance (php artisan down) apa dapat dilakukan pemilihan (subdomain yg tetap run)?

    Terima Kasih

    1. Pada dasarnya artisan down hanya membuat file kosong dengan nama down pada storage/framework/down. Dan pengecekan maintenance mode ini ada di App/Http/Kernel.php.

      Di dalam App/Http/Kernel.php ada middleware \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class

      Nah, kita bisa ubah middleware tersebut. Buat middleware baru yang menggantikan default middleware untuk pengecekan maintenance. Sehingga subdomain yang lain bisa tetap jalan.

      1. Terima kasih atas jawabannya. Jadi dapat disimpulkan bahwa lebih baik menggunakan 1 project. Masih berkaitan dengan Maintenance mode. Didokumentasi laravel ada peringatan:

        While your application is in maintenance mode, no queued jobs will be handled. The jobs will continue to be handled as normal once the application is out of maintenance mode.

        Itu bisa dihandle juga dengan edit middleware mas?
        Satu lagi, berhubung saya masih newbie dan coba googling sama cek dokumentasi laravel belum nemu. Bisa tolong kasih referensi konfig middleware tersebut?

      2. Tidak dengan middleware. Queue worker akan tetap mengecek file storage/framework/down. Solusinya bisa modifikasi lokasi storage folder pada masing-masing subdomain. Caranya dengan menambahkan code seperti ini pada bootstrap/app.php

        $app->useStoragePath(__DIR__.'/../lokasi_baru');
        

        Nanti semua pengecekan file down akan diarahkan ke lokasi_baru/framework/down.

        Btw, saya belum pernah coba real-nya nih dengan cara seperti ini.

  2. baru-baru ini saya punya kasus sama seperti tulisan mas Mulia. akan tetapi handling credentials partner / client berdasarkan subdomain dibuat dengan cara membuat middleware untuk set semua configurasi berdasarkan subdomain partner tersebut.

    akan tetapi ada masalah lain, ketika saya membuat queue job yang membutuhkan credentials dari middleware yang saya buat diatas. semua configurasinya selalu null karena proses eksekusi job tidak melalui middleware tersebut.

    damn!!!, kenapa baru sekarang saya membaca artikel ini šŸ˜€

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s