明日から本気だす

データベース好きなサポートエンジニアのメモです.

Ubuntu18.04 に Nginx と PHP をインストール

はじめに

WSL のバージョン1 環境の Ubuntu 18.04 に nginx と PHP 7.4 をインストールした際の手順や調べたことをメモ。インストール自体は apt install コマンドで OK だった。

nginx の導入

PHP を動作させるなら apache でもよいが、ネットの記事は nginx が多い気がする…。

Install

apt install コマンドで nginx をインストールする。

$ sudo apt install nginx
$ service nginx status
 * nginx is not running
$ service nginx start

ブラウザで http://localhost にアクセス 上記の画面のとおり Welcome to nginx が表示されれば完了。

設定

/etc/nginx/nginx.conf が設定ファイル。まずは最低限で以下の設定を確認。

:::info :beginner: [ToDo] 調べたパラメータを順次更新する :::

パラメータ 内容 設定
user master process 以外の worker processcache manager process プロセスを起動するユーザを指定する。master process は root ユーザが起動する。  デフォルトがwww-dataとなっているので、任意のユーザに変更
server_tokens エラーページにnginxのバージョンを表示させるか。 コメントアウトを外し、offに設定
worker_processes worker process のプロセス数を指定する。nginx がシングルスレッドで起動するため、コア数にあわせて変更するのが一般的。 デフォルトが auto となっているので 1 に変更。※Surface Go上の環境のため。
worker_connections 同クライアントからの許可するコネクション数。指定の数に達するとコネクションを切断 デフォルト値が100。有効にする場合は20ぐらいでチューニング。
client_max_body_size クライアントから送られてくる body の最大値。 デフォルトが1MB。必要であれば調整。
keepalive_requests HTTP の持続的な接続時間。 デフォルト値が65。いったんはそのまま。

Apache との違い

PHP には、モジュール版と CGI版という2種類が存在し、Apache はモジュール版の PHPスクリプトとして実行する。nginx は FastCGI をとおして PHP を実行する模様。そのため、後述の PHP のインストールで php-fpm を導入する。

参考にした Qiita の記事 https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc

PHP の導入

PHP はバージョン 7.4 を導入した。Ubuntu 18.04 に PHP7.4 をインストールする場合、ondrej/php レポジトリを追加する必要がある。

Install

# レポジトリを追加
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php

$ sudo apt update
$ sudo apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip unzip -y

php -vphp-fpm7.4 -v で確認。php -m コマンドを実行すると導入したモジュールの一覧も表示される。

$ php -v
PHP 7.4.11 (cli) (built: Oct  6 2020 10:35:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

$ php-fpm7.4 -v
PHP 7.4.11 (fpm-fcgi) (built: Oct  6 2020 10:35:35)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

$ php -m
[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
~ 省略 ~

調べたモジュール

モジュール名 内容
php-fpm FPM (FastCGI Process Manager) 。PHPFastCGI 実装したモジュール。主に高負荷のサイトで有用な追加機能が用意されている。
php-mbstring 日本語などマルチバイト文字を使うには拡張モジュール。
php-opcache コンパイル済みのバイトコードを共有メモリに保存する拡張モジュール。https://www.php.net/manual/ja/intro.opcache.php
php-gd 画像処理のモジュール

php-fpm の設定

www.conf の user group listen.owner listen.group の4つのパラメータを www-data から任意のユーザに変更する。

$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf

php-fpm の起動

# 構文チェック
$ sudo php-fpm7.4 -t
$ sudo service php7.4-fpm restart

nginx で PHP を実行

/etc/nginx/sites-available/default を編集。<<< の箇所を追加する。

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.php <<<追加 index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; <<<追加
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
                include fastcgi_params; <<<追加
        }

phpinfo() を実行する phpファイルを /var/www/html に配置して、ブラウザでアクセスする。

上記の画面のとおり phpinfo() の実行結果が表示されれば完了。

composer のインストール

PHP のモジュールの依存性管理ツール composer をインストール。 https://getcomposer.org/download/

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

バイナリファイルを /user/bin/composer に移動

$ sudo mv composer.phar /usr/bin/composer && chmod +x "$_"

まとめ

次は MySQL のインストール!!