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

  • 27
    いいね
  • 2
    コメント

Amazon Linuxに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.http_input = auto/mbstring.http_input = 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

まとめ

これでphp5.6に関してはEC2に問題なくインストールできると思います。