LoginSignup
21
27

More than 5 years have passed since last update.

AWSのEC2にPHP + nginx + php-fpmの環境を構築する

Last updated at Posted at 2018-11-21

概要

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

usergroupnginxに変更します。

/etc/php-fpm.d/www.conf
; 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の環境を構築が完了です。

参考記事

21
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
27