0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS/EC2】Amazon Linux 2023 で Laravel + PostgreSQL 環境を Docker Compose で構築する

0
Posted at

はじめに

前回、EC2に直接PHPやDBをインストールしましたが、今後の拡張性(WordPress移行やCI/CD)を考えて、Docker化に挑戦しました。

1. 準備:Docker と Docker Compose の導入

Amazon Linux 2023 に Docker をインストールします。

sudo dnf install -y docker  #最初から入っているかも
sudo systemctl start docker
sudo usermod -aG docker ec2-user

※反映には一度ログアウトが必要です。
また、最新の docker-compose もインストールしました。

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. ハマりポイント:Buildx のバージョンエラー

docker-compose up を実行した際、以下のエラーに遭遇しました。

compose build requires buildx 0.17.0 or later

原因

Amazon Linux 2023の標準リポジトリにあるDockerのバージョンが古い。
今回使った docker-compose.yml の書き方には、最新のビルドエンジン(Buildx)が必要だったため、手動で最新の部品を差し込む必要あり(標準アップデートされていれば必要ないかも)

解決策:

Buildx プラグインを最新バージョンに手動でアップデートすることで解消しました。

詳細な手順↓

1. プラグインを置くフォルダを作成

 mkdir -p ~/.docker/cli-plugins/

2. 最新の Buildx をダウンロード

curl -SL https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx

3. 実行権限を与える

chmod +x ~/.docker/cli-plugins/docker-buildx

4. バージョンを確認

docker buildx version

v0.17.1以上だったらOK

3. 各種設定ファイルの作成

プロジェクトルートに以下のファイルを配置しました。

docker-compose.yml

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

  app:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    volumes:
      - .:/var/www/html
    working_dir: /var/www/html

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: ${DB_DATABASE}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

docker/php/Dockerfile

FROM php:8.3-fpm

# PostgreSQL接続用の拡張機能をインストール
RUN apt-get update && apt-get install -y \
    libpq-dev \
    && docker-php-ext-install pdo_pgsql

# Composerをインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

4. 設定のポイント:.env の修正

Dockerコンテナ間では 127.0.0.1 は「自分自身のコンテナ」を指してしまいます。
そのため、DB_HOST を docker-compose.yml で定義したサービス名 db に書き換えます。これでコンテナ間通信が可能になります。

DB_CONNECTION=pgsql
DB_HOST=db

5. コンテナの起動とマイグレーション

準備ができたらコンテナを起動します。

docker-compose up -d --build

コンテナの外(EC2)から、コンテナの中(app)に向かってコマンドを投げます。

docker-compose exec app php artisan migrate

これで無事にテーブルが作成されました!

あとがき

次はWordpress用のコンテナを作ろうと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?