はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。
今回は、EC2上でnginxを使いPHPを動かす設定の流れを学びましたので、すぐに復習できるよう記事にまとめておきたいと思います。
間違いなどがございましたら、ご指摘のほどよろしくお願い致します。
EC2でPHPを起動させる準備
1.PHPのインストール
まず初めに、EC2上でPHPのインストールを行います。
ターミナルでEC2にログイン後、下記のコマンドを入力して利用可能なバージョンを確認した後にインストールを実行します。
$ amazon-linux-extras
//利用可能なトピックのリストが一覧で表示される
0 ansible2 available \
[ =2.4.2 =2.4.6 =2.8 =stable ]
# 略
42 php7.4 available [ =stable ]
//42番目にphp7.4が利用可能であることがわかる(7.3なども利用可能)
$ sudo amazon-linux-extras install php7.4 -y
//実行することでphp7.4がインストールされる
完了しました!
# 略
42 php7.4=latest enabled [ =stable ]
//上記のように表示されている場合、インストールが成功
上記のように、$ amazon-linux-extras
コマンドを実行して利用可能なトピックのリストを確認した後に、今回の場合だとphp7.4をインストールするために、$ sudo amazon-linux-extras install php7.4 -y
コマンドを実行しています。
実行結果としてphp7.4=latest enabled [ =stable ]
の表示があればインストールが成功しています。
2.PHP-FPMの起動
nginxを利用してPHPを動かすために、PHP-FPMと呼ばれるプログラムを起動させる必要があります。
PHPをインストールした段階では、PHP-FPMは起動していません。
まずはnginxとPHP-FPMのプロセスを確認するため、下記のコマンドを実行します。
$ ps -o user,group,cmd -e | grep -v grep | grep -e nginx -e php-fpm
//起動中のプロセスをnginxとphp-fpmという語句が含まれるものに絞って表示する
//実行結果
root root nginx: master process /usr/sbin/nginx
nginx nginx nginx: worker process
//1行目は、nginxのマスタープロセスでrootユーザー権限で動いています。
//2行目は、nginxのワーカープロセスでnginxユーザー権限で動いています。
上記の実行結果から、PHP-FPMのプロセスは起動していないことがわかります。
~コマンドとコマンドオプションの補足~
・psコマンド : 起動中のプロセスを表示する
・grepコマンドの「-v」オプション : 指定した検索文字列やパターンと一致しないデータを表示する
・grep コマンドの「-e」オプション : 指定した検索文字列やパターンのテキストを検索して一致したデータを表示する
次に、PHP-FPMを起動させるために下記コマンドを実行し、もう一度起動中のプロセスを表示するコマンドを実行してPHP-FPMが起動していることを確認します。
$ sudo systemctl start php-fpm
//PHP-FPMを起動させます
$ sudo systemctl restart nginx
//nginxにPHP-FPMを認識させるため、nginxを再起動します
$ ps -o user,group,cmd -e | grep -v grep | grep -e nginx -e php-fpm
//実行結果
root root php-fpm: master process (/etc/php-fpm.conf)
apache apache php-fpm: pool www
apache apache php-fpm: pool www
apache apache php-fpm: pool www
apache apache php-fpm: pool www
apache apache php-fpm: pool www
root root nginx: master process /usr/sbin/nginx
nginx nginx nginx: worker process
上記の実行結果から、nginxとPHP-FPMが起動していることがわかります。
~実行結果の補足~
php-fpm: pool www : PHP-FPMのプールと呼ばれるもので、PHPの処理を行うものです。
※PHP-FPMのプールのユーザーとグループがapacheになっているので変更する必要があります。
上記の手順を踏むことで、EC2インスタンスにExtras LibraryからPHPをインストール後、PHP-FPMを起動させることでPHPプログラムを動かすことが可能になります。
今回は、PHP-FPMの起動までしか行っていませんが、PHP-FPMを起動させたら、PHPのプログラムが正常に動くかを確認しておくと良いと思います。
何かを表示するPHPプログラムをviにて作成後、ブラウザでEC2インスタンスのパブリックIPアドレスにアクセスして表示されることを確認してください。
PHPアプリケーションを動かすための準備
PHPアプリケーションを動かすために、PHP関連のパッケージをインストールする必要があります。
1.Composerのインストール
ComposerはPHP用の依存関係マネージャです。
Composerを使用して、ライブラリのインストールやアプリケーションの依存関係の追跡、PHPフレームワーク用のプロジェクトの作成を行うことができます。
EC2にはデフォルトでcomposer本体がインストールされていないので、Composerのインストールを実行します。
Composer本体のインストールはroot権限で実施する必要があるので、$ sudo
を扱えるec2-user
ユーザーで下記のコマンドを実行します。
$ cd ~
$ sudo curl -sS https://getcomposer.org/installer | php
//実行結果
All settings correct for using Composer
Downloading...
Composer (version 2.1.8) successfully installed to: /home/ec2-user/composer.phar
Use it: php composer.phar
上記のように、Composerをインストールするために、getcomposer.org
のPHP スクリプトを使用します。
インストーラによって現在のディレクトリにPHARファイルが生成され、このファイルを環境 PATH内に移動することで、実行可能ファイルとして使用できます。
2. composer.pharの所有者とグループを変更、PATHを通す
ダウンロードしたcomposer.phar
の所有者とグループをroot
に変更して、composer.pharを利用するためにPATHを通す設定を行います。
下記のコマンドを実行してください。
$ sudo chown root:root composer.phar
$ sudo mv composer.phar /usr/bin/composer
1行目のchownコマンド
に関しては補足でまとめていますので参考にしてください。
2行目では、インストーラによって現在のディレクトリにcomposer.phar
ファイルが生成されるので、このファイルを環境 PATH 内に移動させることで、実行可能ファイルとして使用できるようにしています。
3.Composerが実行できるかを確認する
ec2-userユーザー
で、下記のコマンドを実行してインストールしたComposerのバージョンを確認してください。
$ composer -v
//実行結果
Composer version 2.1.8 2021-09-15 13:55:14
上記のようにバージョンが表示された場合は問題ありません。
Composerのバージョンを1系にする必要がある場合は、下記のコマンドを実行してバージョンを変更してください。
$ sudo composer self-update --1
Warning: You forced the install of 1.10.22 via --1, but 2.1.8 is the latest stable version. Updating to it via composer self-update --stable is recommended.
Upgrading to version 1.10.22 (1.x channel).
Use composer self-update --rollback to return to version 2.1.8
上記のように警告文が表示されますが問題ありません。
バージョンを変更後、再度$ composer -v
を実行してバージョンを確認してください。
Composerのバージョンが1.x.xとなっていれば大丈夫です。
4.php-mbstringとphp-xmlのインストール
次に、php-mbstring
とphp-xml
をインストールします。
これらを事前にインストールしておくことで、PHP関連パッケージ(Laravelフレームワーク本体など)のインストールが行えます。
下記のコマンドを、ec2-user
ユーザーで実行します。
$ sudo yum install php-mbstring php-xml -y
//実行結果
完了しました! と表示されていればインストールは成功です
PHP関連パッケージのインストール
ec2-user
とは別で追加したユーザー(例:webapp)に切り替えて、/home/webapp/ディレクトリ名
にてインストールを行います。
ユーザーの作成方法はリンク先をご覧ください。
※/home/webapp/ディレクトリ名
は、GitHub上にあるPHPアプリケーションをgit clone
でインストールした際に作成され、何も指定しない場合はgit clone
の対象となるリポジトリ名がそのままディレクトリ名になります。
/home/webapp/ディレクトリ名
配下で作成や更新を行う場合は、webappユーザーで実施します。
下記のコマンドを実行して、PHP関連パッケージをインストールします。
$ sudo su - webapp //webappユーザーに切り替える
$ cd ディレクトリ名 //指定したディレクトリに移動する
$ composer install --no-dev --prefer-dist
//実行結果
# 略
Package manifest generated successfully.
~コマンドの補足~
--no-devオプション : 開発時のみ必要であり本番環境では必要のないものをインストールしないようにするオプションです。
インストール対象外となるものは、/composer.jsonのrequire-dev
に記載されているものです。
--prefer-distオプション : バージョン管理を含めないでプロジェクト作成するオプションです。
補足
・PHP-FPMとは
特徴
FPM (FastCGI Process Manager) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。
引用:
FastCGI Process Manager (FPM)
Extras Library経由でPHPをインストールした場合、同時にインストールされています。
役割
PHP-FPMはnginxと密接に関係しており、簡単に説明すると、リクエストをnginxが受け取りPHPの処理を行う場合にPHP-FPMが処理を担当しています。
nginxとPHP-FPMの仕組みについては下記リンク先の記事が非常にわかりやすかったのでご覧ください。
[nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する]
・chownコマンド
chownコマンドは、ファイルやディレクトリの所有者と所属グループを変更することが可能です。これらの変更を行えるのは、そのファイルの所有者または管理者(スーパーユーザー)のみです。
書式
$ chown [オプション] [ユーザー]:[グループ] ファイル名orディレクトリ名
例
$ sudo chown root:root file01
//「file01」ファイルの所有者を「root」に、所属グループを「root」に変更します
以上で、AWS EC2でのnginxを利用したPHP環境の作成は終了です。
まとめ
今回の手順を踏むことで、nginxに対応したPHP本番環境のセットアップを行うことができます。
しかし、.envの設定やnginxとphp-fpmの設定をEC2上に存在するアプリケーション向けの設定に変更していないので、別途編集を行う必要があります。
その設定に関する内容はリンク先の記事でまとめているので是非ご覧ください。
・.envの設定
・nginxの設定
・php-fpmの設定
参考文献
FastCGI Process Manager (FPM)
Amazon Linux 2 を実行している EC2 インスタンスに Extras Library からソフトウェアパッケージをインストールする方法を教えてください。
PHP 開発環境のセットアップ