【EC-CUBE4】③EC-CUBE本体の開発環境を整える（MYSQL,MailCatcher編）

EC-CUBE4の環境構築続きです。
[【EC-CUBE4】①EC-CUBE本体の開発環境を整える（インストール編）](https://qiita.com/junpeko5/items/199af36a31a335a73d38)
[【EC-CUBE4】②EC-CUBE本体の開発環境を整える（GitHub Flow編）](https://qiita.com/junpeko5/items/8706a91452e85eef5109)


## 前提条件

- Mac
- PHP7.2がMacローカル環境にインストール済み(おすすめはphpenv)
- gitがインストール済み
- docker for macがインストール済み
- EC-CUBE4がローカル環境にインストール済み（<a href="https://qiita.com/junpeko5/items/199af36a31a335a73d38">【EC-CUBE4】EC-CUBE本体の開発環境を整える（インストール編）</a>が終わっていること）

## 方針

- dbサーバーは<a href="https://hub.docker.com/_/mysql">mysql:5.7の公式dockerイメージ</a>を利用。
- メールサーバーは<a href="https://hub.docker.com/r/schickling/mailcatcher">mailcatcherのdockerイメージ</a>を利用
- webサーバーはビルドインウェブサーバーを利用。


## DB、メールサーバーの作成

mysql用のdocker-compose.ymlをgithubで管理しています。
https://github.com/junpeko5/mysql-docker.git

docker-compose.ymlは下記の用な感じです。

```docker-compose.yml
version: '3'

services:
  mysql:
    image: mysql:5.7
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: eccube4
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
    - ./mysql/data:/var/lib/mysql
    - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    - ./mysql/sql:/docker-entrypoint-initdb.d
    ports:
    - 3306:3306

  mailcatcher:
          image: schickling/mailcatcher
          ports:
              - "1080:1080"
              - "1025:1025"
```


```
$ cd path/to/適当なディレクトリ
```

クローンしてみてください。

```
$ git clone https://github.com/junpeko5/mysql-docker.git
$ cd mysql-docker
```

コンテナを立ち上げ。

```
$ docker-compose up -d
Creating network "mysql-docker_default" with the default driver
Creating mysql-docker_mailcatcher_1 ... done
Creating mysql_container            ... done
```
確認します。

```
$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
0a716864e112        mysql:5.7                "docker-entrypoint.s…"   51 minutes ago      Up 51 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp                mysql_db
6c52c56d6d74        schickling/mailcatcher   "mailcatcher --no-qu…"   51 minutes ago      Up 51 minutes       0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   mysql-docker_mailcatcher_1
```


EC-CUBEのDB接続設定やメールサーバーの設定はsymfonyと同様.envファイルに書きます。
.envに直接書いても良いですが、DBのマイグレーション等も自動で行ってくれる、インストールコマンドを使うのが楽です。


## EC-CUBEのインストールコマンドを実行する

[【EC-CUBE4】EC-CUBE本体の開発環境を整える（インストール編）](https://qiita.com/junpeko5/items/199af36a31a335a73d38)が終わっているという前提で進めます。
インストールコマンドをEC-CUBEをインストールしたディレクトリで実行します。

```
$ cd path/to/EC-CUBEをインストールしたディレクトリ
```

インストールコマンドを実行する

```
$ bin/console e:i
 Database Url [sqlite:///var/eccube.db]:
 > mysql://docker:docker@127.0.0.1:3306/eccube4

 Mailer Url [null://localhost]:
 > smtp://localhost:1025

 Auth Magic [ezmuHyhtjRVzkkof]:
 >

 !
 ! [CAUTION] Execute the installation process. All data is initialized.
 !

 Is it OK? (yes/no) [yes]:
 >
```

Database UrlとMailer Urlを上記のように設定しenterで進みます。何も入力しなければデフォルトの設定となります。
.envに設定内容が書き込まれているか、確認してみてください。

ちなみに、このコマンドでデータベースの初期化やマイグレーション、ダミーデータの投入も自動で実行されます。


では、EC-CUBEをインストールしたルートディレクトリで下記コマンドを実行してみましょう。

```
$ php -S localhost:8000
```

インストールが完了したら、ローカル環境にPHPのサーバーを立ち上げ、下記URLで動作します。


EC-CUBE
http://localhost:8000/

Mailcatcher
http://localhost:1080/

実際にEC-CUBEで商品を買ってみて、メールが送信されるか確認してみてください。

## 停止する

### dockerコンテナの停止

mysqlのプロジェクトに移動して、以下のコマンドです。

```
$ docker-compose down
```

### webサーバーの停止
ビルドインウェブサーバーを停止する場合はターミナル上で`control + c`　です。

## 感想

DockerでDBサーバーやメールサーバーを利用すると管理が楽でおすすめです。

また、phpenv等を使えばローカルでphpのバージョンの切り替えはかんたんにできます。

あえてdockerでwebサーバーを立てる必要性を感じないためこのような構成にしています。

動作も軽快ですしね。

次回は、[【EC-CUBE4】④EC-CUBE本体の開発環境を整える（Postgres,MailCatcher編）]
(https://qiita.com/junpeko5/items/ef572490c44da90eac59)です。

## 参考

http://doc4.ec-cube.net/