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 process や cache 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 -v
と php-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) 。PHP の FastCGI 実装したモジュール。主に高負荷のサイトで有用な追加機能が用意されている。 |
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 のインストール!!