LoginSignup
10
3

More than 1 year has passed since last update.

DockerでのLAMP環境構築手順(Amazon Linux 2/PHP8.1(Laravel9)) ⑧Apache の設定ファイルの追加(全8回)

Last updated at Posted at 2022-12-07

はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
スクリーンショット 2022-11-30 23.31.45.png

手順は全 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 を作成・編集します。

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 を作成して、編集します。

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 を編集します。

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/ にアクセスします。

image.png

http://localhost:8080/index.php にアクセスします。

image.png

Laravel のページが確認できました!

おわりに

最終回の今回は、 ⑧ Apache の設定ファイルの追加 の手順をまとめました。

今回、Amazon Linux のベースイメージから、LAMP環境(Amazon Linux 2/Apache/MySQL/PHP8.1(Laravel9))を作成する過程で、わからないことが山ほど出てきましたが、調べて紐解いていくことで、色々な学びを得ました。

さらに記事に工程を書き出す上で、よくわかっていないことに気づいた点を調べながらまとめることで、理解が深まることもあり、とても良かったです。

ありがとうございました。

参考にしたサイト

10
3
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
10
3