RHEL/CentOS7におけるphpのバージョン問題をAmazon Linuxで解決する

日本では業務用の Linux OS として RHEL / CentOS 系が広く利用されています。aws を新規に利用する際、もしくは既存のシステムをawsに移行する際に、これまで通り Redhat や CentOS を使うのか、または amazon aws が提供する Amazon Linux を採用するのか迷うことと思います。今回は、Amazon Linux と RHEL / CentOS との違いや使い分けをお話したいと思います。

Amazon Linux の特徴と RHEL/CentOS との比較 (*RHEL - Redhat Enterprise Linux)

初代 Amazon Linux と Amazon Linux 2 の大きな違い

Redhat/CentOS系の6以前と7以降の違いとして、7系以降は System-V Init の代替として systemd が採用されています。初代の Amazon Linux と Amazon Linux 2 の違いもこの違いと同じく、初代では System-V Init が使われていますが、2 では systemd が採用されています。そのため、コマンドや運用手法も一新されておりますが、昨今は多くのシステムで systemd への移行は進んでいますので、ノウハウが蓄積されていないなどの問題は減少してきているのではないかと思います。

現状では実績のある古いバージョンのソフトウェア使用のため Redhat / CentOS 6系でないと動作しないなどの要件がない限り、Redhat / CentOS 7系 や Amazon Linux 2 を利用すれば良いかと思います。

その他にも、Amazon Linux には aws-cli がデフォルトで組み込まれていたり、細かな違いはありますが、基本的にはRedhat系を使い慣れた方なら初見でも調べながら簡単に使えると思います。

念のため、下に掲載しました通りWEB開発でよく利用される主要なスクリプト言語のバージョンを比較してみました。

開発言語 公式版標準パッケージ比較表

RHEL7 / Centos7 Amazon Linux Amazon Linux 2
perl-5.16.3 perl-5.16.3 perl-5.16.3
php-5.4.16 php-5.3.29 php-5.4.16
ruby-2.0.0 ruby-2.0.0 ruby-2.0.0
python-2.7.5 python-2.7.16 python-2.7.16

フレームワークを導入時の php のバージョン問題は aws と Amazon Linux で解決

RHEL / CentOS は良くも悪くも実績のある枯れた技術がベースとなっており、利用実績が少ない最新のバージョンはフォローされていない場合があり、特に有名なのは php が未だ version 5.4 系がデフォルトのバージョンとなっていることです。

実績のある枯れたパッケージを利用する場合は php 5.4 でも問題ないことも多いのですが、新しい機能を取り込み次々とWEBサービスを開発しているITベンチャー企業やWEBサービス企業の現場では、php 5.6以上 や php 7系を利用できないことが大きな問題となります。また、CMSの導入時などでもこの php のバージョンが問題となる場合がしばしば発生しています。

下記に主要なPHPフレームワークの動作要件をとりまとめましたが、RHEL7系の標準である php5.4 では下にあげたフレームワークが動作しません。

主要なPHPフレームワークと動作要件

cakephp 3.6 php 5.6.0 以上
Zend Framework 3 php 5.6.0 以上
Synphony 3.4 php 5.5.9 以上
Synphony 4.1 php 7.1.3 以上
Phalcon 3.4 php 5.5 以上 [推奨:php 7.0]
Laravel 5.8 php 7.1.3 以上
CodeIgniter 3.1 php 5.6.0 以上

phpのバージョンが古すぎる問題をどう解決するか

ウェブの情報を見ておりますとremiレポジトリを使ってphp7をインストールすると言う記事が多く書かれており、参考にされている方も多いかと思います。しかし、remiレポジトリは個人がメンテナンスしている非公式のレポジトリのため、私は原則としてこの商用サイトには利用しないこととしています。(※原則・・ですので、どうしてもと言われた場合、事前にメリットとデメリットを説明し、リスクを了承を頂いた上でインストールしてきました)

RPM がないなら php をソースから自前でビルドするという手もあります。これはできないことはありませんが、各種のライブラリ、モジュールまで含め問題なくビルドを終え、さらにモジュールまで含めたすべての機能が正常に動作することをテストするとなるとインフラ構築の工程が膨大に膨れ上がり、よほどの予算と人員とノウハウがあるプロジェクトでないと現実的ではありません。また昨今はRPMやAPTなどでビルド済みのパッケージをインストールすることが主流ですので、ソースコードからビルドを行ったことのあるエンジニアも若い人を中心に減ってきています。昨今の小さく初めて育てていくスモールスタートでは、予算、人員、スピード感からそこにそれだけの工数と予算をつぎ込むのは厳しいことが多いと思います。使い慣れた RHEL7系でかつ公式にメンテナンスされている新しいphpを使う方法はないのでしょうか。

PHPのバージョン問題はこれで解決

PHP7系の公式パッケージで新しいphpを利用する方法としては下記の3パターンとなります。

  • [1] - Redhat Enterprise Linux 7 の Red Hat Software Collections 3.3 を利用する (php5.6~php7.2)
  • [2] - Redhat Enterprise Linux 8 または CentOS 8 の php7.2 を利用する
  • [3] - Amazon Linux 2を利用する

上記の方法のうち[1]はプロジェクトでRHELのライセンスを購入する費用がある場合はこちらが確実です。しかし、昨今のスモールスタートの小さなプロジェクトで、予算がつかない場合は、別の方法を検討する必要があります。

続いて[2]を検討してみましょう。 2019年5月7日にRHELの最新版である 8.0 がリリースされました。RHEL 7系からさらに進化いますが、機能面の変更点も多く、インフラSE、サーバエンジニア、さらに運用部門から見て、まだノウハウやナレッジが蓄積されていないため、いきなりの本格導入は厳しいかと思います。これから少しずつ導入が進んでいくと思いますが、いきなり本番に投入というところはまだまだ少ないのではないでしょうか。

ライセンス費用の問題でRHEL7を見送ったプロジェクトの場合、[2]のRHEL8も同様の費用面の問題から選択肢から除外されますので、CentOS8のリリースを待つこととなります。現在、RHEL8ベースのCentOS8も開発が進んでおり、2019年8月以降にリリースの見込みと噂されています。また、AWSで公式イメージが登場するのはもう少し先の話になりそうです。

RHEL8系が広く普及するであろう2~3年に後はこのPHPの問題は解決していると考えられますが、直近のプロジェクトですぐにPHP5.6以降、もしくはPHP7系を使いたいという場合、[3]のAmazon Linux 2の導入を検討されてはいかがでしょうか。Amazon Linux 2では、Amazon によって公式にメンテナンスされている Amazon Linux Extras と呼ばれるパッケージ群を利用することが可能です。

php7をインストールする

さっそくAmazon Linux 2に php7 をインストールしてみましょう。

[root@amazon2 ~]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

⇒ Amazon Linux ver2 です。

[root@amazon2 ~]# php --version
PHP 5.4.16 (cli) (built: Sep  1 2018 05:47:37)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

⇒ php は 5.4.16 です。実績のあるパッケージで安定稼動が期待できます。

[root@amazon2 ~]# amazon-linux-extras list
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1  =1.5.16 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19 ]
 16  php7.1                   available    \
        [ =7.1.22  =7.1.25  =7.1.27  =7.1.28  =7.1.30 ]

~省略 ~

 31  php7.3                   available    \

~省略 ~

⇒ Amazon aws によりメンテナンスされた新しいバージョンのスクリプト言語やサービスの一覧が表示されます。
phpは 7.1 ~ 7.3 まで用意されていますね。他にも ansible 2.4 や docker 18 など使ってみたいサービスがいくつかあってたいへん気になりますね。

php 7 をインストールしてみましょう!

[root@amazon2 ~]# amazon-linux-extras install php7.1
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-php7.1

~省略 ~

[root@amazon2 ~]#

⇒ 無事インストールが終了しました。パッケージ間の依存問題も自動修正されました。

[root@amazon2 ~]# php --version
PHP 7.1.30 (cli) (built: Jun 12 2019 20:33:42) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

⇒ php のバージョンが7に上がりました。

[root@amazon2 ~]# which php
/usr/bin/php

⇒ 別PATHへの新規インストールではなく、上書きインストールのようです。
先ほどの古い php は使えなくなりますのでその点はご注意下さい。

Amazon Linux 2 は手元の開発環境で無料で利用可能です

最後に Amazon Linux 2 は aws だけではなく、公式にイメージが公開されており、Hyper-V KVM vmware VirtualBox などの仮想マシンがサポートされ、これらがあれば手元の開発環境でも動作します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html別ウィンドウで開きます

うまくDEV環境を構築することができれば、従量課金が発生しない手元の開発環境で開発を行って、ステージングと本番環境へ作成したコードをデプロイすることも可能ですよ。開発会社のインフラエンジニア、サーバエンジニアの皆様はこのような構成も検討されてはいかがでしょうか。

以上、Amazon Linux 2のメリットと特徴、phpのバージョン問題の解決案をご紹介致しました。

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る