😱
symfony server:start で起動されるPHP-FPMは.envのDATABASE_URLを無視する
symfony server:start で起動されるPHP-FPMは.envのDATABASE_URLを無視する
Macのローカル環境でSymfonyプロジェクトを新規に開発する際、.envファイルにデータベース接続情報を記載しても、symfony server:start コマンドを実行するとPHP-FPMがPostgreSQLに接続されることがあります。
例えば、$_SERVER['DATABASE_URL'] には以下のように設定されています:
| $_SERVER['DATABASE_URL'] |
|---|
| postgres://app:!ChangeMe!@127.0.0.1:65505/app?sslmode=disable&charset=utf8&serverVersion=16.2 |
これは、symfony server:start コマンドがプロジェクトルートにある compose.yaml と compose.override.yaml の設定から自動的にDB接続情報を生成するためです。
もし、compose.yaml のコンテナを使用せずに.envファイルのDB接続情報を有効にしたい場合は、compose.yaml と compose.override.yaml を削除してください。
また、MySQLなど別のDBをコンテナとして起動し、それに接続させたい場合は、compose.yaml と compose.override.yaml のdatabaseコンテナをMySQLに変更すると、symfony server:start コマンド実行時に自動的にMySQLへの接続設定が適用されます。
MySQLコンテナで開発するサンプル
compose.yaml
version: '3'
services:
###< doctrine/doctrine-bundle ###
database:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
MYSQL_DATABASE: ${MYSQL_DATABASE:-app}
MYSQL_USER: ${MYSQL_USER:-app}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-!ChangeMe!}
volumes:
- mysql_database:/var/lib/mysql
- ./var/log/mysql:/var/log/mysql
volumes:
###> doctrine/doctrine-bundle ###
mysql_database:
###< doctrine/doctrine-bundle ###
compose.override.yaml
version: '3'
services:
###> doctrine/doctrine-bundle ###
database:
ports:
- "53306:3306"
###> symfony/mailer ###
mailer:
image: axllent/mailpit
ports:
- "1025"
- "58025:8025"
environment:
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
###< symfony/mailer ###
.envの設定を変更しなくても、symfony server:start コマンド実行時に自動的にDB接続情報を設定してくれます。
| $_SERVER['DATABASE_URL'] |
|---|
| mysql://app:!ChangeMe!@127.0.0.1:53306/app?sslmode=disable&charset=utf8mb4&serverVersion=8.4.0-1.el9 |
Discussion