【EC-CUBE4】④EC-CUBE本体の開発環境を整える（Postgres,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)
[【EC-CUBE4】③EC-CUBE本体の開発環境を整える（MYSQL,MailCatcher編）]
(https://qiita.com/junpeko5/items/3316b654b4b80ee59376)

## 前提条件

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


## pgsqlのエクステンションを設定されているか確認

postgresはモジュールがデフォルトで入っていないことがあるので、確認してください。

```
$ php -S localhost:8000
$ php -m
[PHP Modules]
pdo_pgsql
pgsql
```

なければ、エクステンションを有効にしなければなりませんが、本記事では省略します。
通常はphp.iniを編集することになると思います。

.phpenvの場合は以下参考。

[.phpenvでPHPインストール時にpgsql・pdo-pgsqlを有効にする方法]
(https://qiita.com/junpeko5/items/79fbec0b20212f7432b7)


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

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

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

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

services:

  db:
    image: postgres:10.9
    container_name: postgres_container
    ports:
      - 5432:5432
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
    restart: always
    environment:
      POSTGRES_USER: docker
      POSTGRES_PASSWORD: docker
      POSTGRES_DB: eccube4
    volumes:
      - ./data:/var/lib/postgresql/data

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


適当な場所でクローンしてください。

```
$ cd path/to/適当なディレクトリ
$ git clone https://github.com/junpeko5/docker-postgres
$ cd docker-postgres
```

コンテナを立ち上げます。

```
$ docker-compose up -d
Creating network "docker-postgres_default" with the default driver
Creating docker-postgres_mailcatcher_1 ... done
Creating postgres_container            ... done
```
dockerコンテナの起動を確認します。

```
$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
b235a489be1c        postgres:10.9            "docker-entrypoint.s…"   20 seconds ago      Up 19 seconds       0.0.0.0:5432->5432/tcp                           postgres_container
56edb4d55834        schickling/mailcatcher   "mailcatcher --no-qu…"   20 seconds ago      Up 19 seconds       0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   docker-postgres_mailcatcher_1
```


EC-CUBEのDB接続設定やメールサーバーの設定はsymfonyと同様.envファイルに書きます。
.envに直接書いても良いですが、DBのマイグレーション等も自動で行ってくれる、インストールコマンドを使うのが楽です。
また、`http://localhost:8000`にアクセスして、webインストーラーで行う方法もあります。


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

今回は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]:
 > postgres://docker:docker@127.0.0.1:5432/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のバージョンの切り替えはかんたんにできます。


次回は、[【EC-CUBE4】⑤EC-CUBE本体の開発環境を整える（Xdebug、PhpStorm編）](https://qiita.com/junpeko5/items/890e6b73b0e1f9930093)です。

## 参考

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