KUSANAGI に eZ Publish をインストールしてみた

当記事は「[KUSANAGI Advent Calendar 2016](http://qiita.com/advent-calendar/2016/kusanagi)」の23日目の記事です。検証に手間取り1日押してしまい面目ありません。22日目の記事は @s-miyaza@github さんの「[KUSANAGI Internals - 設定ファイルで見るKUSANAGIの動作について](https://column.prime-strategy.co.jp/archives/column_284)」でした。

普段は eZ Publish を中心にオープンソース CMS 全般によるサイト構築の支援を行っています。

今回は KUSANAGI for VMware への eZ Publish のインストールをトライしてみようと思います。

##  eZ Publish とは
![eZ Logo](https://qiita-image-store.s3.amazonaws.com/0/15175/ae9388c9-723e-f646-7d11-ab2e6dea7b94.png)

**eZ Publish** とは、ノルウェー王国の eZ Systems 社によって1999年から PHP で開発されているエンタープライズ向けオープンソース CMS です。
詳しくは「[エンタープライズ向けオープンソースCMS「eZ Publish」の概要](http://qiita.com/bezeklik/items/5faf803ab30c9254a167)」などをご覧ください。

## 仮想マシンイメージのダウンロード
まずは以下の URL より [KUSANAGI for VMware](https://kusanagi.tokyo/cloud/kusanagi-for-vmware/) の OVA ファイルをダウンロードします。
http://download.prime-strategy.co.jp/CentOS7.2_64_kusanagi7.8.3.ova

普段は VirtualBox を利用しているので、 OVA ファイルなのもありそのまま VirtualBox で利用してみたいと思います。

VirtualBox がインストールされている環境で OVA ファイルをダブルクリックすると VirtualBox が起動し、アプライアンスの設定ダイアログが表示されます。

![スクリーンショット 2016-12-23 20.40.36.png](https://qiita-image-store.s3.amazonaws.com/0/15175/4ab92218-85be-ec89-80c4-44ecbb703d7d.png)

名前、CPU、RAM などを調整してインポートします。

![VirtualBox_concrete5_22_12_2016_15_16_42.png](https://qiita-image-store.s3.amazonaws.com/0/15175/b8f382c2-9884-7949-b595-582af2f75282.png)

VirtualBox のスプラッシュ画面がクリスマス仕様になってました。

```text:root初期パスワード
4XhXygXW9nAdisDb
```

`nmtui` コマンドなどでネットワーク設定を変更しましょう。

## アップデート
```
yum -y --enablerepo=remi,remi-php56 update && reboot
```

## 初期設定
「[KUSANAGIの初期設定](https://kusanagi.tokyo/document/kusanagi-init/)」を参考に初期設定を実施します。

```
kusanagi init --tz tokyo --lang ja --keyboard ja --nophrase --httpd --php7
```
上記パラメーター指定で以下の内容が自動的に処理されます。

* TLS用ホスト鍵ファイルの生成
* サーバタイムゾーンの設定
* ロケールの設定
* キーボードタイプの設定
* kusanagi ユーザーの SSH ユーザー鍵の作成
* Webサーバーの選択
* アプリケーションサーバーの選択

また、以下の内容が対話式で要求されます。

* kusanagi ユーザーのパスワードの設定
* MySQL の root パスワードの設定

## プロビジョニング
「[KUSANAGIのプロビジョニング](https://kusanagi.tokyo/document/kusanagi-provision/)」を参考にプロビジョニングを実施します。

ここではプロビジョンタイプとして WordPress 以外にも Drupal 8 と concrete5 が選択可能ですが、残念ながら eZ Publish はないようなので、新たにプロビジョニング用のスクリプトを作成します。

```bash
cat << "_EOF_" > /usr/lib/kusanagi/lib/deploy-ezplatform.sh
FILENAME="ezplatform-1.7.0-gpl-full.tar.gz"
#FILENAME="ezpublish5_community_project-2014.11.1-gpl-full.tar.gz"
WORKDIR=$(mktemp -d)
cd $WORKDIR
curl -LO https://fossies.org/linux/www/$FILENAME
tar xf $FILENAME --strip=1 -C $KUSANAGI_DIR/DocumentRoot
cd $KUSANAGI_DIR/DocumentRoot
rm -rf $WORKDIR

yum -y --enablerepo=remi,remi-php56 install php-intl

# For eZ Platform 1.7.0
cp app/config/parameters.yml.dist app/config/parameters.yml
sed -i app/config/parameters.yml \
-e "s/ThisEzPlatformTokenIsNotSoSecretChangeIt/$(curl -sS http://nux.net/secret | grep lead | cut -c17-56)/" \
-e "s/root/`echo $DBUSER`/" \
-e "s/database_password: /database_password: `echo $DBPASS`/"
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer run-script post-install-cmd
php app/console ezplatform:install --env prod clean

## For eZ Publish 5.4
#php -r #"copy('https://getcomposer.org/download/1.0.3/composer.phar', 'composer.phar');"
#mv composer.phar /usr/local/bin/composer
#composer update --no-dev --prefer-dist --no-scripts #ezsystems/ezpublish-legacy-installer
#composer selfupdate
#composer remove --no-update --dev behat/mink-selenium-driver
#composer require --no-update symfony/symfony:~2.7.0 #sensio/distribution-bundle:~3.0
#composer install --no-dev --prefer-dist

cp $KUSANAGI_DIR/DocumentRoot/doc/apache2/vhost.template /etc/httpd/conf.d/ezplatform.conf
sed -i /etc/httpd/conf.d/ezplatform.conf \
-e 's/%IP_ADDRESS%:%PORT%/*:80/' \
-e 's/%HOST_NAME%/localhost/' \
-e '/ServerAlias/d' \
-e "s|%BASEDIR%|`echo $KUSANAGI_DIR`/DocumentRoot|" \
-e 's/%BODY_SIZE_LIMIT%/0/' \
-e 's/%TIMEOUT%/42/' \
-e '/#Require all granted/ s/#//'
chown -R kusanagi:www ./
chmod -R g+w ./
_EOF_
```

次にプロビジョニングスクリプトを魔改造してプロビジョンタイプを追加します。

```bash
sed -i.org "/--wplang/i\            '--ezp'|'--ezplatform'|'--ezpublish6')\n\
                APP='ezplatform'\n\
                ;;" /usr/lib/kusanagi/lib/provision.sh
```

これで準備が出来たので、以下のコマンドを実行します。

```
kusanagi provision --ezplatform --fqdn ezplatform --noemail --dbname ezplatform --dbuser ezplatform ezplatform
```

上記コマンドで以下の内容が自動的に処理されます。

* プロビジョンタイプの選択
* ホスト名の設定
* Let’s Encryptの設定
* データベース名の設定
* データベースのユーザー名の設定
* データベースユーザーのパスワードの設定

## 管理画面へログイン
### eZ Platform
コンソールからの作業が完了したら /ez へアクセスします。

![eZ Platform UI.png](https://qiita-image-store.s3.amazonaws.com/0/15175/5df6a3f8-e024-3a33-3381-2210930ff068.png)

Username は `admin` で Password は `publish` が初期設定です。

![eZ Platform   eZ Platform UI.png](https://qiita-image-store.s3.amazonaws.com/0/15175/ea957ced-9436-ec82-f80d-285cb7ccbe21.png)

Content structure へアクセスすると上記のような画面が表示されます。

## まとめ
スクリプトの魔改造は検証不十分なのでもう少し調整が必要かもしれません。そのうち公式に取り込んでいただければと期待しております。
出来ればパフォーマンスの違いなども検証してみたかったのですが時間切れで断念。
KUSANAGI でも eZ Publish が動作することが確認できましたので、今後積極的に紹介していければと思います。

24日目の記事は @toshi__ya さんの「[KUSANAGIへ簡単お引っ越し＆パフォーマンスチューニングの勘所 | TOKYO NEXT CLOUD](http://nextcloud.tokyo/?p=441)」です。