ApacheでCakePHPを動かす必要が生じたので、Dockerで用意してみました。
DockerでApache、MySQLを用意し、CakePHP3のチュートリアルを動かせる状況まで持っていきます。他にsslの環境、xdebugを動かす環境もまとめてます。
差し当たってこちらの記事を参考にさせて貰いました。
開発環境
- MacOS 10.15.3
- Docker 2.2.0.0
gitHub上に用意しましたので、ZIPファイルをダウンロードして、適当なところでフォルダを置いてターミナルからそのフォルダに入って下さい。以下のコマンドを実行すればOKです。
docker-compose build
イメージのビルドが正常に出来たら、以下のコマンドで実行します。
docker-compose up -d
composerを用意する
composerをダウンロードして、上記のフォルダに置いて下さい。
僕のmacの環境ではデフォルトで入っているphpでは実行時にエラーが起きるようなので、brewからphpをインストールして、それがデフォルトになるようにexportを設定する必要がありました。
brew install php@7.3
echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.zshrc
チュートリアルに沿ってcmsプロジェクトを作る
チュートリアルにあるプロジェクトを用意するコマンドで^がありますが、これがあると動かないので省きました。
php composer.phar create-project --prefer-dist cakephp/app:3.8 cms
dbの設定をする
作成したプロジェクトとDockerのMySQLを紐付けます。
プロジェクトの設定ファイルを編集します。
'Datasources' => [
'default' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
'host' => 'db', #編集
//'port' => 'non_standard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'cake_cms',#編集
(おまけ)ドメインの設定を変える
必須ではないですが、プロジェクトを本番環境ではドキュメントルートで呼び出したいと思いますので以下の設定を用意します。
<VirtualHost *:80>
DocumentRoot /var/www/html/cms/webroot/
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
docker/Dockerfile に以下を追加しておく
※gitHubにあげているやつは予め設定済みです。
COPY ./docker/apache/site.conf /etc/apache2/sites-available/000-default.conf
以上でlocalhostを呼び出せば以下が表示されるかと思います。
(おまけ)sslの設定
ご時世柄、httpsでの運用は必須ですので、開発時からsslでやりたいと思うこともあるはず。
数分でできる!mkcertでローカル環境へのSSL証明書設定
mkcertを使って、使いたいドメイン名を用意して、出来たファイルを
docker/apache/SSL/certsフォルダ配下に置いてください。
そしてその設定をdocker/apache/SSL/ssl.confファイルに設定を追記します。
<VirtualHost *:443>
DocumentRoot "/var/www/html/cms/webroot/"
ServerName hoge.hoge.com
#ErrorLog logs/ssl_error_log
#TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv3
SSLCertificateFile /var/www/html/docker/apache/SSL/certs/xxxxx.pem
SSLCertificateKeyFile /var/www/html/docker/apache/SSL/certs/xxxxx-key.pem
</VirtualHost>
hoge.hoge.comやxxxxのところを書き換えてください。
docker/Dockerfile に以下を追加する。
COPY ./docker/apache/SSL/ssl.conf /etc/apache2/sites-available/ssl.conf
RUN a2enmod ssl
RUN a2ensite ssl
Apacheにsslの設定を追加します。
これらも既に記述してありますので試したい場合はどうぞ。
(おまけ)xdebugの設定
こちらを参考にして動くように設定してあるので動くはずです。
追記
hostsファイルに設定したいドメインを入力してないとうまく動きませんね、今更な追記ですが・・・