Docker composeでEC-CUBE4.0 開発環境構築

Web開発


EC-CUBE4.0を開発するために、環境を構築したので、その過程をメモ程度にまとめておきます。なお、DockerとDocker composeを使ってコンテナ環境を作成するので、DockerとDocker composeをインストールしていない場合はインストールしてください。

※まだインストールしていない方は、Dockerインストールの記事を参考にしてただければと。

環境:
OS: CentOS 8.1.1911
=> Docker&Docker composeインストール済み

GithubからEC-CUBEのソースコードをダウンロードする

git cloneでEC-CUBEのソースコード一式をダウンロードする。

$ git clone https://github.com/EC-CUBE/ec-cube.git
Cloning into 'ec-cube'...
remote: Enumerating objects: 272142, done.
remote: Total 272142 (delta 0), reused 0 (delta 0), pack-reused 272142
Receiving objects: 100% (272142/272142), 129.23 MiB | 3.11 MiB/s, done.
Resolving deltas: 100% (194075/194075), done.

Docker composeでEC-CUBEのコンテナを一式起動

ec-cubeディレクトリに移動し、.envファイルをコピーする。

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

MySQLを使用したいので、以下のように.envファイルを修正する。sqliteの行をコメントアウトし、mysqlを使用するように設定する。

$ vi .env
# DATABASE_URL=sqlite:///var/eccube.db DATABASE_URL=mysql://dbuser:secret@mysql/eccubedb

docker-composeコマンドでコンテナを起動する。
※初期実行時は、完了するまで時間がかかる。

$ docker-compose up -d

※もし起動したコンテナをすべてstopしたい場合には、以下コマンド!

$ docker-compose down

コンテナ起動後(docker-compose up -d)の後、コンテナイメージを確認すると、以下のイメージができている。

$ docker image ls
REPOSITORY               TAG                  IMAGE ID            CREATED             SIZE
ec-cube_ec-cube          latest               15ce6f2ddf50        4 minutes ago       740MB
postgres                 10                   5fea18bb7e20        2 days ago          250MB
php                      7.3-apache-stretch   073c35231c8a        2 days ago          375MB
mysql                    5.7                  c4f186b9e038        2 days ago          435MB
schickling/mailcatcher   latest               a92223e5253a        19 months ago       86.4MB

起動しているコンテナは以下で確認できる。

$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
71c6e0bc5693        ec-cube_ec-cube          "docker-php-entrypoi…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->80/tcp, 0.0.0.0:4430->443/tcp      ec-cube_ec-cube_1
e20bcb8c0f8d        schickling/mailcatcher   "mailcatcher --no-qu…"   4 minutes ago       Up 4 minutes        0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   ec-cube_mailcatcher_1
0d1dad03b9a7        mysql:5.7                "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        33060/tcp, 0.0.0.0:13306->3306/tcp               ec-cube_mysql_1
e68335ad9697        postgres:10              "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        0.0.0.0:15432->5432/tcp                          ec-cube_postgres_1

自分の場合、postgreSQLのコンテナは必要ないので落としておく。

$ docker stop ec-cube_postgres_1
ec-cube_postgres_1

postgresがstopしていることを確認する。StatusがExitedになっているのでOK。

$ docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                     PORTS                                            NAMES
71c6e0bc5693        ec-cube_ec-cube          "docker-php-entrypoi…"   8 minutes ago       Up 8 minutes               0.0.0.0:8080->80/tcp, 0.0.0.0:4430->443/tcp      ec-cube_ec-cube_1
e20bcb8c0f8d        schickling/mailcatcher   "mailcatcher --no-qu…"   8 minutes ago       Up 8 minutes               0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   ec-cube_mailcatcher_1
0d1dad03b9a7        mysql:5.7                "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes               33060/tcp, 0.0.0.0:13306->3306/tcp               ec-cube_mysql_1
e68335ad9697        postgres:10              "docker-entrypoint.s…"   8 minutes ago       Exited (0) 2 minutes ago                                                    ec-cube_postgres_1

初回なので、インストールスクリプトを実行する。インストラクションに従って設定すればOK。

$ docker-compose exec ec-cube bin/console eccube:install

以下コマンドで、DBスキーマの作成 & 初期データを投入したら、以下エラーが表示された。すでにDBのスキーマは構築済みになっている!?

$ docker-compose exec ec-cube composer run-script compile
> bin/console doctrine:schema:create

 ! [CAUTION] This operation should not be executed in a production environment!

 Creating database schema...

In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREAT
  E TABLE mtb_order_status (id SMALLINT UNSIGNED NOT NULL, display_order_coun
  t TINYINT(1) DEFAULT '0' NOT NULL, name VARCHAR(255) NOT NULL, sort_no SMAL
  LINT UNSIGNED NOT NULL, discriminator_type VARCHAR(255) NOT NULL, PRIMARY K
  EY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB'
  :

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'mtb_order_s
  tatus' already exists' while executing DDL: CREATE TABLE mtb_order_status (
  id SMALLINT UNSIGNED NOT NULL, display_order_count TINYINT(1) DEFAULT '0' N
  OT NULL, name VARCHAR(255) NOT NULL, sort_no SMALLINT UNSIGNED NOT NULL, di
  scriminator_type VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER
  SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB

In AbstractMySQLDriver.php line 38:

  An exception occurred while executing 'CREATE TABLE mtb_order_status (id SM
  ALLINT UNSIGNED NOT NULL, display_order_count TINYINT(1) DEFAULT '0' NOT NU
  LL, name VARCHAR(255) NOT NULL, sort_no SMALLINT UNSIGNED NOT NULL, discrim
  inator_type VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET u
  tf8 COLLATE utf8_general_ci ENGINE = InnoDB':

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'mtb_order_s
  tatus' already exists

In PDOConnection.php line 90:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'mtb_order_s
  tatus' already exists

In PDOConnection.php line 88:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'mtb_order_s
  tatus' already exists

doctrine:schema:create [--dump-sql] [--em [EM]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--n                                                                     o-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>

Script bin/console doctrine:schema:create handling the compile event returned with error code 1

画面にアクセスしてみると、インストールできているみたい。
ec-cude install done

参考

docker-composeを使用してインストールする
Github: EC-CUBE

タイトルとURLをコピーしました