はじめに
こんにちは、オールアバウトエンジニアの@monpei68です。
本記事はAll About Group(株式会社オールアバウト) Advent Calendar 2023の20日目の記事です。
普段の業務ではLaravelを使ったアプリケーションの開発をしております。
業務の中でhttps化したlocal環境で動作検証したいことがあり、環境構築をしました。
今回は、その構築の仕方ついて紹介できればと思います。
環境
- OS:
Mac
- Dockerイメージ:
php:8.2.8-apache-bullseye
証明書に関して
Homebrewを使ってmkcertをインストールします。
(mkcert以外にも証明書を作成する方法は色々ありますが、一番お手軽にできそうなmkcertがおすすめかなと思います。)
brew install mkcert
mkcertインストールできましたら、証明書の発行をします。
mkcert localhost
上記コマンドを実行すると下記のファイルが作成されます。
localhost.pem
localhost-key.pem
作成されたファイルの置き場所は、後述する「ディレクトリ構成」を参考にしてください。
備考
ディレクトリ構成
今回は下記のようなディレクトリ構成で作成しました。
# ディレクトリとファイル構成
├── docker-compose.yml
└── docker
└── web
└──Dockerfile
└──default-ssl.conf
└──app.conf
└──certs
└──localhost-key.pem
└──localhost.pem
では、それぞれのファイルで追加したコードについて説明します。
各ファイルについて
docker-compose
web:
build: docker/web
ports:
- "8443:443"
volumes:
- ./docker/web/default-ssl.conf:/etc/apache2/sites-available/default-ssl.conf
docker-composeのports
にhttps通信のための443を指定します。
Dockerfile
HTTPS通信に必要なApacheのモジュールの有効化と、default-ssl.confの有効化を行います。
FROM php:8.2.8-apache-bullseye
# 省略
COPY ./app.conf /etc/apache2/sites-available/app.conf
RUN a2enmod rewrite && a2enmod ssl && a2enmod socache_shmcb
COPY ./certs/*.pem /etc/apache2/ssl/
RUN a2ensite default-ssl
# 省略
default-ssl.confの作成
default-ssl.confを下記のexampleをコピーして作成します。
コピー後、一部コードの変更をします。
# 32行目
SSLCertificateFile /etc/apache2/ssl/localhost.pem
# 33行目
SSLCertificateKeyFile /etc/apache2/ssl/localhost-key.pem
サーバ証明書と秘密鍵のファイルパスの指定を、mkcertで作成した証明書を参照するように変更します。
app.conf
最後にアプリのconfigファイルのコードを下記に変更します。
<VirtualHost *:443>
ServerName localhost
DocumentRoot /app/web/public
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/localhost.pem
SSLCertificateKeyFile /etc/apache2/ssl/localhost-key.pem
<Directory /app/web/public>
Options +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
各ファイルの変更は以上になります。
コンテナを起動して確認してください。
最後に
今回はhttps化したlocal環境の構築について紹介しました。
この記事がどなたかのお役にたてれば嬉しいです。