#前提
Dockerデスクトップをインストール済み
gitコマンドインストール済み
筆者の環境
MacOSX Bigsur
M1チップMacBookPro
このやり方で構築に成功した日。
2021年5月9日。
#EC-cube4のプロジェクトをgitクローンする。
git clone https://github.com/EC-CUBE/ec-cube.git
#DockerComposeファイルを編集する。
postgresとpgAdminの設定を以下のように書く。
version: '3'
volumes:
pg-database:
driver: local
services:
ec-cube:
depends_on:
- postgres
environment:
DATABASE_URL: "postgres://dbuser:secret@postgres/eccubedb"
DATABASE_SERVER_VERSION: 10
postgres:
image: postgres:10
environment:
POSTGRES_DB: eccubedb
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: secret
ports:
- 15432:5432
volumes:
- pg-database:/var/lib/postgresql/data
networks:
- backend
### pgadmin4の設定を追記する。
pgadmin4:
image: dpage/pgadmin4
container_name: pgadmin4
ports:
- 8100:80
volumes:
- ./pgadmin:/var/lib/pgadmin/storage
environment:
PGADMIN_DEFAULT_EMAIL: dotnsf@xxxx.com
PGADMIN_DEFAULT_PASSWORD: P@ssw0rd
hostname: pgadmin4
restart: always
networks:
- backend
docker-composeは以下のように書く。
version: "3"
networks:
backend:
driver: bridge
volumes:
mailcatcher-data:
driver: local
### ignore folder volume #####
var:
driver: local
vendor:
driver: local
node_modules:
driver: local
services:
### ECCube4 ##################################
ec-cube:
build:
context: .
args:
# ビルド時のECCubeインストールスクリプトをスキップする場合にtrueを指定する。
# ビルド時点でDBサーバの起動や接続が出来ない、という場合等にエラーとなるため。
SKIP_INSTALL_SCRIPT_ON_DOCKER_BUILD: "true"
ports:
- 8090:80
- 4430:443
volumes:
### 同期対象からコストの重いフォルダを除外 #####################
- "var:/var/www/html/var"
- "vendor:/var/www/html/vendor"
- "node_modules:/var/www/html/node_modules"
environment:
# EC-CUBE environments
APP_ENV: "dev"
APP_DEBUG: 1
DATABASE_URL: "postgres://dbuser:secret@postgres/eccubedb"
DATABASE_SERVER_VERSION: 3
MAILER_URL: "smtp://mailcatcher:1025"
ECCUBE_AUTH_MAGIC: "<change.me>"
ECCUBE_LOCALE: "ja"
ECCUBE_TIMEZONE: "Asia/Tokyo"
ECCUBE_CURRENCY: "JPY"
ECCUBE_ADMIN_ROUTE: "admin"
ECCUBE_USER_DATA_ROUTE: "user_data"
# ECCUBE_ADMIN_ALLOW_HOSTS: []
# ECCUBE_FORCE_SSL: false
# ECCUBE_TEMPLATE_CODE: "default"
# ECCUBE_COOKIE_NAME: "eccube"
# ECCUBE_COOKIE_PATH: "/"
# ECCUBE_COOKIE_LIFETIME: 0
# ECCUBE_GC_MAXLIFETIME: 1440
ECCUBE_ADMIN_USER: "admin"
ECCUBE_ADMIN_PASS: "password"
networks:
- backend
### Mailcatcher ##################################
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
- "1025:1025"
networks:
- backend
#ローカル側にPGAdminをマウントするためのフォルダを作成する
ローカル側のEC-cubeをgit cloneしたプロジェクトルートで、
docker-compose.pgsql.ymlに記述したvolumesのコロンの手前の文字列と同じ名前のディレクトリを作成する。
mkdir pgadmin
#コンテナを立ち上げる。
プロジェクトルートで公式のpgsql用と書いてあるコマンドをコピペして実行する。
docker compose -f docker-compose.yml -f docker-compose.pgsql.yml -f docker-compose.dev.yml up -d
#初回のインストールコマンドを打つ。
公式のコマンドを打つと、DBのマイグレートとシーダーなどの初期化をやってくれる。
これを忘れるとTableがないというエラーになる。
docker-compose exec -u www-data ec-cube bin/console eccube:install -n
#アクセスする。
ここまででアクセスできると思うので、
ECcube4へは
localhost:8090
pgAdminへは
localhost:8100
をブラウザに打ち込んでアクセスする。
ポート番号は上のymlで設定している番号になるので任意の番号に変更可。
筆者はMAMPで80番を使いたいのでこのように変えています。
#ログイン後のpgAdminのDBコネクション設定
下のページの解説の通りに設定したらできたので続きはそちらをみてください。
#補足・ポイント・困ったことなど
services:の数だけコンテナが別々に立ち上がる。
各サービスのnetworks:の値を揃えることで、コンテナ同士が連携して通信できるようになり、一つのアプリケーションとして機能する。
pgAdminはローカルのどこにマウントしても構わない。ただし、そのフォルダは予め用意しておくこと。
筆者はpostgresのdbのパスと同じかと思い、docker compose upはできるがアクセスすると弾かれるという現象でハマりました。
今回はもうpostgresでやりたいことができたので諦めましたが、本当はmySQLで構築しようとしていました。
しかし、公式のmySQL用コマンドではdocker compose up できず、エラーでこけてしまっていました。
tagを消してlatestにしてもダメだったので、M1チップに対応したイメージがdockerHubにないのかもしれません。
M1マックの人はpostgresを使った方が無難です。(2021/05/09現在)
(2021/05/10追記)
以下の記事の通りにやるとM1チップでもmysqlをインストールできるようになりました。
やぱりCPUが悪いようです。
docker-compose(またはdocker-compose -fで読み込むyml)に以下を追記する。
追記場所はservice:がmysqlのブロック。
platform: linux/x86_64