Amazon Linux で Nginx & PHP の最新版をインストールした際の記録

AWS, Linux, Nginx, PHP

Amazon Linux で Nginx & PHP の最新版をインストールした際の記録

環境

  • インストール日 : 2016年7月19日
  • OS : Amazon Linux 2016.03
  • httpd : Nginx1.10
  • プログラミング言語 : PHP7

Nginx

  • 何も設定を行わずに $ sudo yum install nginx とすると、レガシーな1.8系がインストールされます。

  • ソフトウェアによってはバージョン指定することでより新しいものがインストールできたりするんですが、Nginxについてはなさそうです

  • そこで、参照するリポジトリを変更して、最新版がインストールされるように設定を行います
  • [Nginx 公式ドキュメント](http://nginx.org/en/linux_packages.html#mainline) に、設定ファイルを書き換えて参照するレポジトリを変更する方法が書かれています。
  • 今回、この手順に従って作業を行ってみました。これはその際のログです。

Nginx1.8 を削除

  • これから 最新版を入れるので、古いバージョンのものは削除しました

Amazon Linux のバージョン指定

  • 公式ドキュメントの手順によると、以下の2ステップを行えばよい
    1. 設定ファイルにnginxのリポジトリについての記述を追加
    2. 電子署名を追加

設定ファイルにnginxのリポジトリについての記述を追加

  • RHEL もしくは CentOS のバージョンを設定ファイルに書く必要がありました。
  • Amazon Linux も元を正せば RHEL なので、互換となるバージョンがあるはずです
  • こちらの記事のやり方に従って、まずは Amazon Linux のバージョンを見てみました

  • よく分かりません…
  • その後いろいろと調べたのですが、信頼できるソースの情報は見つかりませんでした…

電子署名を追加

  • nginx のリポジトリを信頼できるものとして登録してあげないといけません
  • 公式から署名ファイルをダウンロードし、それを登録します。

新しいバージョンがインストールされない問題

  • 早速インストール…と思ったのですが問題が発生しました

  • 作業前とバージョンが変わってません

リポジトリの優先順位設定

  • Amazon公式リポジトリの設定ファイルに次のような記述を見つけました

yum-plugin-priorities という機能によるものらしく、「小さい方が優先順位が高い」という設定のようです
* そこで、次の一文を nginx.repo に追加しました

  • 少々乱暴ですね。ちょうど良い値を考えなければいけないです

インストール

  • この状態で yum を実行すると、最新版にあたる 1.10系 がインストールされました

  • nginx のサービスをスタートさせる

  • システム開始時に自動起動するように設定を行う

  • 最後にサイトに対してアクセスを行い、index.html が表示されることを確認

PHP

  • リポジトリとしてどれを選択するか、記事によっていくつか方法がありました
  • 今回は「epel」と「remi」を用いることにしました
    • epel は Fedora (実験的で不安定だけどソフトウェアを沢山提供) のリポジトリを他の互換ディストリビューションでも使いたい!という気持ちから生まれたリポジトリらしいです。(詳しくは こちら )
    • そして、remi は PHPやその周辺パッケージを常に最新バージョンで提供したい!という気持ちから生まれたリポジトリらしいです。(詳しくは こちら)

リポジトリを有効にする

  • remi
    • こちらはそもそも、設定すらされていません
    • 新たなリポジトリとして登録を行います
    • やり方は この記事を参考にしました

古いバージョンのものを削除

yum remove を使って php5.3 系の物を削除しました

インストール

  • PHP7 をインストールしてみます

無事に PHP7 がインストールされました

php-fpm が正しくインストールされない問題

  • 次に、php-fpm もインストールを行いました

  • しかしながら、 php-fpm の実行ファイルがどこにも居ません

先輩に相談

  • この問題を私個人では解決できませんでした
  • 先輩に相談したところ、ヒントのを教えて頂きました
  • どうやら、名前が重要らしく
    • php70-php-fpm という名前でインストールしているので、 インストールされるコマンドおよびサービス名も php70-php-fpm になるようです
    • そもそも、php-fpm という名前でインストールを行っても PHP7 系がインストールされるように設定を行う方法があると押して頂きました
  • それ以外にも、先輩に相談を行ったところ問題が発覚しました
    • 改めてインストール時の実行結果を見てみると、設定したはずの remi リポジトリからインストールが行われていません

これらの解決について、次の節で説明します

リポジトリの再設定

  • 先輩から頂いた指摘に関して自分なりに考えたところ、原因は以下の二つにあると考えました
    • 追加したリポジトリが有効になっていない
    • 優先順位が設定されていないため、最低優先順位のamzn-mainよりもさらに下の優先順位になっている
  • そこで、以下の内容を /etc/yum.repos.d/remi-php70.repo になるように修正します
    • 変更したのは priority と enabled の項目です

  • その状態で改めてインストールを行いました
  • ひとまず、これまでインストールしたものを全て削除しました

  • 改めて、php および php-fpm をインストールします。
    • リポジトリが変更されていることと、バージョンが7系になっていることが確認できます
    • httpd (apache) は不要なのですが、これをインストールしない方法が分からなかったので、一緒にインストールします
    • remi が遅いので、これも今後なんとかしたい
  • (補足)php-fpm について
    • Apache の場合、PHP は Apache のモジュールの一つとして動いています
    • つまり。Apache の中で PHP も一緒に動いているようなイメージです
    • 一方、Nginx では PHP は全く別のプロセスとして動いています
    • これが PHP-FPM です
    • Apache では、PHPの設定を変えた場合でも apache の設定を変えた場合でも apache の再起動を行っていました
    • しかし、Nginx では PHP の設定を変えた場合には php-fpm を再起動しなければいけません

  • php のバージョンを確認します

  • php-fpm のバージョンも確認します

いずれも問題がなさそうです

  • php-fpm も自動起動するように設定しておきましょう

PHP7 が Nginx 上で動くように設定する

  • まず、サンプルプログラムを DocumentRoot 以下に置きます

  • 次に、Nginx の設定ファイルを編集します

  • 最後に、Nginx と php-fpm を再起動し、設定を反映させます

  • この状態で、http://[自分のアドレス]/info.php にアクセスすることで、phpinfo() の実行結果が表示されるはずです
    • 中身を確認して、PHP7 + Nginx1.10 (正確には各ソフトウェアの最新版)が動いていれば無事にインストール成功です

AWS, Linux, Nginx, PHP