Laravel + Localstack + S3 Docker準備

Laravel + Localstack + S3 Docker準備

Twitter LINEで送る Facebook はてなブログ

Docker環境でLaravel + Mysql + S3の構成が作りたかったのでLocalstackを準備
自分の環境がM1 MacなのでARM版利用のためx86系の場合はdockerのイメージは変更が必要です

必要なファイルとディレクトリ構成

docker-compose.yml # ymlファイル
└── docker # フォルダ
    ├── Dockerfile # apache + mysql用のファイル
    ├── mysql
    │    └── my.cnf # mysqlの設定情報
    ├── apache
    │    └── default.conf # laravel用のvhosts
    └── localstack
        └── s3.sh # localstackの初期コマンド

実行コマンド

# dockerのビルド
docker-compose up -d --build

# docker のwebサーバ環境ログイン
docker-compose exec php-apache-mysql /bin/bash

# docker localstock ログイン
docker-compose exec localstock /bin/bash

docker-compose.yml

version: '3.8'

networks:
  resort-network:
    driver: bridge

services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack
    environment:
      - SERVICES=s3
      - AWS_ACCESS_KEY_ID=dummy
      - AWS_SECRET_ACCESS_KEY=dummy
      - AWS_DEFAULT_REGION=ap-northeast-1
      - DATA_DIR=./docker/tmp
    networks:
      - resort-network
    ports:
      - 4566:4566
    volumes:
      - ./docker/localstack:/docker-entrypoint-initaws.d:ro
  
  database:
    image: mysql:8.0.27
    platform: linux/amd64
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_DATABASE: laravel
      MYSQL_USER: admin
      MYSQL_PASSWORD: password
    restart: always
    networks:
      - resort-network
    volumes:
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf

  php-apache-mysql:
    container_name: php-apache-mysql
    build:
      context: ./docker
    networks:
      - resort-network
    ports:
      - '8080:80'
      - '5173:5173'
    volumes:
      - ./:/var/www/laravel_docker
      - ./docker/apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
    depends_on:
      - database
      - localstack

docker/Dockerfile

FROM php:8.1-apache
EXPOSE 5173
RUN curl -fsSL https://deb.nodesource.com/setup_16.x > steup_16.x
RUN ["/bin/bash",  "steup_16.x"]
RUN rm steup_16.x
RUN apt update \
        && apt install -y \
            g++ \
            libicu-dev \
            libpq-dev \
            libzip-dev \
            zip \
            zlib1g-dev \
        && docker-php-ext-install \
            intl \
            opcache \
            pdo \
            pdo_mysql \
        && a2enmod rewrite 
RUN apt install -y nodejs
RUN apt install -y default-mysql-client
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN sudo ./aws/install
WORKDIR /var/www/laravel_docker

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

docker/mysql/my.cnf

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
explicit-defaults-for-timestamp=1
general-log=1
general-log-file=/var/log/mysql/mysqld.log

[client]
default-character-set=utf8mb4

docker/apache/default.conf

<VirtualHost *:80>
    ServerName laravel_docker
    DocumentRoot /var/www/laravel_docker/public

    <Directory /var/www/laravel_docker>
        AllowOverride All
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

docker/localstack/s3.sh

awslocal s3 mb s3://laravel
awslocal s3 ls

今の所自分用のテンプレートはこれにしています。 もう少し自動化を工夫できればとは考えていますが現状はこちら。