2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel + Docker の環境で、PostgreSQLに接続するためにやったこと

Posted at

はじめに

docker-composeを使用してLaravelの環境を構築し、PostgreSQLに接続するためにやったことを備忘録としてまとめておきます。

なお、docker-composeを使用したLaravelの環境は、下記の記事を参考に構築しました。
Dockerを使ってLaravelのローカル開発環境を作る(Apache版)

ファイルパスなどは少し変更している箇所がありますので、ご自分の環境に合わせて読み換えてください。

環境

  • OS: MacOS Big Sur
  • Docker: 20.10.11
  • docker-compose: v2.2.1

やったこと

下記の二つを行いました。

  • 環境変数 DB_CONNECTION の値を変更
  • コンテナ内に、PHPの拡張機能 pdo_pgsql をインストール

以下で詳しく説明していきます。

環境変数 DB_CONNECTION の値を変更

Laravelで使用するDBを設定しているのは、config/database.php ファイル内の下記の箇所になります。

config/database.php(一部)
'default' => env('DB_CONNECTION', 'mysql'),

Laravelの env() 関数は、第一引数で取得する環境変数の値を指定し、第二引数にデフォルト値(環境変数に第一引数で指定した値がない場合の値)を指定することができます。(参考
そのため、MySQL以外のDBを使用したい場合は、環境変数 DB_CONNECTION に何かしらの値を設定する必要があります。参考
今回はPostgreSQLを使用したいので、pgsql を設定します。

コンテナ内の環境変数の設定は、docker-compose.yml ファイル内で行っているので、そこに追記します。

docker-compose.yml(一部)
version: "3.8"

services:
  web:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    ports:
      - ${WEB_PORT:-80}:80
    volumes:
      - ./src:/work/src
    environment:
      - DB_CONNECTION=pgsql # ここを追記

コンテナ内に、PHPの拡張機能 pdo_pgsql をインストール

Laravelでは、PHPの拡張機能であるPDOを使用してDBを操作していますが、PDOは使用するデータベースのドライバをインストールしなければ動きません。
そのため、コンテナ起動時に docker-php-ext-install コマンドを使用して pdo_pgsql をインストールします。(pdo_pgsqlについてはこちら
加えて、pdo_pgsql は、libpq-dev パッケージが必要なので、こちらもインストールします。(参考
上記処理を Dockerfile に記述します。

docker/app/Dockerfile
FROM php:7.4-apache

SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]

ENV COMPOSER_ALLOW_SUPERUSER=1 \
  COMPOSER_HOME=/composer

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

RUN apt-get update && \
  apt-get -y install git unzip libzip-dev libicu-dev libonig-dev postgresql libpq-dev && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/* && \
  a2enmod rewrite && \
  docker-php-ext-install intl pdo_pgsql zip bcmath

COPY ./docker/app/php.ini /usr/local/etc/php/php.ini
COPY ./docker/app/httpd.conf /etc/apache2/sites-available/000-default.conf

WORKDIR /work/src
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?