はじめに
かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
手順は全 8 回です。
① 作成する環境の確認
② Apache の導入
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成 & MySQL の導入
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加
最終回の今回は、 ⑧ Apache の設定ファイルの追加 についてです。
環境
以下の Docker 環境を構築します。
- Amazon Linux 2
- Apache 2.4
- MySQL 8.0.28
- PHP 8.1.x
- Laravel 9.x
目次
1. Apache の設定ファイルの作成・編集
1-1. mod_rewrite モジュールの有効化
1-2. VirtualHost の設定(DocumentRoot など)
2. Apache の設定ファイルについての追記
3. Docker イメージとコンテナの再作成
4. ブラウザの確認
1. Apache の設定ファイルの作成・編集
Apache の mod_rewrite モジュールの有効化、VirtualHost の設定(DocumentRoot など)をする設定ファイルを作成・編集します。
1-1. mod_rewrite モジュールの有効化
Laravelのルーティングを機能させるため、 Apache の mod_rewrite モジュールを有効化する必要があります。
infra/docker/apache/rewrite.conf を作成・編集します。
LoadModule rewrite_module modules/mod_rewrite.so
ちなみに、 Amazon Linux 2 をベースイメージにしていることが関係していると思いますが、 a2enmod rewrite
コマンドを Dockerfile に記述する方法では、mod_rewrite モジュールを有効化できませんでした。
a2enmod rewrite
はApacheのmod_rewriteモジュールを有効化してます。これがないとLaravelのルーティングがうまく機能しなくなります。
a2enmod rewrite
は、 Debian 系ディストリビューションの場合の方法であり、 Red Hat 系(RHEL7 / CentOS7)をベースとしていると言われている Amazon Linux 2)については、 LoadModule rewrite_module modules/mod_rewrite.so
を記述する方法で設定できるようです。
1-2. VirtualHost の設定(DocumentRoot など)
VirtualHost の DocumentRoot などを設定します。
infra/docker/apache ディレクトリに、 vhost.conf を作成して、編集します。
<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>
DocumentRoot
を /work/backend/public
にすることで、 public ディレクトリ以下の index.php にアクセスされるようにします。
以下の infra/docker/apache/httpd.conf を参考にさせていただきました。
2. Apache の設定ファイルについての追記
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
作成した Apache の設定ファイルについて、Docker コンテナ内の適切なディレクトリ以下にコピーします。
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
設定ファイルの場所については、 CentOS 7 がベースと言われている Amazon Linux 2 であれば、以下のように配置すれば良いようです。
- VirtualHost の設定ファイル → /etc/httpd/conf.d ディレクトリ以下
- Module の設定ファイル → /etc/httpd/conf.modules.d ディレクトリ以下
3. Docker イメージとコンテナの再作成
Docker コンテナを削除し、 Docker イメージを作り直して、 Docker コンテナを作成・起動します。
docker compose down
docker compose up -d --build
4. ブラウザの確認
ブラウザで現状の表示を確認します。
http://localhost:8080/ にアクセスします。
http://localhost:8080/index.php にアクセスします。
Laravel のページが確認できました!
おわりに
最終回の今回は、 ⑧ Apache の設定ファイルの追加 の手順をまとめました。
今回、Amazon Linux のベースイメージから、LAMP環境(Amazon Linux 2/Apache/MySQL/PHP8.1(Laravel9))を作成する過程で、わからないことが山ほど出てきましたが、調べて紐解いていくことで、色々な学びを得ました。
さらに記事に工程を書き出す上で、よくわかっていないことに気づいた点を調べながらまとめることで、理解が深まることもあり、とても良かったです。
ありがとうございました。
参考にしたサイト