こんにちは!
久しぶりの投稿になりますkamotetuです!
eccube4.1がリリースされ、早速仕事でeccubeでの開発が始まりました。
最初はeccubeをダウンロードしたときについてくるdockerfileでささっとApacheベースの環境を構築したのですが、リリース予定のサーバーがawsということで、上司からamazonlinuxにapacheをインストールする形で環境構築してと言われ、おぅぅ。。となってなんとか構築できたので、メモとして投稿します!
同じような環境で開発環境を整えたい方は参考にしてください!
前提としてeccube4.1がダウンロード済みとします!
eccube
あと、osはmacを使用しています。
###ディレクトリ構成
.
├── docker
│ ├── apache
│ │ ├── .htaccess
│ │ └── 000-default.conf
│ └── php
│ ├── Dockerfile
│ ├── entrypoint-dev.sh
│ └── php.ini
├── docker-compose.yml
├── .env
└── ec-cube
├──.env <-webインストーラでインストール後に勝手に作成されます。
...
###ファイルの中身
docker/apache/.htaccess
order allow,deny
deny from all
docker/apache/000-default.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Allow from All
Require all granted
</Directory>
docker/php/Dockerfile
FROM amazonlinux:2
RUN yum update -y \
&& yum upgrade -y \
&& yum install -y \
apt-transport-https \
apt-utils \
build-essential \
debconf-utils \
gnupg2 \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libpng-dev \
libpq-dev \
libzip-dev \
locales \
ssl-cert \
zlib1g-dev \
curl \
git \
libxml2 \
libxml2-devel \
httpd \
mysql \
gcc \
gcc-c++ \
vim \
make \
wget \
systemd \
unzip \
sudo \
php-pear \
php-devel \
libzstd \
mod_ssl
RUN yum -y install yum-utils
RUN yum install -y php-pdo php-mysql zip gd opcache intl
RUN wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -ivh epel-release-latest-7.noarch.rpm
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum-config-manager --enable remi-php74
RUN yum install -y php74 php74-php
RUN yum install -y php74-php-intl.x86_64 \
php74-php-mysqlnd.x86_64 \
php74-php-xml.x86_64 \
php74-php-mbstring.x86_64 \
php74-php-pecl-krb5-devel.x86_64
RUN yum update -y --disablerepo=amzn2-core
RUN yum install -y php74-php-pecl-zip.x86_64
RUN curl -sS https://getcomposer.org/installer \
| php \
&& mv composer.phar /usr/bin/composer
RUN yum clean all
RUN sed -ie '354,356d' /etc/httpd/conf/httpd.conf
RUN mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.confdisable
RUN ln -f -n -s /usr/bin/php74 /usr/bin/php
COPY ./docker/php/php.ini /etc/opt/remi/php74/php.d/php.ini
COPY ./docker/apache/.htaccess /
COPY ./docker/apache/000-default.conf /etc/httpd/conf.d/000-default.conf
ARG XDEBUG_INSTALL
ARG BOOL=true
RUN if [ ${XDEBUG_INSTALL} = ${BOOL} ]; then \
yum install -y php-pecl-xdebug3.x86_64; \
fi
COPY ./docker/php/entrypoint-dev.sh /entrypoint-dev.sh
ENTRYPOINT ["/entrypoint-dev.sh"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
docker/php/entrypoint-dev.sh
#!/bin/sh
if [ ${XDEBUG_INSTALL} = true ]; then
if [ -n "${HOST_UID}" -a "${HOST_UID}" != "$(id -u apache)" ]; then
usermod -u "${HOST_UID}" apache
fi
if [ -n "${HOST_GID}" -a "${HOST_GID}" != "$(id -g apache)" ]; then
groupmod -g "${HOST_GID}" apache
fi
ini=$(cat << EOS
xdebug.client_host=${XDEBUG_CLIENT_HOST:-$(ip route | awk 'NR==1 {print $3}')}
xdebug.client_port=${XDEBUG_CLIENT_PORT}
zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.start_with_request=yes
xdebug.remote_cookie_expire_time=3600
xdebug.mode=debug
EOS
)
echo "${ini}" >> /etc/opt/remi/php74/php.d/php.ini
fi
exec "$@"
docker/php/php.ini
opcache.max_accelerated_files = 20000
opcache.memory_consumption=256
realpath_cache_size = 4096K
realpath_cache_ttl = 600
memory_limit = 786M
(一行改行を入れといてください。)
docker-compose.yml
version: "3"
networks:
backend:
driver: bridge
volumes:
mailcatcher-data:
driver: local
mysql-database:
driver: local
services:
### ECCube4 ##################################
ec-cube:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
XDEBUG_INSTALL: "${XDEBUG_INSTALL:-false}"
ports:
- 8080:80
- 4430:443
volumes:
//ec-cubeのデフォルトではvendorとvarもここに書いてありましたが、自分の使っているIDEの入力補完ができなかったため削除しました。
- "./ec-cube:/var/www/html:cached"
environment:
- HOST_UID
- XDEBUG_CLIENT_HOST
- "XDEBUG_CLIENT_PORT=${XDEBUG_CLIENT_PORT:-9000}"
- "XDEBUG_INSTALL=${XDEBUG_INSTALL:-false}"
networks:
- backend
### MySQL ##################################
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: eccubedb
MYSQL_USER: dbuser
MYSQL_PASSWORD: secret
volumes:
- mysql-database:/var/lib/mysql
ports:
- 13306:3306
networks:
- backend
### Mailcatcher ##################################
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
- "1025:1025"
networks:
- backend
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=root
links:
- mysql
ports:
- "4040:80"
networks:
- backend
(プロジェクトディレクトリの).env
XDEBUG_INSTALL=false <- xdebugインストールする場合true
HOST_UID=501 <- macの?場合
XDEBUG_CLIENT_HOST=host.docker.internal <- macの場合
XDEBUG_CLIENT_PORT=9000
そしたらターミナル起動してプロジェクトディレクトリで
$ docker-compose up --build
多分立ち上がるはず
(ec-cubeをダウンロードした際、vendorディレクトリも一緒にダウンロードされているので、ダウンロードした本人はこの時点でwebインストーラーが起動するはず。以下、.gitignoreでvendorを指定した別のメンバー向けのための手順)
そしたら、
$ docker-compose exec ec-cube bash
でコンテナの中に入って、
$ cd /var/www/html
に行って、
$ composer install --no-scripts --no-autoloader --no-plugins -d /var/www/html
(めちゃ時間かかります)
で、
$ composer dumpautoload
そしたら、ブラウザに
http://localhost:8080
でwebインストーラ?が起動するはずです!
###webインストーラが立ち上がったら
- step1: 次へ進む
- step2: 次へ進む
- step3:
- あなたの店名: (適当)
- メールアドレス: (適当)
- 管理画面ログインID: (適当)
- 管理画面パスワード: (適当)
- 管理画面のディレクトリ名: (admin以外)
- 次へ進む
- step4:
- データベースの種類: MySQL
- データベースのホスト名: mysql
- データベースのポート番号: (未入力 or 3306)
- データベース名: eccubedb
- ユーザ名: dbuser
- パスワード: secret
- 次へ進む
- step5: 次へ進む
###mailcatcherの設定
ec-cube/.env
//省略
MAILER_URL=smtp://mailcatcher:1025
//省略
正直不必要な処理も入ってるかもしれませんが、ひとまず動きました。