はじめに
今回は、Laravel SailでPostgreSQLを使う方法をまとめました。
標準ではMySQLが採用されていますが、変更することができます。
デプロイする環境に合わせて、DBを選択しましょう。
また、PostgreSQLを管理するためのツールである、pgAdminもインストールします。
それでは始めましょう。
他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。
【紹介】個人開発
私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。
また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます。
開発環境の準備
今回は、Laravel Sailを使って環境の構築を行いました。
以下の記事を参考にしてください。
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
詳しくは公式サイトをご覧ください。
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
pgAdminの導入
pgAdminから見れるようにしましょう。
まずは、pgAdminにログインするためのメールアドレスとパスワードを、.envに指定します。
PGADMIN_EMAIL=xxxxxxxxxx@gmail.com
PGADMIN_PASSWORD=password
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コンテナも作成しましたので、ブラウザから以下のURLにアクセスします。
http://localhost:8888/
pgAdminの画面が表示されました。
メールアドレス、パスワードは、docker-compose.ymlの「pgadmin4」に記載の通りです。
管理画面が表示されました。
作成したPostgreSQLのデータベースを操作できるようにしましょう。
「Add New Server」をクリックします。
Nameは任意で指定します。
接続情報を入力します。
ホスト名はコンテナを指定しますので、「pgsql」を指定します。
データベースのダッシュボードが表示されました。
「Properties」を確認するとPostgreSQL 14.5が稼働しているのが確認できます。
Laravelで作成したテーブルを確認します。
データが正しく挿入されています。
トラブルシューティング
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のドキュメントを確認します。
例えばpgAdmin 5.7の場合は、PostgreSQL 14をサポートしていません。
この組み合わせの場合は、エラーが発生します。
その他
初学者へ
Laravelを初めて触る方へ向け、手順やアドバイスをまとめました。
外部サーバーへ公開
作成したアプリは公開して使ってもらいましょう!
Laravelアプリケーションを外部公開する方法をまとめました。
脆弱性対策
脆弱性を抱えたアプリケーションの場合、攻撃を受ける可能性があり大変危険です。
作成したアプリケーションは、脆弱性対策も意識しましょう。
GitHubと連携
GitHubと連携する方法を解説しました。
プロジェクトの管理はGitHubを活用しましょう。
GitHub Copilot
GitHub Copilotを導入し、AIにコーディングをサポートしてもらうこともできます。
さいごに
今回は、Laravel SailでPostgreSQLを使う方法をまとめました。
他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。
コメント