😱
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