Laravel9 の Sail + Dockerで開発環境を作る際にMySQLを使わずPostgresに変更する方法

ようやくLaravel9に触れる機会が訪れました。

postgresを使いたかったので、いつものように、

docker-compose.ymlを変更しようと思いきや、インストールの段階や、後からコマンドで追加できるんですね。

新規の場合

curl -s "https://laravel.build/example-app?with=pgsql" | bash

こんな感じで追加すると、postgresだけがインストールされます。忘れそう(笑)

後から追加する場合

sail経由でインストールに必要な、docker-compose.ymlを書き出すみたいなので、まずインスコすぐにsailを起動してから、sail:install を実行します。

sail up -d
sail artisan sail:install --with=pgsql

これでdocker-compose.ymlにpostgresのコンテナ情報が追記されます。

    pgsql:
        image: 'postgres:15'
        ports:
            - '${FORWARD_DB_PORT:-5432}:5432'
        environment:
            PGPASSWORD: '${DB_PASSWORD:-secret}'
            POSTGRES_DB: '${DB_DATABASE}'
            POSTGRES_USER: '${DB_USERNAME}'
            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
        volumes:
            - 'sail-pgsql:/var/lib/postgresql/data'
            - './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - pg_isready
                - '-q'
                - '-d'
                - '${DB_DATABASE}'
                - '-U'
                - '${DB_USERNAME}'
            retries: 3
            timeout: 5s

sailを再up

sail down
sail up

でpostgresコンテナも一緒にsailが立ち上がります。

envの修正

DB_CONNECTION=pgsql
DB_HOST=mysql
DB_PORT=5432

もし、envがこのようになっている場合、mysqlのホストにアクセスがしてしまいエラーとなるので、

DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_PORT=5432

きっちりhostを変更しておくこと。