カテゴリー
Linux

Laracel 6 で、 `.env` ファイルの名前を変えて運用する方法

まとめ

  • composer.json を修正する。
    • "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" を修正する。例えば、 "@php -r \"file_exists('.env.laravel') || copy('.env.laravel.example', '.env.laravel');\"" とする。
    • @php artisan package:discover --ansi を修正する。例えば、 @php artisan package:discover --ansi --env=laravel とする。
    • 同様に @php artisan key:generate --ansi を修正する。例えば、 @php artisan key:generate --ansi --env=laravel とする。
  • サーバレベル、システムレベルやコンテナレベルで定義されている外部の環境変数によって使用する .env ファイル名を制御する。例えば、 APP_ENV=laravel とする。

具体的な使い途

decker-compose.yml に読み込ませる .env ファイルと、 Laravel に読み込ませる .env ファイルを同じディレクトリにおきたいときに問題が発生します。このとき Laravel に読み込ませるファイル名を変更することで問題を回避できます。

なお、ドキュメントをあさってみましたけれども、 Docker Compose に読み込ませる環境設定ファイルは、 .env 以外は不可能なようでした。ですので、 Laravel に読み込ませるファイル名の方を変更します。

具体的なコード

次のように修正することで実現できました。

Laravel をコンテナ化して動作させておりますので、 Dockerfile にコンテナの環境変数として ENV APP_ENV laravel の定義を追加しております。

もし、コンテナではない環境の場合では、 export APP_ENV=laravel といったコマンドを実行すれば良いかと存じます。

$ git diff --cached
diff --git a/.env.example b/.env.laravel.example
similarity index 100%
rename from .env.example
rename to .env.laravel.example
diff --git a/.gitignore b/.gitignore
index 34ec6d5..3c86da5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,8 +6,8 @@
 /public/storage
 /storage/*.key
 /vendor
-.env
 .env.backup
+.env.laravel
 .phpunit.result.cache
 Homestead.json
 Homestead.yaml
diff --git a/Dockerfile b/Dockerfile
index 6f54432..67cfe5c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,6 +19,7 @@ COPY ./docker/000-default.conf /etc/apache2/sites-available/000-default.conf
 ENV APACHE_DOCUMENT_ROOT /var/www/html/public
 RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
 RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
+ENV APP_ENV laravel

 FROM composer:1.9.3 AS composer

diff --git a/composer.json b/composer.json
index 4d19d86..ae00022 100644
--- a/composer.json
+++ b/composer.json
@@ -50,13 +50,13 @@
     "scripts": {
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
-            "@php artisan package:discover --ansi"
+            "@php artisan package:discover --ansi --env=laravel"
         ],
         "post-root-package-install": [
-            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+            "@php -r \"file_exists('.env.laravel') || copy('.env.laravel.example', '.env.laravel');\""
         ],
         "post-create-project-cmd": [
-            "@php artisan key:generate --ansi"
+            "@php artisan key:generate --ansi --env=laravel"
         ]
     }
 }

$

@php artisan package:discover --ansi --env=laravel について

.env から .env.laravel へとファイル名を変更しました。

Docker ビルド時、 Laravel インストール後に @php artisan package:discover --ansi を実行いたします。このとき、このままではエラーとなってしまいました。

原因は、 Laravel インストールは運用するときのコンテナではなく、 Composer コンテナで行い、このコンテナには環境変数に APP_ENV=laravel が設定されていないからなのでした。

これを解消するには、

  • Composer コンテナに環境変数 APP_ENV=laravel を設定する。
  • Laravel インストール後のコマンド実行時のオプションに --env=laravel を追加する。

の 2 つのやり方が思いつきます。

今回はオプションで対応しました。(今ふと思うと、 Composer コンテナに環境変数を設定するほうが筋が良いかもしれない)

オプションで指定するとき、混乱しました。

--env=.env.laravel と素直にファイル名を指定してはダメで、 --env=laravel と、 .env.laravel の先頭の .env. を除いた部分を指定する必要がありました。

読み込む環境設定ファイルを決定しているロジックのコードを見る

参考ページ

おわりに

Laravel を Docker 化することを以前行いまいした。データーベースもコンテナを利用したい、そうすると Docker Compose を使いたい、そうすると、パスワード等の情報は Docker Compose の .env ファイルに書きたい。

しかし、そうすると Laravel の .env ファイルと被ってしまい両立できません。

調べたところ Docker Compose の .env ファイルはファイル名を変更できないようでした。一方で、 Laravel での .env ファイル名の方は変更可能でしたので、今回の投稿となりました。

以上です。

「Laracel 6 で、 `.env` ファイルの名前を変えて運用する方法」への1件の返信

コメントを残す