TOP > Column > Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part1)

Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part1)

2023.04.23技術

Docker + Apache + PHP7.4 + MySQL(MariaDB) + SSL + Laravel (part1)

久しぶりにコラムを書いてみます。
Dockerはとても手軽に開発構築を構築できるのが魅力ですよね。
ですが、localな開発環境でhttps通信となると、環境構築においては、少し面倒になりますね・・。
備忘録含め、他のエンジニアのお役に立てればという思いのもと、記事を公開した経緯に至ります。
githubでの公開も考えましたが、いったんはこの場でご覧いただければと思います。
ご要望あればもちろん一式の公開も検討しますので!
多くの方の手助けになれれば幸いです。


具体的にやりたいことはこちらです

(1)自分の作業マシンで開発環境を構築したい
(2)複数の開発用ドメインを設置したい
(3)httpsで検証したい
(4)Laravelで開発したい
(5)https://test.localというローカル上のURLで開発していきたい
※M1チップ搭載Macでの検証ですので、ご了承ください。


Dcoker環境を準備する

Docker DesktopをMacにインストールして起動します。
それについては調べればすぐわかると思いますので割愛します。


mkcertをインストール

証明書ツールをインストールします。
brew install mkcert nss
mkcert -install

ディレクトリを作成

自分のディレクトリを作成します。
(例として~/docker-lampとします)
mkdir ~/docker-lamp
cd ~/docker-lamp
mkdir -p conf certs db htmlarea phpmyadmin/sessions
現時点でのファイルやディレクトリの配置はこのようになります。
docker-lamp
  |-certs
  |-conf
  |-db
  |-htmlarea
  |-phpmyadmin
      |-sessions

証明書ファイルの設置

CAを設定します。
mkcert -install
# 確認
mkcert -CAROOT
/Users/xxxxx/Library/Application Support/mkcert 内に作成されているので、環境内にコピーしておきます。
※セキュリティ的には自己責任でお願いします
説明のため、コピーしましたが、DockerFile内で直接COPYするように記述したほうがよいと思います。
cp ~/Library/Application\ Support/mkcert/rootCA.pem ./certs/rootCA.pem
続けて、mkcertを使用してローカルドメイン用の証明書を作成します。
今回のドメイン名はtest.localとしますので、このような感じで作成できます。

mkcert -key-file ./certs/test.local.key -cert-file ./certs/test.local.pem test.local 127.0.0.1 ::1

ダミーindex.phpの設置

本来ならLaravelのプロジェクト作成コマンドで作成するのですが、この段階では、疎通確認のため、暫定設置にします。
index.phpの中身はお好きな内容でどうぞ。
mkdir -p ./htmlarea/test.local/public
touch ./htmlarea/test.local/public/index.php

php.iniやmy.cnfの設置

お好みの設定がされている2つのファイルを、下記のように配置します。
./conf/php.ini
./db/my.cnf

Apache用設定ファイルの用意

VirtualHost用ファイルを用意します。
vi ./conf/000-default.conf
# 中身はこちら↓↓
  <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test.local
    DocumentRoot /var/www/html/test.local/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
  </VirtualHost>

vi ./conf/default-ssl.conf
# 中身はこちら↓↓
<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName test.local
    DocumentRoot /var/www/html/test.local/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine on
        SSLCertificateFile /etc/ssl/local/certs/test.local.pem
        SSLCertificateKeyFile /etc/ssl/local/certs/test.local.key
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>
  </VirtualHost>
</IfModule>



続く >>>