Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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に問題なくインストールできると思います。

yamaguchi_takashi
山口貴史 / 東京大学卒。株式会社Candle共同創業者兼CTO。20歳で株式会社Candleを共同創業し、メディア事業を運営。2016年10月にM&A。現在は、エンジェル投資家として活動もしており、SmartGuild株式会社の代表取締役社長CEO。 / SEO / データ分析 / AWS / ブロックチェーン / Swift / 機械学習 / PHP / Rails
https://www.takashi-yamaguchi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away