Magento2 Docker開発環境の構築


Docker-compose for Magento2, Varnish5, Redis5, MySQL5.7

ここでは、最新の(Magento2.3.3)の開発環境の構築について説明します。

アカウントの取得

Magentoをインストールする為には、MagentoのDevelopperサイトにサインアップして、アカウントを作成する必要があります。

サインアップが出来たらマーケットプレイスのサイトにアクセスしてサインインします。また、そこから以下URLに移動するとアクセスキーの取得・表示が行えますのでここで表示されたキーを控えます。

Public Key: インストール時に Username として使用します。
Private Key: インストール時に Password として使用します。

Dockerファイルのダウンロード(もしくはクローン)

Docker for Mac を使っている場合は、ファイル共有が遅くなるので、Vagrantを用意して立ち上げてください。以下リポジトリのREADMEに立ち上げ方を記述してあります。また、Dockerの構成に必要な一連のファイルも以下のリポジトリにまとめてありますので、クローンするかダウンロードして展開します。

httpdの種類別に2つ作成してあります。nginxの方が新しくよりチューンナップされていてお勧めです。

(Nginx Version) MailCatcher でMagentoから送信したメールが確認できます。
https://github.com/bluemooninc/magento2nginx

(Apache Version)少し古いですが、Redis,Varnishなど設定が載っています。
https://github.com/bluemooninc/magento-docker-base

git clone [email protected]:bluemooninc/magento-docker-base.git
cd magento-docker-base
docker-compose up

どちらもクローンした後に docker-compose で構成をビルドします。
Docker for macintosh を使用している場合は、アンインストールしてVagrantにすることを強くお勧めします。(Mac,Docker間のファイル共有のスピードに問題があり、symfonyベースのプロジェクトは特に遅くなることが確認されています。)

Magento2のインストール

Composer を使用してMagentoのインストールを行います。

docker exec -it apache2 bash
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php --install-dir=/usr/local/bin --filename=composer

composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/magento
Username: [YOUR-PUBLIC-KEY]
Password: [YOUR-PRIVATE-KEY]

データベースの作成

Dockerのビルドが完了したら http://localhost:8085/ で phpMyAdmin にアクセスする事ができるので、SQLコマンドにて以下の通りのデータベースを作成します。

CREATE DATABASE magento DEFAULT CHARACTER SET utf8mb4;

Magentoのセットアップ

ブラウザからのインストール

dockerが立ち上がっていれば、localhostにアクセスすればセットアップが始まります。環境のチェックから始まり、Databaseの設定は localhost や 127.0.0.1 でなく docker のコンテナ名で指定する事に留意してください。docker-composer に記載してあるコンテナ名 ( mysql_host ) で指定します。最後まで進むと、Successの表示とともに管理者のアカウント設定情報が表示されますのでメモします。

コマンドラインからのインストール

Magentoの作業フォルダに移動して、セットアップを行います。

cd magento

bin/magento setup:install \
--base-url=http://localhost \
--db-host=mysql_host \
--db-name=magento \
--db-user=root \
--db-password=root \
--admin-firstname=admin \
--admin-lastname=admin \
[email protected] \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1

## セットアップが完了すると以下の様にURLが表示されます。
¥[SUCCESS]: http://localhost/magento/
¥[SUCCESS]: http://localhost/magento/admin_?????

Cronのインストール

Cronの実行を予定しているのであればインストールします。

# cronをインストール
php bin/magento cron:install
# 確認
crontab -e

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
*/15    *       *       *       *       run-parts /etc/periodic/15min
0       *       *       *       *       run-parts /etc/periodic/hourly
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly
#~ MAGENTO START f37deed947b2ea951ad6f939b8ab752bc79587e3d77f40d06f20f0657c98e94d
* * * * * /usr/local/bin/php /var/www/html/magento/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/magento/var/log/magento.cron.
* * * * * /usr/local/bin/php /var/www/html/magento/update/cron.php >> /var/www/html/magento/var/log/update.cron.log
* * * * * /usr/local/bin/php /var/www/html/magento/bin/magento setup:cron:run >> /var/www/html/magento/var/log/setup.cron.log
#~ MAGENTO END f37deed947b2ea951ad6f939b8ab752bc79587e3d77f40d06f20f0657c98e94d

インデックスの貼り直し

インデックスを貼り直すメッセージが表示された場合に実行します。

php bin/magento indexer:reindex

Redisによるキャッシング

Magentoのコンフィグセッティングにて追加します。

docker exec -it apache2 bash
cd magento
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=redis_host

Redisのモニタリング

docker exec -it redis_host bash
redis-cli monitor

Trouble shooting

An error has happened during application run. See exception log for details.

もしブラウザで上記のメッセージが表示された場合はキャッシュをクリアする事で正常に動作させる事ができます。

redis-cli flushall

Varnishのモニタリング

Varnishの状況を確認する為にモニタリングを実行します。

docker exec -it varnish bash
varnishstat

以上で、各種ミドルウェアの設定を行いローカルで開発する環境が整います。
Varnish,Redisは開発ではなくても良いですができるだけ本番に近い環境で開発する事で、色々な気づきもあると思います。

コマンドメモ

コンテンツの吐き出し、キャッシュクリア、Diのコンパイルコマンドメモです。徐々に解説を更新していく予定です。

php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy
php bin/magento setup:static-content:deploy ja_JP
php bin/magento cache:flush;
php bin/magento cache:clean

サンプルデータのデプロイ

Magento2 には、レッスン用のサンプルデータをデプロイする仕組みが備わっています。最初に管理者としてのオペレーションに慣れる為に、以下リポジトリにあるドキュメントを参照してデプロイします。

Composerでインストールすれば、サンプルデータのデプロイ設定も登録されていますので、以下コマンドで実行可能です。

cd magento
# サンプルデータ取得
php bin/magento sampledata:deploy
# 取得したサンプルデータでセットアップを実行
php bin/magento setup:upgrade

メモリの確認

composer はメモリが少なくてエラーとなる場合があります。php.iniを編集してメモリが確保されたか確認しながら適切な設定をします。デフォルトは128Mですが、上限エラーを回避して行った結果1Gでは足りず2G割り当てました。

## メモリの確認
php -i | grep memory_limit
## php.iniの場所確認
php -r "echo phpinfo();" | grep "php.ini"

デバッグのオン・オフ

magentoの反応が重いと感じたのでデバッグモードをオフにしてみます。

# デバッグオフ
php bin/magento setup:config:set --enable-debug-logging=false && php bin/magento cache:flush
# デバッグオン
php bin/magento setup:config:set --enable-debug-logging=true && php bin/magento cache:flush

メール送信

localhostからメールを送るには、MailCatcherを利用します。php.iniのsendmail_pathに設定して利用します。

## 設定例
sendmail_path = /usr/bin/env catchmail --smtp-ip smtp --smtp-port 1025