0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでMySQL+Apache+EC-cube4を立ち上げる

Last updated at Posted at 2021-07-15

ディレクトリ構造

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以外のコンテナはイメージそのまま。

docker-compose.yaml
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/
の部分。

000-default.conf
<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
php.ini
[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 || の行を以下に修正。

composer.json
 "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と同階層に配置する。

docker-sync.yml
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']

docker-compose.yaml
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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?