EC-CUBE4のDocker環境をつくる (mac )

2020.7.1 (水)

EC-CUBE4がSymfonyベースになってからDockerFileが付属するようになったので、それを使ってみます。(最初Silexだったけど、Silexが更新されなくなったことからSymfonyになったっぽいです。)むかしに比べてかなりいろいろな部分が新しくなったのでかなり開発しやすく且つ使いやすくなりました。
Dockerの環境とGitが使えるようにしておいてください。

Docker for EC-CUBE4

Dockerの動く環境まで移動して、git cloneでソースコード一式をダウンロードします。

$ cd /DOCKER_PROJECT/
$ git clone https://github.com/EC-CUBE/ec-cube.git
$ cd ec-cube

プロジェクトに移動してEC-CUBEの設定をします。

$ cd ec-cube/
$ cp .env.dist .env

.envには最低限以下を設定しておきます。(後からでもできます。)

DATABASE_URL=mysql://dbuser:secret@mysql/eccubedb
MAILER_URL=smtp://mailcatcher:1025
ECCUBE_AUTH_MAGIC=c***D***u***s***

mysqlはデフォルトで作成されるものの設定値を予め設定しておきます。MAILER_URLも同様。
ECCUBE_AUTH_MAGICには適当な乱数やハッシュを設定します。

クローンしたものの中にすでにDockerfileがあるので、興味があれば中身を確認してみてください。このファイルでdocker-composeがすでに可能になっています。
docker-composeでDockerコンテナを立ち上げてみます。初回はものすごい時間がかかります。

$ docker-compose up -d

ちなみに、コンテナの停止をする際は$ docker-compose downで停止できます。
エラーがなく無事完了したらコンテナが起動している状態になります。コンテナを確認してみます。(他の混んてんな

$ docker ps -a

4つのコンテナが起動しています。

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
df6eb6a4ebfc        ec-cube_ec-cube          "docker-php-entrypoi…"   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp, 0.0.0.0:4430->443/tcp      ec-cube_ec-cube_1
e99a7e18d0b7        mysql:5.7                "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        33060/tcp, 0.0.0.0:13306->3306/tcp               ec-cube_mysql_1
4d3b3a96b08d        postgres:10              "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:15432->5432/tcp                          ec-cube_postgres_1
2447a16ffaea        schickling/mailcatcher   "mailcatcher --no-qu…"   3 minutes ago       Up 3 minutes        0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   ec-cube_mailcatcher_1

イメージも確認してみます。

$ docker images

REPOSITORY               TAG                  IMAGE ID            CREATED             SIZE
ec-cube_ec-cube          latest               20db7d71b0fc        25 minutes ago      741MB
php                      7.3-apache-stretch   603de146a1b0        6 days ago          375MB
postgres                 10                   742b0d56a5e0        3 weeks ago         200MB
mysql                    5.7                  9cfcce23593a        3 weeks ago         448MB
schickling/mailcatcher   latest               a92223e5253a        24 months ago       86.4MB

これでEC-CUBEのDockerは起動しました。

ちなみにこの時点でサーバーとPHPがすでに動いているので、URLでアクセスして確認してみます。docker-compose.ymlにアクセスするポートが書かれているので確認してみると、80を8080に、443を4430に割り当てているので、http://localhost:8080/またはhttp://localhost:4430/にアクセスしてみます。EC-CUBEのインストールと設定をしていないので、Symfonyのエラー画面になる筈です。他のプロジェクトとポートがかぶらないようにするか、同じポートを使っている場合は他のプロジェクトを停止する必要があります。

Dockerコンテナを停止する場合は、それぞれのコンテナIDで停止します。(まとめて停止することもできます。)

docker stop df6eb6a4ebfc
docker stop e99a7e18d0b7
docker stop 4d3b3a96b08d
docker stop 2447a16ffaea

または、まとめて停止

docker stop df6eb6a4ebfc e99a7e18d0b7 4d3b3a96b08d 2447a16ffaea

docker psで、コンテナIDがないことを確認してください。Dockerコンテナは起動するたびに違うIDが振られます。

EC-CUBE4のインストール

EC-CUBEのインストールを行います。通常はPHPでcomposerをつかってやるところを、docker-compose execでcomposerを実行します。

$ docker-compose exec ec-cube composer install

EC-CUBEのイニシャライズをします。すべて初期化されるので、最初の一回だけの作業になります。プロンプトが出てきて、Database、Mailer、Auth Magicの設定を促します。
先程.envで設定したものでOKなので、そのままエンターを押して設定します。

$ docker-compose exec ec-cube bin/console eccube:install
Database Url [mysql://dbuser:secret@mysql/eccubedb]:
 > [Enter]
 Mailer Url [smtp://mailcatcher:1025]:
 > [Enter]
 Auth Magic [c***D***u***s***]:
 > [Enter]
(以下省略)

エラーなく完了したら、
http://localhost:8080/
(または http://127.0.0.1:8080/)
にアクセスしてみます。EC-CUBEのデフォルトの画面が表示できれば完了です。
管理画面のURLはデフォルトではhttp://localhost:8080/admin/loginになっています。
ログインIDは、

ID: admin
パスワード: password


schickling/mailcatcher

EC-CUBEはメール送信で認証作業などを行うので、開発とデバックには受信メーラーが必要です。本来SMTPのメールサーバーなどの準備をしないといけないのですが、Dockerは簡易的にschickling/mailcatcherを利用できます。

http://localhost:1080/

ログインなどの認証なしで簡易的なWEBメーラーが立ち上がっています。新規会員登録時などはこのメーラーで受信して開発・デバックができます。

phpmyadminを使う

mysqlで開発する場合はphpmyadminを入れておくと何かと便利です。