以前から下記の記事でMagento Commerce / Open Source(旧Magneto2系)とRedHat Enterprise Linux(RHEL系)、そしてPHP7の相性が良くないことはお伝えしてきました。

2017年9月に2.2系がいよいよリリースされるにあたり、弊社では各環境での動作検証を進めているところですが、取り急ぎのレポートをしたいと思います。

2017年6月9日のマージで修正が入った

Magentoの公式Githubリポジトリ上で、6月9日にマージが行われ、以下の修正が行われました。
(マージ元での修正は5月26日のコミットのようです)

 -                    array_values(iterator_to_array($monthsData['format']['abbreviated']))
 +                    array_values(
 +                        iterator_to_array(
 +                            null !== $monthsData->get('format')->get('abbreviated')
 +                            ? $monthsData['format']['abbreviated']
 +                            : $monthsData['format']['wide']
 +                        )
 +                    )

確かにPHP7での動作不良はこの箇所が原因で、PHPのintlエクステンションが正しく戻り値を返すことができない環境ではMagentoは正しく動作できていませんでした。

この修正が入ったことによって、RHEL系とPHP7の環境でMagentoが動作できる望みが見えてきました。

環境を作って試してみる

では、モノは試しということで、CentOS7にPHP7を入れた環境を作り、Magento2.2-RCを入れてみましょう。

仮想環境を用意する

まずは仮想環境を用意します。
VagrantでもDockerでもVMWareでも実サーバーでもVPSでも構いません。
要はCentOSやAmazonLinuxなどのRHEL7系のディストリビューションがあればOKです。

PHPをインストールする

OSが起動したら、PHPをインストールします。
CentOS7の標準はPHP5.6なので、iusリポジトリからPHP7をインストールします。

sudo yum install -y http://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/ius-release-1.0-14.ius.centos7.noarch.rpm
sudo yum -y update
sudo yum -y install php70u php70u-pdo php70u-mysqlnd php70u-opcache php70u-xml php70u-mcrypt php70u-gd php70u-devel php70u-intl php70u-mbstring php70u-bcmath php70u-json php70u-iconv php70u-soap

インストールができたら、/etc/php.iniの以下の2つの値を編集しておきます。

memory_limit = 512M
date.timezone = Asia/Tokyo

仕上げにcomposerをインストールします。

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/bin/composer

MariaDBをインストールする

次にデータベースサーバーをインストールします。
CentOS7の標準はMySQLではなくMariaDBなのですが、そのままインストールするとMagento2.2はセットアップできません。
これはMagento2.2が要求するMySQL(あるいはその互換データベース)の下限バージョンが5.6となっているためで、CentOS7で標準的にインストールされるMariaDBがこの条件を満たせないからです。

そこで、MariaDBの公式リポジトリからインストールを行うように設定を編集し、インストールを行います。

sudo vi /etc/yum.repos.d/mariadb.repo

で、viエディタによる編集画面を開きます。
以下の内容を記述します。

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

保存して、MariaDBをインストールし、自動起動設定などを行います。

sudo yum update -y
sudo yum install mariadb mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb

続いて、データベースや接続ユーザーを作成します。

mysql -u root -p
MariaDB [(none)]>create database magento;
MariaDB [(none)]>grant all on magento.* TO magento@localhost identified by '任意のパスワード';
MariaDB [(none)]>flush privileges;
MariaDB [(none)]>exit

Apacheをインストールする

最後にApacheをインストールします。

sudo yum install httpd -y

インストール後、設定を少し書き換えます。

sudo vi /etc/httpd/conf/httpd.conf

で、設定ファイルを開き、ドキュメントルートに書かれている以下の記述を変更します。

- AllowOverride None
+ AllowOverride All

標準ではmore_rewriteが有効になっていないので、設定ファイルを追加しておきます。

sudo vi /etc/httpd/conf.modules.d/10-rewrite.conf

このファイルには以下の記述をしておきます。

LoadModule rewrite_module modules/mod_rewrite.so

最後にApacheを起動し、自動起動の設定をしておきます。

sudo systemctl start httpd
sudo systemctl enable httpd

Githubからソースを取ってくる

ここまでできたらいよいよMagentoのGithubリポジトリからソースを取ってきましょう。

cd /var/www/html/
git clone -b 2.2.0-RC1.3 https://github.com/magento/magento2.git

gitが入っていない場合はyumでインストールしておいてください。

composerで関連ライブラリを取得する

次にcomposerで関連ライブラリを取得します。
Githubから取ってきたMagentoのソースがあるディレクトリに移動し、以下のコマンドを実行します。

composer install

環境や回線の状態によってはすごく時間がかかる可能性がありますので、終わるまで気長に待ってください。

インストールする

composer経由で関連ライブラリが取得できたら、ブラウザでインストール画面にアクセスしてインストールを行います。

上手くインストール画面が表示されない場合は、以下の設定を見直してみてください。

  • SELinuxの有効無効
  • Apacheの実行ユーザーとファイルやディレクトリの所有者
  • ApacheのドキュメントルートとMagentoのソースの場所
  • ネットワークインターフェースの状態
  • iptablesの設定

もちろん、慣れている方はコマンドラインでインストールしていただいても構いません。

管理画面を日本語にする

インストールが無事に完了したら、Magentoの管理画面にログインし、管理画面を日本語にしてみます。
2.1系まではこの時点でエラーになっていましたが、2.2-RC1.3では問題なく画面が表示されると思います。

2017年7月時点での動作状況

2017年7月時点では、以下の環境の組み合わせで2.2系の動作が確認できています。
環境を構築する際の参考にしてみてください。
なお、2.0系や2.1系にこの修正が反映されるかどうかは現時点では不明です。

OSバージョン 7.x
PHPバージョンと
パッケージ
7.0 Remi
IUS
epel -
7.1 Remi
IUS -
epel -