😱

symfony server:start で起動されるPHP-FPMは.envのDATABASE_URLを無視する

2024/06/23に公開

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.yamlcompose.override.yaml の設定から自動的にDB接続情報を生成するためです。

もし、compose.yaml のコンテナを使用せずに.envファイルのDB接続情報を有効にしたい場合は、compose.yamlcompose.override.yaml を削除してください。

また、MySQLなど別のDBをコンテナとして起動し、それに接続させたい場合は、compose.yamlcompose.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