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

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

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

docker-compose.ymlを変更しようと思いきや、

sail:install

なるものを発見。

これにpostgresが対応しちょるんですね。使ってみることに。

sailを起動

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

sail up -d

sail install を実行

sail artisan sail:install --with=mysql,redis,memcached,meilisearch,mailhog,selenium,pgsql

標準インストールされたものに、pqsqlを追記しました。

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

    pgsql:
        image: 'postgres:14'
        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

restartだとdocker-composeの変更が反映されないので、

sail down
sail up

で再起動を行うとpostgresコンテナも一緒に立ち上がります。

mysqlなど、コンテナの読み込み可否もこのコマンド一発で調整できるので必要なものだけに絞ってあげても良いかも。

絞ったりした直後はdocker-composeの関係え、sail down でコンテナがうまく落ちないので、docker側でコンテナを落として上げる必要があるかもです。

2023/03/08 追記

laravel 9以降は以下で簡単にpostgresをインストールできるみたいですね。

sail artisan sail:install