AWSにeZ Publishをインストールする

# AWSにeZ Publish 5.4をインストールする
**AWS** (Amazon Web Services) の t2.micro インスタンスに **eZ Publish 5.4 をインストール**する手順を紹介する。
EC2インスタンスの立ち上げについてはドラフトなので参考程度に。
## EC2インスタンスの立ち上げ
### EC2インスタンスの作成
![01 インスタンスの作成.png](https://qiita-image-store.s3.amazonaws.com/0/15175/0ba57040-924a-cd6d-82c0-6fac2bd6fe3a.png)
まずは [EC2 ダッシュボード](https://console.aws.amazon.com/ec2/) へ行き、インスタンスの作成ボタンを押下する。
### AMIの選択
![02 AMIの選択.png](https://qiita-image-store.s3.amazonaws.com/0/15175/2d98525f-9033-6adb-4bce-51ff55f5c8f5.png)
今回は Amazon Linux AMI 2015.03 (HVM) で試してみた。
### インスタンスタイプの選択
![03 インスタンスタイプの選択.png](https://qiita-image-store.s3.amazonaws.com/0/15175/16704873-25b7-f627-ecbf-9438a003fb02.png)
### インスタンス作成の確認
![04 インスタンス作成の確認.png](https://qiita-image-store.s3.amazonaws.com/0/15175/d3d2d532-c5d1-1b94-ed46-48f60f7b0d7e.png)
### キーペアのダウンロード
![05 キーペアのダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/15175/e3570b5a-e8af-4b7c-7af7-5f4154c8e0bf.png)
### 作成ステータス
 ![06 作成ステータス.png](https://qiita-image-store.s3.amazonaws.com/0/15175/9717149a-cfad-5d15-caa1-f0bba888789d.png)

### セキュリティグループの編集
![スクリーンショット 2015-07-19 15.21.54.png](https://qiita-image-store.s3.amazonaws.com/0/15175/8d55b9c4-1cf4-02a4-eb3b-7355b48d2074.png)
[セキュリティグループ](https://console.aws.amazon.com/ec2/#SecurityGroups)でインバウンドルールにHTTPを追加する。
## eZ Publish のインストール
### ECインスタンスへ接続
```bash
$ ssh -i yourkey.pem ec2-user@XXX.XXX.XXX.XXX
```
### ミドルウェアとライブラリーのインストール
```bash
$ sudo yum clean all
$ sudo yum update
$ sudo yum install httpd24 mysql-server php56 php56-gd php56-intl php56-mbstring php56-mysqlnd php56-opcache php56-pecl-apcu php56-xml
$ chkconfig httpd on
$ chkconfig mysqld on
```
Amazon Linux のデフォルトリポジトリーで Apache 2.4、PHP 5.6、MySQL 5.5 をインストール。デフォルトリポジトリーの PHP 5.6 だと Xdebug が yum でインストールできないので、必要に応じて pecl でインストールする。

### 設定ファイルの修正
```bash
$ sudo sed -i /etc/php.ini \
  -e 's/;date\.timezone =/date.timezone = Asia\/Tokyo/' \
  -e 's/expose_php = On/expose_php = Off/' \
  -e 's/memory_limit = 128M/memory_limit = 256M/'
$ sudo sed -i 's/\[mysqld\]/\[mysqld\]\ncharacter-set-server=utf8/' /etc/my.cnf
```
### 
```bash
$ wget http://share.ez.no/content/download/161941/957952/version/8/file/ezpublish5_community_project-2014.11.1-gpl-full.tar.gz
$ sudo tar vzxf ezpublish5_community_project-2014.11.1-gpl-full.tar.gz -C /var/www/html --strip=1
```
```bash
$ sudo chown apache:apache -R /var/www/html/*
$ sudo setfacl -R -m u:apache:rwx -m u:apache:rwx /var/www/html/ezpublish/{cache,logs,config,sessions} /var/www/html/ezpublish_legacy/{design,extension,settings,var} /var/www/html/web
$ sudo setfacl -dR -m u:apache:rwx -m u:apache:rwx /var/www/html/ezpublish/{cache,logs,config,sessions} /var/www/html/ezpublish_legacy/{design,extension,settings,var} /var/www/html/web
```
### スワップ領域の作成
t2.microインスタンスは1GBしかメモリーが割り当てられないため、次節のComposerパッケージのアップデートにおいてメモリー不足となる。t2.microインスタンスではデフォルトでスワップ領域がないため次に進められなくなるので別途作成する必要がある。

```bash
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
$ sudo mkswap /swapfile
$ sudo chmod 600 /swapfile
$ sudo swapon /swapfile
```
再起動後も自動でSwap領域を有効にするためには`/etc/fstab`に記述を追加する。なお、EBSだとI/O単位で課金が発生するためスワップアウト/インが頻発する状況だとディスクI/Oの課金がかさんでしまう可能性があるので注意。

```bash
$ echo "/swapfile   swap        swap    defaults        0   0" | sudo tee -a /etc/fstab
```
### Composerパッケージのアップデートとインストール
```bash
$ cd /var/www/html
$ curl -sS https://getcomposer.org/installer | sudo php
$ sudo php -d memory_limit=-1 composer.phar update --no-dev --prefer-dist
$ sudo php -d memory_limit=-1 composer.phar install --no-dev --prefer-dist
Which environment would you like to dump production assets for? (Default: 'prod', type 'none' to skip)
```

### MySQL
```bash
$ sudo service mysqld start
$ openssl rand -base64 12      #MySQLのroot用パスワードの生成
NKKA6H5Vp7XeQvuL
$ mysql_secure_installation
Enter current password for root (enter for none):
Set root password? [Y/n] y
New password: NKKA6H5Vp7XeQvuL #自分で生成したパスワードを使用すること
Re-enter new password: NKKA6H5Vp7XeQvuL
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
$ openssl rand -base64 12      #DBユーザー用パスワードの生成
tavuwGVWxDTj8ctS
$ mysql -u root -p
```

#### DBとDBユーザーの作成
```mysql
mysql> CREATE DATABASE `ezpublish` CHARACTER SET 'utf8';
mysql> GRANT ALL ON `ezpublish`.* TO `ezpublish`@`%` IDENTIFIED BY 'tavuwGVWxDTj8ctS'; #自分で生成したパスワードを使用すること
mysql> EXIT;
```

### eZ Publish 用の Apache の設定
```bash
$ sudo cp -a /var/www/html/doc/apache2/vhost.template /etc/httpd/conf.d/ezpublish.conf
$ sudo sed -i /etc/httpd/conf.d/ezpublish.conf \
-e '/# NameVirtualHost %IP_ADDRESS%/d' \
-e 's/%IP_ADDRESS%:%PORT%>/*:80>/' \
-e 's/ServerName %HOST%/ServerName www.example.com/' \
-e 's/ServerAlias %HOST_ALIAS%/ServerAlias localhost/' \
-e 's/%BASEDIR%\/web/\/var\/www\/html\/web/' \
-e 's/=%ENV%/=dev/'
$ httpd -t
$ sudo service httpd start
```
`ServerName` や `ServerAlias` は適宜書き換えのこと。

セットアップウィザードについては「[eZ Publish 5.4 をインストールする](http://qiita.com/bezeklik/items/c5fee4120249f5adc6ed)」を参考に。