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

ApacheでCakePHPを動かす必要が生じたので、Dockerで用意してみました。
DockerでApache、MySQLを用意し、CakePHP3の[チュートリアル](https://book.cakephp.org/3/ja/tutorials-and-examples.html)を動かせる状況まで持っていきます。他にsslの環境、xdebugを動かす環境もまとめてます。

差し当たって[こちらの記事](https://qiita.com/km42428/items/df1d0a1eefddcf771dfa)を参考にさせて貰いました。

### 開発環境
+ MacOS 10.15.3
+ Docker 2.2.0.0

[gitHub上](https://github.com/rnsm504/docker_cakephp3_apache)に用意しましたので、ZIPファイルをダウンロードして、適当なところでフォルダを置いてターミナルからそのフォルダに入って下さい。以下のコマンドを実行すればOKです。

```
docker-compose build
```

イメージのビルドが正常に出来たら、以下のコマンドで実行します。

```
docker-compose up -d   
```

#### composerを用意する

[composer](https://getcomposer.org/)をダウンロードして、上記のフォルダに置いて下さい。
僕の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プロジェクトを作る

[チュートリアル](https://book.cakephp.org/3/ja/tutorials-and-examples/cms/installation.html)にあるプロジェクトを用意するコマンドで^がありますが、これがあると動かないので省きました。

```
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を呼び出せば以下が表示されるかと思います。
<img width="1265" alt="スクリーンショット 2020-03-22 16.37.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40693/77b249d5-f1bf-eea6-fa1d-5d5249eed068.png">

#### （おまけ）sslの設定
ご時世柄、httpsでの運用は必須ですので、開発時からsslでやりたいと思うこともあるはず。

[数分でできる！mkcertでローカル環境へのSSL証明書設定](https://www.hivelocity.co.jp/blog/46149/)

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の設定

[こちらを](https://qiita.com/gigosa/items/90431be7a6a79db78480)参考にして動くように設定してあるので動くはずです。

#### 追記
hostsファイルに設定したいドメインを入力してないとうまく動きませんね、今更な追記ですが・・・

[Macでhostsファイルを編集して設定を確認する方法](https://parashuto.com/rriver/tools/how-to-edit-macos-hosts-file)