【保存版】EC2(Amazon Linux)の環境構築でhttpdとphp5.6を正しくインストールする手順

Amazon Linuxにhttpd（Apache）とphp5.6を正しくインストールする手順を説明します。
特にphp-gdのインストールは手こずりやすいので注意してください。
Amazon Linuxでない場合でもインストールできるよう、注意書きしてあります。
SSHでサーバーにログインしたところから始めます。

## iptablesについて
AWSでは「Security Groups」というものがあり、EC2やRDSなどのインスタンスに適用できるAWS標準のファイアウォール機能を提供しています。Security Groupsでは、「どのアクセス元」から「どのポート」からのトラフィックを許可することができるかをホワイトリスト形式で設定することができます。
そのため、Amazon Linuxにおいてiptablesは実質設定する必要はなく、初期設定では起動しないようになっています。サーバー内で個別で設定していくよりも複数サーバーで同じ設定を使いまわしたり、管理することを考えると、Security Groupsという形で管理する方が合理的だということなのでしょう。

※Vagrantなどで立ち上げる開発環境用のサーバーの場合、ファイヤーウォール（iptables）やSELinuxが起動されていると外からいじりにくくなるので、停止したり無効化することがあります。

## yumのリセット
古いバージョンがすでに入っている場合などは、一旦全てパッケージを削除してからまとめてインストールした方が依存性を解決しやすいです。

```
$ sudo yum -y remove httpd*
$ sudo yum -y remove php-*
$ sudo yum clean all
```
## yum自体のアップデート
```
$ sudo yum -y update
```
## epelリポジトリについて
Amazon Linux（Amazon Linux AMI release 2016.09）ではデフォルトでepelリポジトリが入っているのでインストールする必要はございません。Amazon Linuxのバージョンの確認は cat /etc/system-release で見ることができます。

※Amazon Linuxでない環境ではepelリポジトリはデフォルトで入っていないことがあります。その場合には下記のコマンドにてインストールをおこなってください。

```
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
```

## remiリポジトリについて
remiリポジトリはAmazon Linux（Amazon Linux AMI release 2016.09）ではデフォルトでインストールされていないので、追加する必要があります。remiリポジトリを追加することでyumリポジトリでは管理されていない新しいバージョンのパッケージをインストールできるようになります。
インストールすると/etc/yum.repos.d/remi.repoというファイルが生成されます。
ファイルの中身を見ると、デフォルトでは全てenabled = 0という設定になっていて、phpなどをインストールする際のyumのコマンドのオプションで--enablerepo=remi という形で一時的にenabled = 1の状態にして使用した方が毎回enabled = 1の状態であるよりかはなにかあった時の問題の切り分けがしやすいと思うのでそういう設定にしました。
2行目は行わなくてもいいですが、明示的に enabled = 0 にしたければおこなってください。

```
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo sed -i -e "s/enabled = 1/enabled = 0/g" /etc/yum.repos.d/remi.repo
```

## 各リポジトリのアップデート
```
$ sudo yum -y update --enablerepo=epel,remi,remi-php56
```

## t1libのインストール
新しいバージョンの php-gd をインストールする場合、先に remi の gd-last と t1lib をインストールから、 php-gd をインストールしないと依存関係により php-gd インストールできなくなります。
amzn-main リポジトリは Amazon Linux の場合に存在するリポジトリなので、そうでない場合には --disablerepo=amzn-main のオプションは外しましょう。

```
$ sudo yum -y install --disablerepo=amzn-main --enablerepo=epel libwebp
$ sudo yum -y install libmcrypt libtool-ltdl libtidy libXpm libtiff gd-last autoconf automake
$ sudo yum -y install --enablerepo=remi,remi-php56 t1lib
```

## Apacheのインストール
php5.6系のパッケージの中にはhttpdに依存するものも含まれているため、Apacheを使用するか否かに関わらずインストールする必要があります。

```
$ sudo yum -y install httpd
```
## php5.6のインストール
たいていのパッケージならこのコマンドで問題なくインストールすることができると思います。
amzn-main リポジトリは Amazon Linux の場合に存在するリポジトリなので、そうでない場合には --disablerepo=amzn-main のオプションは外しましょう。

```
$ sudo yum -y install  --disablerepo=amzn-main --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-cli php-common php-pecl-redis php-gd php-fpm
```
## php.iniの設定
phpのインストール直後は文字コード、mbstring、タイムゾーンなどの設定がデフォルトのままなので、 php.ini を修正します。

```
$ sudo sed -i -e 's/;default_charset = "iso-8859-1"/default_charset = "UTF-8"/g' /etc/php.ini
$ sudo sed -i -e "s/;mbstring.language = Japanese/mbstring.language = Japanese /g" /etc/php.ini
$ sudo sed -i -e "s/;mbstring.internal_encoding = EUC-JP/mbstring.internal_encoding = UTF-8/g" /etc/php.ini
$ sudo sed -i -e "s/;mbstring.http_input = auto/mbstring.http_input = pass/g" /etc/php.ini
$ sudo sed -i -e "s/;mbstring.http_output = SJIS/mbstring.http_output = pass/g" /etc/php.ini
$ sudo sed -i -e "s/;mbstring.encoding_translation = Off/mbstring.encoding_translation = Off/g" /etc/php.ini
$ sudo sed -i -e "s/;mbstring.detect_order = auto/mbstring.detect_order = auto/g" /etc/php.ini
$ sudo sed -i -e "s/;date.timezone =/date.timezone = Asia\/Tokyo/g" /etc/php.ini
```

# Apacheの起動

```
$ sudo service httpd start
$ sudo chkconfig httpd on
```

## まとめ
これでhttpdとphp5.6を正しくインストールできると思います。