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
画面にアクセスしてみると、インストールできているみたい。