自分だけのクイズ作成 - Quipha公開中
スポンサーリンク
スポンサーリンク

【Laravel】SailでPostgreSQLとpgAdminを使う

Laravel

当サイトではアフィリエイト広告を利用しています。

スポンサーリンク

はじめに

今回は、Laravel SailでPostgreSQLを使う方法をまとめました。
標準ではMySQLが採用されていますが、変更することができます。

デプロイする環境に合わせて、DBを選択しましょう。

また、PostgreSQLを管理するためのツールである、pgAdminもインストールします。
それでは始めましょう。

使用するバージョンなど
  • Windows 11 or macOS Monterey (M1)
  • Laravel 8 or 9 or 10
  • PostgreSQL
  • pgAdmin

2022/10/16 WindowsとMacを使い、最新バージョンで確認しました。
2023/03/11 Laravel10で確認しました。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

【紹介】個人開発

私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。

また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます

是非多くの方に読んでいただき、Laravelの開発に少しでもお役に立てたら幸いです。

開発環境の準備

今回は、Laravel Sailを使って環境の構築を行いました。
以下の記事を参考にしてください。

Windows
Mac

VS Codeの用意

VS Codeのインストール方法は、以下の記事にまとめましたのでご覧ください。

設定方法は以下を参考にしてください。

新規プロジェクト作成

Laravel Sailを新規でプロジェクトを作成する場合、以下のコマンドを実行します。
デフォルトでは、mysql、redis、meilisearch、mailpit、seleniumが設定されます。

curl -s https://laravel.build/example-app | bash

プロジェクト作成時に、サービスを選択することができます。
今回は、PostgreSQLを指定してプロジェクトを作成します。

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

利用可能なサービスが色々あり、mysql、pgsql、mariadb、redis、memcached、meilisearch、minio、selenium、mailpitなどが選択できます。

複数指定する場合は、カンマ区切りで指定します。

詳しくは公式サイトをご覧ください。

Laravel - The PHP Framework For Web Artisans
LaravelisaPHPwebapplicationframeworkwithexpressive,elegantsyntax.We’vealreadylaidthefoundation—freeingyoutocreatewithoutsweatingthesmallthings.

docker-compose.ymlを確認しましょう。
PostgreSQLが追加されています。

...
    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
...
volumes:
    sail-pgsql:
        driver: local

サービスを指定してプロジェクトを作成した場合は、既に使えるようになっています。
.envファイルを確認しましょう。
DB_HOSTにpgsql が指定されています。

DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_PORT=5432
DB_DATABASE=example_app
DB_USERNAME=sail
DB_PASSWORD=password

以下のコマンドでテーブルを作成し、使用することができます。

sail artisan migrate
スポンサーリンク

既存プロジェクトに追加

既にSailでプロジェクトを作成しており、MySQLを指定している場合でも変更できます。

sail php artisan sail:install

コンテナ環境に何を構築するか聞かれます。
今回はPostgreSQLだけインストールしたいので、1を入力しEnterで進めました。

Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailpit
  [8] selenium
  [9] soketi

もし複数指定する場合は、カンマ区切りで入力します。
ちなみにSailでプロジェクトを作成した場合は、デフォルトで以下の番号のサービスが追加されています。

0,3,5,7,8

もちろん後からサービスの追加はできます。

以下のメッセージが表示され、環境の構築はすぐに終わります。
docker-compose.ymlが先ほどと同様になります。

Sail scaffolding installed successfully.

設定ファイルの.evnを確認します。
DB_CONNECTIONはpgsqlで、ポートも5432になっていました。

DB_CONNECTION=pgsql
DB_HOST=mariadb
DB_PORT=5432
DB_DATABASE=example_app
DB_USERNAME=sail
DB_PASSWORD=password

ホストの指定をPostgreSQLに変更します。

DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_PORT=5432
DB_DATABASE=example_app
DB_USERNAME=sail
DB_PASSWORD=password

Sailを再起動しましょう。
サービスの変更を行うと、Sailの停止時にエラーになる場合があります。
その場合は、一度Dockerからコンテナを停止しました。

sail down
sail up -d

これでDBを使用することができます。

pgAdminの導入

pgAdminから見れるようにしましょう。

まずは、pgAdminにログインするためのメールアドレスとパスワードを、.envに指定します。

PGADMIN_EMAIL=xxxxxxxxxx@gmail.com
PGADMIN_PASSWORD=password

ログイン情報は任意で指定してください。
また、.evnはgitの管理対象外ですので、重要な情報はdocker-compose.ymlへ記載せず、.evnへ記載すると良いでしょう。

docker-compose.ymlを修正します。
pgAdminに関する情報を、servicesブロック内に追記します。

    pgadmin4:
        image: dpage/pgadmin4
        ports:
            - 8888:80
        volumes:
            - pgadmin4_data:/var/lib/pgadmin
        environment:
            PGADMIN_DEFAULT_EMAIL: '${PGADMIN_EMAIL}'
            PGADMIN_DEFAULT_PASSWORD: '${PGADMIN_PASSWORD}'
        networks:
            - sail
...
volumes:
...
    pgadmin4_data:
        driver: local

後述していますが、PGADMIN_DEFAULT_EMAILにはメールアドレス形式の値を指定しないとエラーになり起動できません。

データは永続化しています。

pgAdminコンテナも作成しましたので、ブラウザから以下のURLにアクセスします。

http://localhost:8888/

pgAdminの画面が表示されました。
メールアドレス、パスワードは、docker-compose.ymlの「pgadmin4」に記載の通りです。

PostgreSQLのデータベースへのログイン情報ではありませんので注意してください。
本記事の通りであれば、「xxxxxxxxxx@gmail.com/password」になります。

管理画面が表示されました。

作成したPostgreSQLのデータベースを操作できるようにしましょう。
「Add New Server」をクリックします。

Nameは任意で指定します。

接続情報を入力します。
ホスト名はコンテナを指定しますので、「pgsql」を指定します。

DB名(DB_DATABASE)やユーザ(DB_USERNAME)、パスワード(DB_PASSWORD)は、.envの記載の情報にします。

データベースのダッシュボードが表示されました。

「Properties」を確認するとPostgreSQL 14.5が稼働しているのが確認できます。

Laravelで作成したテーブルを確認します。
データが正しく挿入されています。

pgAdminの使い方については、ここでは掘り下げませんが、テーブルに対する操作ができます。

トラブルシューティング

pgadmin4コンテナが起動しない

docker-compose.ymlで、PGADMIN_DEFAULT_EMAILにメールアドレス形式ではない文字を指定するとコンテナ起動時にエラーになります。

    environment:
        PGADMIN_DEFAULT_EMAIL: root
        PGADMIN_DEFAULT_PASSWORD: password

これは古いバージョンのpgAdminでは問題ありませんが、最新のバージョンではエラーになります。

コンテナ起動時のエラーログは以下のようになります。
この場合、コンテナは起動していませんので、URLにアクセスしてもpgAdminの画面が表示されません

‘root’ does not appear to be a valid email address. Please reset the PGADMIN_DEFAULT_EMAIL environment variable and try again.

この状態で一度コンテナ・ボリュームを作成してしまった場合は、それらを削除して作り直す必要があります。

pgAdmin操作時にエラーが発生する

pgAdminがサポートしていないバージョンのPostgreSQLを操作しようとするとエラーが発生します。
例えば、pgAdminが古く、PostgreSQLが新しい場合です。

Error retrieving the information – INTERNAL SERVER ERROR

ERROR: column rel.relhasoids does not exist
LINE 8: pg_get_userbyid(rel.relowner) AS relowner, rel.relhasoids,…

pgAdminのドキュメントを確認します。

Container Deployment — pgAdmin 4 6.18 documentation
pgAdmin-PostgreSQLToolsforWindows,Mac,LinuxandtheWeb

例えばpgAdmin 5.7の場合は、PostgreSQL 14をサポートしていません。
この組み合わせの場合は、エラーが発生します。

どちらも最新のバージョンを使用すると問題ないと思います。

その他

初学者へ

Laravelを初めて触る方へ向け、手順やアドバイスをまとめました。

外部サーバーへ公開

作成したアプリは公開して使ってもらいましょう!
Laravelアプリケーションを外部公開する方法をまとめました。

脆弱性対策

脆弱性を抱えたアプリケーションの場合、攻撃を受ける可能性があり大変危険です。
作成したアプリケーションは、脆弱性対策も意識しましょう。

GitHubと連携

GitHubと連携する方法を解説しました。
プロジェクトの管理はGitHubを活用しましょう。

GitHub Copilot

GitHub Copilotを導入し、AIにコーディングをサポートしてもらうこともできます。

さいごに

今回は、Laravel SailでPostgreSQLを使う方法をまとめました。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

\オススメ/

コメント

タイトルとURLをコピーしました