ウェブサイト検索

Ubuntu 20.04 LTS に Nginx、MySQL、PHP (LEMP スタック) をインストールする


前回のチュートリアルでは、Ubuntu 20.04 LTS サーバーにLAMP スタックをインストールする方法について説明しました。このチュートリアルでは、Ubuntu 20.04 LTS サーバー エディションに Nginx、MySQL、PHP (LEMP スタック) をインストールする方法を説明します。 LEMP は、Linux、Engine-x、MariaDB/MySQL、の頭字語です。 >PHP/Perl/Python。

Ubuntu 20.04 LTS に Nginx、MySQL、PHP (LEMP スタック) をインストールする

このチュートリアルでは、次のテスト マシンを使用します。

  • オペレーティング システム : Ubuntu 20.04 LTS サーバー
  • IP アドレス : 192.168.225.52/24

始めましょう。

1.UbuntuにNginxをインストールする

ターミナルから次のコマンドを実行して、Nginx Web サーバーをインストールします。

sudo apt install nginx

Nginx をインストールした後、次のコマンドを使用して Nginx サービスが実行されているかどうかを確認します。

sudo systemctl status nginx

サンプル出力:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

上記のような出力が表示された場合、Nginx サービスは開始されています。

Nginx サービスがまだ開始されていない場合は、次のコマンドを使用して開始できます。

sudo systemctl enable nginx
sudo systemctl start nginx

1.1 UFW ファイアウォール経由で Nginx Web サーバーを許可する

UFW は、Uncomplicated Firewall の略で、ネットフィルター ファイアウォールを管理するためのプログラムです。使いやすい。 UFW は、すべての Ubuntu バージョンでデフォルトで利用可能です。

Ubuntu 20.04 LTS で UFW ファイアウォールを有効にしている場合、デフォルトでは、リモート システムから Nginx Web ブラウザにアクセスできません。以下の手順に従って、http ポートと https ポートを許可する必要があります。

まず、次のコマンドを使用して、どのアプリケーションがプロファイルをインストールしたかを表示します。

sudo ufw app list

サンプル出力:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

ご覧のとおり、Nginx および OpenSSH アプリケーションには UFW プロファイルがインストールされています。

「Nginx Full」 プロファイルを調べると、ポート 80443 へのトラフィックが有効になっていることがわかります。

sudo ufw app info "Nginx Full"

サンプル出力:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

次に、次のコマンドを実行して、このプロファイルの受信 HTTP および HTTPS トラフィックを許可します。

sudo ufw allow in "Nginx Full"

以下のような出力が表示されます。

Rules updated
Rules updated (v6)

https トラフィックを許可し、http (80) トラフィックのみを許可する場合は、次を実行します。

sudo ufw app info "Nginx HTTP"

先に進み、Nginx テスト ページを実行しましょう。

これを行うには、Web ブラウザを開いて http://localhost/ または http://IP-Address/ に移動します。

以下に示すように、Nginx のようこそページが表示されます。

おめでとう! Nginxサーバーは動作しています!

2. Ubuntu に MySQL をインストールする

MySQL を Ubuntu にインストールするには、次のコマンドを実行します。

sudo apt install mysql-server

次のコマンドを使用して、MySQL サービスが実行されているかどうかを確認します。

sudo systemctl status mysql

サンプル出力:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

上記の出力でわかるように、Mysql が実行されています。

2.1 Mysql のデータベース管理ユーザー (root) パスワードを設定する

デフォルトでは、MySQL のroot ユーザー パスワードは空白です。データベース管理アカウントに空のパスワードを使用することはお勧めできません。次のスクリプトを実行して、MySQL サーバーを保護する必要があります。

sudo mysql_secure_installation

「VALIDATE PASSWORD」 コンポーネントをセットアップするかどうかを尋ねられます。このコンポーネントを使用すると、ユーザーはデータベース資格情報の強力なパスワードを構成できます。有効にすると、パスワードの強度が自動的にチェックされ、十分に安全なパスワードのみを設定することがユーザーに強制されます。 これは無効のままにしておくのが安全です。ただし、データベース資格情報には強力で一意のパスワードを使用する必要があります。このコンポーネントを有効にしたくない場合は、任意のキーを押してパスワード検証部分をスキップし、残りの手順を続行します。

答えがはいの場合は、パスワード検証のレベルを選択するよう求められます。

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No y

利用可能なパスワード検証はです。適切な数字 (低パスワードの場合は 0、中パスワードの場合は 1、強力なパスワードの場合は 2) を入力し、ENTER キーを押すだけです。

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

ここで、MySQL root ユーザーのパスワードを入力します。前の手順で選択したパスワード ポリシーに応じて、mysql root ユーザーのパスワードを使用する必要があることに注意してください。プラグインを有効にしなかった場合は、選択した強力で一意のパスワードを使用してください。

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

パスワードを 2 回入力すると、パスワードの強度が表示されます (この場合は100)。問題ない場合は、Y を押して、提供されたパスワードを使用して続行します。パスワードの長さに満足できない場合は、他のキーを押して強力なパスワードを設定してください。現在のパスワードで問題ないので、y を選択しました。

残りの質問については、y と入力して Enter キーを押してください。これにより、匿名ユーザーが削除され、root ユーザーのリモート ログインが禁止され、テスト データベースが削除されます。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

終わり! MySQL root ユーザーのパスワードを設定しました。

2.2 MySQL root ユーザーの認証方法を変更する

デフォルトでは、MySQL root ユーザーは、Ubuntu 上の MySQL 5.7 以降のバージョンから「auth_socket」 プラグインを使用して認証するように設定されています。セキュリティは強化されますが、phpMyAdmin などの外部プログラムを使用してデータベース サーバーにアクセスする場合は、状況が複雑になります。この問題を解決するには、認証方法を auth_socket から「caching_sha2_password」 または 「mysql_native_password」 に変更する必要があります。

MySQL 8.0 バージョンの時点で、推奨されるデフォルトの認証プラグインはcaching_sha2_password です。 caching_sha2_password 認証プラグインは、mysql_native_password プラグインよりも安全なパスワード暗号化を提供します。

認証プラグインを変更するには、次のコマンドを使用して MySQL プロンプトにログインします。

sudo mysql

mysql プロンプトで次のコマンドを実行して、すべての mysql ユーザー アカウントの現在の認証方法を確認します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

サンプル出力:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�o@>.@320vBX9Agb0kvpTpyiqIsh6XlD0UqNXLcl3KLzp46.Le. | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

ご覧のとおり、mysql root ユーザーは認証にauth_socket プラグインを使用します。

auth_socket プラグインを caching_sha2_password に変更するには、mysql プロンプトで次のコマンドを実行します。 VALIDATE PASSWORD プラグインを有効にしている場合は、現在のポリシー要件に基づいて強力なパスワードを使用していることを確認してください。強力な文字は、大文字、小文字、数字、特殊文字を含む少なくとも 8 文字で構成されます。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

上記のコマンドの 「Password123#@!」 を、選択した強力で一意のパスワードに置き換えます。

次のコマンドを使用して変更を更新します。

mysql> FLUSH PRIVILEGES;

次に、コマンドを使用して、現在の認証プラグインが変更されているかどうかを確認します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

サンプル出力:

良い!これで、myql root ユーザーはパスワードを使用して認証して mysql シェルにアクセスできるようになりました。

mysql プロンプトを終了します。

mysql> exit

注:

caching_sha2_password プラグインは強化された安全な暗号化を提供しますが、既存の MySQL インストールとの互換性の問題がいくつかあります。詳細についてはこちらのリンクをご覧ください。互換性の問題が発生した場合は、「mysql_native_password」 プラグインをデフォルトの認証プラグインとして設定する必要があります。

mysql_native_password プラグインに変更するには、mysql プロンプトで次のコマンドを実行します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

次のコマンドを使用して変更を更新します。

mysql> FLUSH PRIVILEGES;

次に、認証方法が変更されているか、コマンドを使用していないかを再度確認します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

サンプル出力:

次のコマンドを入力して、mysql プロンプトを終了します。

exit

3. Ubuntu に PHP をインストールする

PHP をインストールするには、次を実行します。

sudo apt-get install php-fpm php-mysql

PHP をインストールした後、php.ini ファイルに簡単な変更を加えて PHP を保護する必要があります。

これを行うには、好みのエディタを使用して php.ini ファイルを編集します。

sudo vi /etc/php/7.4/fpm/php.ini

次の行を見つけます。

;cgi.fix_pathinfo=1

コメントを解除し、値を 1 から 0 (ゼロ) に変更します。

cgi.fix_pathinfo=0

ファイルを保存して閉じます。次に、PHP-FPM サービスを再起動して、変更を有効にします。

sudo systemctl restart php7.4-fpm

次のコマンドを使用して、PHP-FPM サービスが実行されているかどうかを確認します。

sudo systemctl status php7.4-fpm

サンプル出力:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 PHP-FPM を使用するように Nginx を構成する

PHP-FPM を使用するように Nginx を構成する必要があります。

これを行うには、Nginx のデフォルトの vhost (サーバー ブロック) /etc/nginx/sites-available/default ファイルを編集します。

sudo vi /etc/nginx/sites-available/default

「サーバー」セクションを見つけて、以下に示すように Ubuntu サーバーの FQDN または IP アドレスを設定します。また、index.php 行を追加したかどうかを再確認してください。すべての変更は太字で示されています。

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

[...]

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 192.168.225.52;
[...]

ここ、

  • listen 80; -> ipv4 をリッスンします。
  • リッスン [::]:80 default_server ; -> ipv6 をリッスンします。
  • index.php -> PHP を使用する場合はこれを追加します。
  • root /var/www/html; -> Nginx ドキュメントのルート ディレクトリ。
  • server_name 192.168.225.52; -> Ubuntu サーバーの IP アドレス。

次に、少し下にスクロールして 「#location ~ \.php$」 セクションを見つけます。

以下に示すように、次の行のコメントを解除して変更します。

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;
}
deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

次のスクリーンショットを参照してください。変更部分には赤色でマーク/下線が付けられます。

ファイルを保存して終了します。

location ~ \.php$ ブロック内の fastcgi_pass ディレクティブを変更する場合は、細心の注意を払ってください。サーバー上の /var/run/php ディレクトリに実際に保存されているファイル名を正確に指定する必要があります。それを確認するには、次を実行します。

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

ご覧のとおり、 ファイルの名前はphp7.4-fpm.sock です。このディレクティブに正しい名前を指定していることを確認してください。

次のコマンドを使用して、Nginx 構成ファイルに構文エラーがないか確認します。

sudo nginx -t

サンプル出力:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

エラーが表示されない場合は、nginx サービスを再起動して変更を有効にします。

これを行うには、次を実行します。

sudo systemctl restart nginx

次に、ブラウザ経由で PHP 構成をテストするためのサンプル PHP ファイルを作成してみましょう。

これを行うには、Nginx ドキュメント ルート フォルダーに「info.php」というファイルを作成します。

sudo vi /var/www/html/info.php

次の行を追加します。

<?php
phpinfo();
?>

ファイルを保存して終了します。 nginx サービスを再起動して、変更を有効にします。

sudo systemctl restart nginx

次に、Web ブラウザを開いて http://IP アドレス/info.php に移動します。

PHPの詳細が表示されます。

おめでとう! PHPは動いています!!

3.2 PHP モジュールのインストール

PHP の機能を向上させるために、追加の PHP モジュールをインストールできます。

利用可能な PHP モジュールを一覧表示するには、次を実行します。

sudo apt-cache search php- | less

サンプル出力:

および の矢印を使用して、結果間を上下に移動します。終了するには、q と入力します。

特定の php モジュール (php-gd など) の詳細を確認するには、次のコマンドを実行します。

sudo apt-cache show php-gd

PHP モジュールをインストールするには、次のコマンドを実行します。

sudo apt-get install php-gd

すべてのモジュールをインストールするには (必須ではありません)、次を実行します。

sudo apt-get install php*

PHPモジュールをインストールした後は、必ずNginxサービスを再起動してください。

おめでとう! Ubuntu 20.04 LTS サーバーで LEMP スタックを正常にセットアップしました。新しい LEMP Web スタックで Web サイトと Web アプリケーションのデプロイを開始します。

次をお読みください:

  • Ubuntu 20.04 LTS に LEMP スタックを使用して phpMyAdmin をインストールする

関連記事