DockerのApacheで動くCakePHP3の開発環境を用意する


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 [email protected]  
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc 
echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.zshrc                     

チュートリアルに沿ってcmsプロジェクトを作る

チュートリアルにあるプロジェクトを用意するコマンドで^がありますが、これがあると動かないので省きました。

php composer.phar create-project --prefer-dist cakephp/app:3.8 cms

dbの設定をする

作成したプロジェクトとDockerのMySQLを紐付けます。
プロジェクトの設定ファイルを編集します。

cms/config/app.php
'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',#編集

(おまけ)ドメインの設定を変える

必須ではないですが、プロジェクトを本番環境ではドキュメントルートで呼び出したいと思いますので以下の設定を用意します。

docker/apache/site.conf

<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ファイルに設定を追記します。

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ファイルに設定したいドメインを入力してないとうまく動きませんね、今更な追記ですが・・・

Macでhostsファイルを編集して設定を確認する方法