概要
AWSのEC2に、PHP + nginx + php-fpmの環境を構築する。
- AmazonLinuxExtrasを利用して以下のトピックをインストール
- nginx1.12
- php7.2
- nginxとphpの紐付け
- 動作確認
##環境
- Amazon Linux 2
- nginx1.12
- php7.2
インストール手順
SSHで接続
EC2インスタンスにSSHで接続します。
パッケージの最新化(yumアップデート)
$ sudo yum -y update
nginxのインストール
$ sudo yum -y install nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 2.4 kB 00:00:00
パッケージ nginx は利用できません。
エラー: 何もしません
nginx is available in Amazon Linux Extra topic "nginx1.12"
To use, run
# sudo amazon-linux-extras install nginx1.12
Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
sudo yum -y install nginx
でインストールするとエラーとなりました。
エラーメッセージに表示されているAmazon Linux Extrasは、
安定したオペレーティングシステムで新しいバージョンのアプリケーションソフトウェアを利用可能にする Amazon Linux 2 のメカニズムです。
今回はこのAmazonLinuxExtrasを利用して、nginx
をインストールします。
AmazonLinuxExtrasのExtras Library
からインストールするには、amazon-linux-extras
コマンドを利用します。
$ sudo amazon-linux-extras install nginx1.12 -y
完了しました!
4 nginx1.12=latest enabled [ =1.12.2 ]
バージョンを確認します。
$ nginx -V
nginx version: nginx/1.12.2
自動起動の設定を行います。
$ sudo systemctl start nginx.service
$ sudo systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
$ ● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/nginx.service.d
└─php-fpm.conf
Active: active (running) since 水 2018-11-21 08:57:35 UTC; 1h 28min ago
Main PID: 14943 (nginx)
CGroup: /system.slice/nginx.service
├─14943 nginx: master process /usr/sbin/nginx
└─14945 nginx: worker process
11月 21 08:57:34 ip-10-2-10-76.ap-northeast-1.compute.internal systemd[1]: Starting The nginx HTTP and reverse proxy server...
11月 21 08:57:35 ip-10-2-10-76.ap-northeast-1.compute.internal nginx[14933]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
11月 21 08:57:35 ip-10-2-10-76.ap-northeast-1.compute.internal nginx[14933]: nginx: configuration file /etc/nginx/nginx.conf test is successful
11月 21 08:57:35 ip-10-2-10-76.ap-northeast-1.compute.internal systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
11月 21 08:57:35 ip-10-2-10-76.ap-northeast-1.compute.internal systemd[1]: Started The nginx HTTP and reverse proxy server.
PHP7.2のインストール
PHP7.2についても、AmazonLinuxExtrasを利用して、インストールします。
Extras Library
ではソフトウェア群のことを「トピック」と呼びます。
Extras Library
はyumでパッケージを管理しており、トピックを指定すると、ソフトウェアをインストールし機能させるために必要となるパッケージがインストールされます。
トピックphp7.2
を確認します。
$ amazon-linux-extras info php7.2
php7.2 recommends php-cli # yum install php-cli
php7.2 recommends php-pdo # yum install php-pdo
php7.2 recommends php-fpm # yum install php-fpm
php7.2 recommends php-json # yum install php-json
php7.2 recommends php-mysqlnd # yum install php-mysqlnd
トピックphp7.2
をインストールします。
$ sudo amazon-linux-extras install php7.2 -y
完了しました!
15 php7.2=latest enabled [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 ]
PHPのバージョンを確認します。
PHP 7.2.11 (cli) (built: Oct 24 2018 17:51:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies
PHP7.2のインストールが完了しました。
他に必要なパッケージをインストール
拡張機能を以下のコマンドで確認できます。
sudo yum list php* | grep amzn2extra-php7.2
php-cli.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-common.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-fpm.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-json.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-mysqlnd.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php-pdo.x86_64 7.2.11-1.amzn2.0.1 @amzn2extra-php7.2
php.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-bcmath.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-dba.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-dbg.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-devel.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-embedded.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-enchant.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-gd.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-gmp.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-intl.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-ldap.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-mbstring.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-odbc.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-opcache.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-pecl-apcu.x86_64 5.1.12-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-apcu-devel.noarch 5.1.12-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-igbinary.x86_64 2.0.7-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-igbinary-devel.noarch 2.0.7-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-imagick.x86_64 3.4.3-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-imagick-devel.noarch 3.4.3-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-mcrypt.x86_64 1.0.1-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-memcached.x86_64 3.0.4-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-msgpack.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-msgpack-devel.noarch 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-oauth.x86_64 2.0.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-ssh2.x86_64 1.1.2-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-uuid.x86_64 1.0.4-3.amzn2.0.1 amzn2extra-php7.2
php-pecl-zip.x86_64 1.15.2-3.amzn2.0.1 amzn2extra-php7.2
php-pgsql.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-process.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-pspell.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-recode.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-snmp.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-soap.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-xml.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
php-xmlrpc.x86_64 7.2.11-1.amzn2.0.1 amzn2extra-php7.2
今回は、以下のパッケージをインストールします。
パッケージ | 目的 |
---|---|
php-devel | 拡張機能のソースをコンパイルするために必要。 |
php-opcache | 処理の高速化のため |
php-mbstring | マルチバイト文字列関連の関数を使うために必要。 |
php-xml | xmlを利用するために必要。 |
$ sudo yum install php php-devel php-opcache php-mbstring php-xml
php-fpmの自動起動の設定を行います。
$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
$ systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since 水 2018-11-21 09:18:08 UTC; 1h 10min ago
Main PID: 15031 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
├─15031 php-fpm: master process (/etc/php-fpm.conf)
├─15032 php-fpm: pool www
├─15033 php-fpm: pool www
├─15034 php-fpm: pool www
├─15035 php-fpm: pool www
└─15036 php-fpm: pool www
11月 21 09:18:08 ip-10-2-10-76.ap-northeast-1.compute.internal systemd[1]: Starting The PHP FastCGI Process Manager...
11月 21 09:18:08 ip-10-2-10-76.ap-northeast-1.compute.internal systemd[1]: Started The PHP FastCGI Process Manager.
PHPの設定を編集
以下の記事を参考に、PHPの設定を編集します。
https://qiita.com/kobayashi-m42/items/d4d4bc9e7291b9408390#php%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E7%B7%A8%E9%9B%86
nginxとphpの紐付け
www.conf
の編集
編集前に、/etc/php-fpm.d/www.conf のバックアップを取得します。
www.conf.origin
というコピーファイルを作成します。
$ sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.origin
user
とgroup
をnginx
に変更します。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
- user = apache
+ user = nginx
; RPM: Keep a group allowed to write in log dir.
- group = apache
+ group = nginx
php-fpmを再起動します。
$ sudo systemctl restart php-fpm.service
nginxとphp-fpmがUNIX ドメインソケットで通信できているかを確認
$ netstat -a --unix |egrep "Proto|fpm"
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 285282 /run/php-fpm/www.sock
接続確認
接続確認のため、確認用のファイルを追加します。
#スーパーユーザーに切替
$ sudo su
#接続確認用phpファイル追加
$ echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/phpinfo.php
#ブラウザ確認
$ パブリックDNS/phpinfo.php
以上で、PHP + nginx + php-fpmの環境を構築が完了です。