〜YATTA〜 EC-CUBE3用にapacheのインスタンスとphpバージョンを分ける

2017年7月の EC-CUBE 2系のサポート終了日が近づいてきましたね。弊社でも EC-CUBE3 の構築案件が増えてくるようになりました。先日、弊社検証サーバーに EC-CUBE3 が素直にインストールできない事件が発生しましたので、その顛末を綴ろうかと思います。

phpのバージョンを素直にあげられない!

その他の CMS 同様、EC-CUBE3 をインストールしようと、何も考えずに検証サーバーにデータベースとインストールファイルを用意し、ブラウザからセットアップ画面を開こうとしたところ・・・。

ローカルの MAMP では何事もなく開いたセットアップ画面がひらきません・・・。
EC-CUBE3 のシステム要件 を確認してみますとそこにはこうありました・・・。

PHP対応バージョン  5.3.9 ~ 7.0.x

あ、ここです。完全にここです。弊社検証サーバーの php は 5系ですが 5.3.9 未満なのです。じゃあ何も考えずに yum であげればいいじゃんと思われるかもしれませんが、その他のシステムの検証用に、本番環境にあわせる形であえて php のバージョンを 5.3.9 未満にしているのです。いろいろと大人の事情で 5.3.9 未満なのです。

もう EC-CUBE3 用に apache のインスタンスを分けてしまおう! ということで、apache を分け、php をソースからビルドしてみました。そんなに時間かかんないだろうと思っていましたが、思いのほか詰まってしまいました・・・。(日曜日が潰れました)

今回のゴールとなる構成

apache
バージョン
apache
インスタンス名
apxs名 php
バージョン
その他のシステム 2.2.15 httpd apxs 5.3.9未満
EC-CUBE3 2.2.15 httpd2 apxs_for_httpd2 7.1.2

他のシステムはこれまでの apache と php5.3.9 未満を利用します。EC-CUBE3用に apache のインスタンス (httpd2) を分け、httpd2 では本記事執筆時の最新バージョンである php 7.1.2 を利用します。EC-CUBE3 のシステム要件には phpバージョン 7.0.x までとありますが、7.1.2 でもいまのところ動いております。(保証はできませんのでそこのところヨロシク)
なお、弊社検証サーバーは CentOS 6系です。apxs とはなんぞや?という方も、いまは読み飛ばしていただいて大丈夫です。後ほど解説します。

作業1. apache のインスタンスを分けよう

cp コマンドで、/etc/init.d/httpd デーモンと /etc/httpd 配下の設定ファイルをコピーします。

設定ファイルに以下を追加・変更します。

/etc/init.d/httpd

/etc/init.d/httpd2

/etc/httpd2/conf/httpd.conf

作業2. モジュールへのシンボリックリンク変更

これはやらなくていいのかもしれませんが、気持ち悪いので httpd2 用にライブラリを作成(コピー)し、モジュールへのシンボリックリンクも httpd2 用に変更しました。

問題なければ、この状態で # service httpd2 start コマンドにて httpd2 インスタンスが起動できるはずです。

作業3. apxs を準備

apxs とは httpd のモジュール追加時に利用するツールです。httpd-devel に含まれています。デベロッパー(開発者用)ツールなので、 CentOS 6 標準インストールの環境だと入っていませんでした。
$rpm -qa httpd-devel でインストールを確認できない場合は、

で httpd-devel ごと入れちゃいましょう。弊社検証サーバーの環境では、 /usr/sbin の中に apxs ができました。

この apxs を、httpd2 用に複製しておきます。

作業4. php 7.1.2 をソースからビルド

適当なディレクトリに入り、php のソースを wget し解凍します。今回は /opt にしました。

コンパイル時には、EC-CUBE3 に必要な各種ライブラリを指定します。
また、apxs には先ほどの apxs_for_httpd2 を指定します。
ビルド後は、php 7.1.2 用の php.ini をコピーしときます。

作業5. httpd2で php7.1.2 用の php.ini を参照するように設定

httpd2 の設定ファイルに以下を追加します。

/etc/httpd2/conf/httpd.conf

作業6. httpd2 では php 実行時に php7 の ライブラリを使うように設定

最後に、http2 インスタンスでは php 7.1.2 のライブラリファイルである、libphp7.so を利用するように設定しておきます。

/etc/httpd2/conf.d/php.conf

・・・何も考えずに 5 の部分を 7にしました・・・。
modules/libphp7-zts.so は用意していませんが、apache を prefork方式で動かしているので問題ないと思います。気になるなら< IfModule worker.c >部は消しても良いと思います。

EC-CUBE3 のインストール画面を確認しよう

以上で作業は終了です。
/etc/httpd2/conf/httpd.conf に設定したポートに接続してみましょう。もちろん、ルートディレクトリに EC-CUBE3 のインストーラを設置するのをお忘れなく。

20170222_eccube3_install

問題なければ、ようやく上の画像のように EC-CUBE3 のインストール画面が表示されるはずです。


20170222_hakoda02

YATTA!!

参考

本記事執筆にあたり、次のサイトを参考にさせていただきました。

ナッツウェル技術研究室様
Apacheを複数のプロセスで起動する方法

俺的備忘録 〜なんかいろいろ〜様
CentOS 7でApacheのインスタンスごとに違うバージョンのPHPを利用する

このエントリーをはてなブックマークに追加

箱田

この記事を書いた人: 箱田

ビーズクリエイトのエンジニア兼プログラマ。

プログラミングが捗る日と捗らない日にムラがあり、
捗る時間を自分でコントロールできる方法を探求している。

エンジニアの君へ。という記事をかきました。
仕事がつらいエンジニアさん、良かったら読んでください。

あわせて読みたい