ディレクトリ構造
mysqlとsrcフォルダは空で用意する。
srcフォルダにec-cubeのソースコードが入る。
Dockerfileでcomposerも入る。
docker
├── apache-php
│ ├── 000-default.conf
│ ├── Dockerfile
│ └── php.ini
├── mysql
├── src
└── docker-compose.yaml
#docker-compose.yaml
apache-php以外のコンテナはイメージそのまま。
version: "3"
services:
apache-php:
build: ./docker/apache-php
ports:
- "8030:80"
volumes:
- ./src:/var/www/html
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=db
- MYSQL_USER=test
- MYSQL_PASSWORD=test
ports:
- "3307:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=test
- PMA_PASSWORD=test
links:
- mysql
ports:
- 4040:80
volumes:
- ./phpmyadmin/sessions:/sessions
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
- "1025:1025"
apacheとphpの設定
EC-Cube特有なのは
DocumentRoot /var/www/html/ec-cube/
の部分。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/ec-cube/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/ec-cube/>
AllowOverride All
</Directory>
</VirtualHost>
FROM php:7.4-apache
# コンテナでllが使えるようにする
RUN echo -e "\n\
alias ll='ls -la --color'\n\
" >> /root/.bashrc
# PHP.iniをコンテナに送り込む
ADD php.ini /usr/local/etc/php/
# コンテナ内の000-default.confを上書きする。
ADD 000-default.conf /etc/apache2/sites-enabled/
# Composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
# ミドルウェアインストール
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libicu-dev \
libpng-dev \
libpq-dev \
less \
&& docker-php-ext-install pdo_mysql mysqli intl
# Laravelで必要になるmodRewriteを有効化する
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
コンテナを立ち上げる
docker-compose up -d --build
コンテナに入ってEC-CUBEをインストールする。
docker ps
で php-apacheのコンテナ名を調べて
docker exec -it {コンテナ名かコンテナID} bash
2021年7月15日現在、このままではcompose installできない。
"ec-cube/plugin-installer": "~0.0.6 || の行を以下に修正。
"ec-cube/plugin-installer": "~0.0.6 || ^2.0@dev",
composer update
EC-CUBEのインストールコマンドを実行する。 bin/consoleがphp artisanのようなもの。
このコマンドが成功するとDBにEC-CUBE4用のテーブル作成とデモデータが投入される。
e:i は ec-cube:install コマンドの省略形
cd ec-cube/
bin/console e:i
上のコマンドを打つと質問されるので以下のように入力する。
mysql://{DBユーザ名}:{DBパスワード}@{mysqlコンテナ名}/{db名}
{mysqlコンテナ名}の部分をlocalhostと書いている記事ばかりですが、それだとnot found exceptionでconnection refuseされました。
docker ps コマンドで出てくるコンテナ名を指定してください。
Database Url [sqlite:///var/eccube.db]:
> mysql://root:root@ec-cube4_mysql_1/db
Mailer Url [null://localhost]:
> smtp://localhost:1025
Auth Magic [lsDLkCPPm1nBJQT3]:
>
localhost:8030(可変。docker-composeに書いたポート)にアクセス。
ここまでで、一応動くがとてつもなく動作が重いので軽量化のためにdocker-syncを使う。
docker-syncを導入する。
docker
├── apache-php
│ ├── 000-default.conf
│ ├── Dockerfile
│ └── php.ini
├── mysql
├── src
└── docker-compose.yaml ◀︎ 編集する
└── docker-sync.yml ◀︎ 追加
docker-sync.ymlをdocker-compose.yamlと同階層に配置する。
version: '2'
syncs:
eccube-sync:
src: './src'
sync_host_ip: '127.0.0.1'
sync_host_port: '5000'
sync_strategy: 'native_osx'
sync_excludes: ['.git', '.gitignore', 'node_modules', 'var']
version: "3"
services:
apache-php:
build: ./docker/apache-php
ports:
- "8030:80"
volumes:
# - ./src:/var/www/html ホスト側のディレクトリをボリュームコンテナに書き換える
- eccube-sync:/var/www/html
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=db
- MYSQL_USER=test
- MYSQL_PASSWORD=test
ports:
- "3307:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=test
- PMA_PASSWORD=test
links:
- mysql
ports:
- 4040:80
volumes:
- ./phpmyadmin/sessions:/sessions
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
- "1025:1025"
volumes:
# 追加
eccube-sync:
external: true
docker-syncを立ち上げる
docker-compose down
docker-sync start
docker-compose up -d
私はここでRuntimeエラーがでてハマりました。
以下のコマンドでunisonランタイムをインストールしてクリーンしたらdocker-sync startできました。
brew install unison
brew install eugenmayer/dockersync/unox
docker-sync clean
また、docker-syncスタートはdocker-sync.ymlのあるディレクトリでコマンドを入力しないとパスがずれます。
pwdでカレントディレクトリを確認してから実行してください。
動作確認
1 | 2 |
---|---|
利用者側 | localhost:8030 |
管理者側 | localhost:8030/admin |
管理者画面初期パスワード ( src/ec-cube/.envにコメントアウトされて記載されている。)
1 | 2 |
---|---|
ログインID | admin |
パスワード | password |