はじめに
かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
記事の目的
- 手順の詳細を書いていくことで、似たような環境を構築する方の一助となれば幸いです。
- 作成する過程では、つまずく箇所が山ほど出てきましたが、調べながら進んでいくことで、色々な学びを得ましたので、なるべく記事に落とし込めたらと思います。
- さらに記事として書き出す上で、よくわかっていないことに気づいた点を調べながら補足することで、インプットの機会にもしたいというのが目的です。
投稿内容(全 8 回)
全 8 回に分けて、投稿します。
① 作成する環境の確認
② Apache の導入
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成 & MySQL の導入
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加
今回は、 具体的な手順に入る前に、① 作成する環境の確認 をします。
目次
1. Docker で構築する LAMP 環境
1-1. 構成のイメージ
1-2. LAMP 環境の内容
2. ディレクトリ構成
3. 主要なファイル
1. Docker で構築する LAMP 環境
Docker で構築する LAMP 環境を確認します。
1-1. 構成のイメージ
今回構築する Docker での LAMP 環境について、簡単なイメージ図を作成しました。
追記 2023/01/17 : M1 Mac の場合、 Docker コンテナが起動しません
- AmazonLinux2、PHP8.1だと remi リポジトリが必要
→ remi7 は M1 対応していない
→ 現状対処できない様子
1-2. LAMP 環境の内容
LAMP 環境についての詳細です。
-
web コンテナ
- Amazon Linux 2(ベースイメージ:
amazonlinux:2
) - Apache 2.4
- PHP 8.1.x
- Laravel 9.x
- Amazon Linux 2(ベースイメージ:
-
db コンテナ
- MySQL 8.0.28(ベースイメージ:
mysql/mysql-server:8.0.28
)
- MySQL 8.0.28(ベースイメージ:
2. ディレクトリ構成
全 8 回の手順の完了時点のディレクトリ構成は以下の通りです。
.
├── .env
├── .env.example
├── backend
├── docker-compose.yml
└── infra
└── docker
├── apache
│ ├── rewrite.conf
│ └── vhost.conf
├── mysql
│ ├── Dockerfile
│ └── my.cnf
└── php
├── Dockerfile
└── php.ini
3. 主要なファイル
今回作成する主要なファイル全てです。
3-1. docker-compose.yml
以下は、 docker-compose.yml です。
version: "3.8"
volumes:
db-store:
services:
web:
build:
context: .
dockerfile: ./infra/docker/php/Dockerfile
ports:
- ${WEB_PORT:-80}:80
volumes:
- ./backend:/work/backend
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=${DB_NAME:-laravel_local}
- DB_USERNAME=${DB_USER:-phper}
- DB_PASSWORD=${DB_PASS:-secret}
db:
build:
context: .
dockerfile: ./infra/docker/mysql/Dockerfile
ports:
- ${DB_PORT:-3306}:3306
volumes:
- db-store:/var/lib/mysql
environment:
- MYSQL_DATABASE=${DB_NAME:-laravel_local}
- MYSQL_USER=${DB_USER:-phper}
- MYSQL_PASSWORD=${DB_PASS:-secret}
- MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
以下の GitHub リポジトリと Qiita 記事を参考にさせていただきました。
3-2. web サーバー(PHP)の関連ファイル
以下、web サーバー(PHP)の関連ファイルです。
次回以降の手順では、この infra/docker/php ディレクトリの Dockerfile を編集していくことがメインの作業です。
FROM amazonlinux:2
# timezone environment
ENV TZ=Asia/Tokyo \
# locale
LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
RUN yum update -y \
&& yum install -y \
glibc-langpack-ja \
zip \
unzip \
vim \
httpd
RUN amazon-linux-extras install -y epel
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum clean metadata \
&& yum install -y \
php81 \
php81-php \
php81-php-mbstring \
php81-php-pdo \
php81-php-xml \
php81-php-fpm \
php81-php-mysqlnd \
php81-php-gd
RUN alternatives --install /usr/bin/php php /usr/bin/php81 1
# composer のインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
# ファイルのコピー
COPY ./infra/docker/php/php.ini /etc/opt/remi/php81/php.ini
COPY ./infra/docker/apache/vhost.conf /etc/httpd/conf.d/vhost.conf
COPY ./infra/docker/apache/rewrite.conf /etc/httpd/conf.modules.d/rewrite.conf
CMD [ "apachectl", "-D", "FOREGROUND" ]
WORKDIR /work/backend
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8
[Date]
date.timezone = "Asia/Tokyo"
[mysqlnd]
mysqlnd.collect_memory_statistics = on
[Assertion]
zend.assertions = 1
[mbstring]
mbstring.language = Japanese
3-3. MySQL の関連ファイル
以下、 MySQL の関連ファイルです。
FROM mysql/mysql-server:8.0.28
RUN microdnf install yum \
&& yum install -y glibc-langpack-ja glibc-locale-source git
ENV TZ=Asia/Tokyo \
LANG=ja\_JP.UTF-8
COPY ./infra/docker/mysql/my.cnf /etc/my.cnf
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
3-4. Apache の設定ファイル
以下は、 Apache の設定ファイルです。 ⑧ Apache の設定ファイルの追加 で触れますが、 Laravel を動作させるための設定をしています。
LoadModule rewrite_module modules/mod_rewrite.so
<VirtualHost *:80>
ServerName example.com
ServerAdmin webmaster@localhost
DocumentRoot /work/backend/public
ErrorLog logs/error.log
CustomLog logs/access.log combined
<Directory /work/backend/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3-5. .env ファイル
以下、.env ファイルです。
WEB_PORT=8080
DB_PORT=3306
DB_NAME=laravel_local
DB_USER=phper
DB_PASS=secret
おわりに
今回は、 ① 作成する環境の確認 についてでした。
次回は、 ② Apache の導入 の手順です。
ありがとうございました。
参考にしたサイト