背景
ECCUBE4プロジェクトの環境構築にエラーで毎回悩まされるので備忘録
大まかな流れ
- プロジェクトのclone
- docker-compose.yml の調整
- .envの調整
- コンテナ起動、ビルド
- DBへデータインポート
- その他調整
1. プロジェクトのclone
gitがある場合はgitでclone。
FTPの場合はlogやバイナリ、キャッシュ系は容量が大きいので避けてダウンロード。
2. docker-compose.ymlの の調整
docker-compose.yml
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:
### ローカルでビルドする場合は以下のコマンドを使用します
## docker build -t ec-cube --no-cache --pull --build-arg TAG=8.1-apache .
## docker tag ec-cube ghcr.io/ec-cube/ec-cube-php:8.1-apache
image: ${REGISTRY:-ghcr.io}/${IMAGE_NAME:-ec-cube/ec-cube-php}:${TAG:-8.1-apache}
ports:
- 8080:80
- 4430:443
volumes:
- .:/var/www/html #ローカルと同期するために追記
### 同期対象からコストの重いフォルダを除外 #####################
- "var:/var/www/html/var"
- "vendor:/var/www/html/vendor"
- "node_modules:/var/www/html/node_modules"
environment:
# .envや他のymlに記載する部分はコメントアウト
# EC-CUBE environments
# APP_ENV: "dev"
# APP_DEBUG: 1
# DATABASE_URL: "sqlite:///var/eccube.db"
# DATABASE_SERVER_VERSION: 3
# DATABASE_CHARSET: 'utf8'
MAILER_DSN: "smtp://mailcatcher:1025"
ECCUBE_AUTH_MAGIC: "<change.me>"
# TRUSTED_HOSTS: '^127.0.0.1$$,^localhost$$'
# 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
docker-compose.mysql.yml
version: '3'
volumes:
mysql-database:
driver: local
services:
ec-cube:
depends_on:
mysql:
condition: service_healthy
environment:
DATABASE_URL: "mysql://dbuser:secret@mysql/eccubedb"
DATABASE_SERVER_VERSION: 5.7
DATABASE_CHARSET: 'utf8mb4'
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: dbuser
MYSQL_PASSWORD: secret
volumes:
- mysql-database:/var/lib/mysql
- ./dockerbuild/grant_to_dbuser.sql:/docker-entrypoint-initdb.d/grant_to_dbuser.sql
ports:
- 13306:3306
networks:
- backend
healthcheck:
test: mysqladmin ping
interval: 3s
timeout: 3s
retries: 3
## phpMyAdminとか追加したい場合はここに ##
ポスグレの場合はpgAdminとか追加すると楽。
3. .envの調整
.env
# This file is a "template" of which env vars needs to be defined in your configuration or in an .env file
# Set variables here that may be different on each deployment target of the app, e.g. development, staging, production.
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
###> symfony/framework-bundle ###
# For production servers, use: "APP_ENV=prod" and "APP_DEBUG=0"
# For local development, use: "APP_ENV=dev" and "APP_DEBUG=1"
APP_ENV=dev
APP_DEBUG=1
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS=^localhost$,^example\.com$
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For a sqlite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Set "serverVersion" to your server version to avoid edge-case exceptions and extra database calls
# MySQLの場合はここのコメントアウトを外す
DATABASE_URL=mysql://dbuser:secret@mysql/eccubedb
# DATABASE_URL=postgresql://postgres/eccubedb?user=dbuser&password=secret
# The version of your database engine
DATABASE_SERVER_VERSION=3
# The charset of your database engine
DATABASE_CHARSET=utf8mb4
###< doctrine/doctrine-bundle ###
###> symfony/mailer ###
MAILER_DSN=sendmail://localhost
###< symfony/mailer ###
###> APPLICATION CONFIG ###
# EC-CUBE Configs. The default value is defined in app/config/packages/eccube.yaml.
# Please remove commented out and enable it if you want to change.
#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_ADMIN_DENY_HOSTS=[]
#ECCUBE_FORCE_SSL=false
#ECCUBE_TEMPLATE_CODE=default
#ECCUBE_AUTH_MAGIC=<change.me>
#ECCUBE_COOKIE_NAME=eccube
#ECCUBE_COOKIE_PATH=/
#ECCUBE_COOKIE_LIFETIME=0
#ECCUBE_GC_MAXLIFETIME=1440
#ECCUBE_ADMIN_USER=admin
#ECCUBE_ADMIN_PASS=password
#ECCUBE_2FA_ENABLED=true
#ECCUBE_2FA_COOKIE_NAME=eccube_2fa
#ECCUBE_2FA_EXPIRE=14
#ECCUBE_RESTRICT_FILE_UPLOAD=0
###< APPLICATION CONFIG ###
ECCUBE_TEMPLATE_CODE=default
ECCUBE_LOCALE=ja
コンテナ起動テスト
bash
$ docker compose -f docker-compose.mysql.yml -f docker-compose.yml up -d
どこかのコンテナが死んだら原因調査→解決
composer install してないとか言われるけど、大体違う。
なんかのファイルが足りなかったり、DBのアクセス情報が間違ってたりする。
DBへデータインポート
MySQLの場合はphpMyAdmin、postgreSQLの場合はpgAdminとかを使用してデータをインポートする(dumpファイル使って。)
できない場合はDBに直接入ってインポート。
これを行うと、フロントを構成してる要素やプラグイン系の情報も読み込まれる。