Laravel + Localstack + S3 Docker準備
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
今の所自分用のテンプレートはこれにしています。 もう少し自動化を工夫できればとは考えていますが現状はこちら。