GNU/Linux >> Linux の 問題 >  >> Ubuntu

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

前のチュートリアルでは、 Ubuntu20.04LTSにLAMPスタックをインストールする方法について説明しました。 サーバ。このチュートリアルでは、Ubuntu 20.04 LTSサーバーエディションにNginx、MySQL、PHP(LEMPスタック)をインストールする方法を説明します。 LEMPはLの頭字語です。 inux、E n gine-x、 M ariaDB / M ySQL、 P HP / P erl / P ython。

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

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

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

始めましょう。

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

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

$ 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.1UFWファイアウォール経由でNginxWebサーバーを許可する

UFW Uの略です 複雑なF ire w allは、使いやすいように設計されたnetfilterファイアウォールを管理するためのプログラムです。 UFWは、すべてのUbuntuバージョンでデフォルトで使用できます。

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

まず、コマンドを使用して、どのアプリケーションがプロファイルをインストールしたかを確認しましょう:

$ sudo ufw app list

出力例:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

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

「NginxFull」を調べると プロファイルを見ると、ポート 80へのトラフィックが有効になっていることがわかります。 および443

$ 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

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

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

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

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

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!

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

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

デフォルトでは、MySQLrootユーザーは"auth_socket"を使用して認証するように設定されています MySQL5.7以降のUbuntuのプラグイン。セキュリティは強化されますが、phpMyAdminなどの外部プログラムを使用してデータベースサーバーにアクセスすると、事態が複雑になります。この問題を修正するには、認証方法をauth_socketから "caching_sha2_password"に変更する必要があります。 または"mysql_native_password"

MySQL 8.0バージョンの時点で、推奨されるデフォルトの認証プラグインは caching_sha2_password です。 。 cache_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"�[email protected]>[email protected] | 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)

ご覧のとおり、mysqlrootユーザーは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;

出力例:

良い!これで、myqlrootユーザーはパスワードを使用して認証してmysqlシェルにアクセスできます。

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

mysql> exit

注:

cache_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.1PHP-FPMを使用するようにNginxを構成する

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

これを行うには、Nginxのデフォルトの仮想ホスト(サーバーブロック)を編集します。 / 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;
[...]

ここで

  • 80を聞く; ->ipv4をリッスンします。
  • [::]:80default_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;
 }
}

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

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

fastcgi_pass を変更するときは、細心の注意を払ってください ロケーション〜\ .php $内のディレクティブ ブロック。 / 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-address/info.phpに移動します。 。

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

おめでとう! PHPは機能しています!!

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

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

使用可能なPHPモジュールを一覧表示するには、次のコマンドを実行します。

$ sudo apt-cache search php- | less

出力例:

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

php-gd など、特定のphpモジュールの詳細を検索するには 、実行:

$ sudo apt-cache show php-gd

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

$ sudo apt-get install php-gd

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

$ sudo apt-get install php*

phpモジュールをインストールした後、Nginxサービスを再起動することを忘れないでください。

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

次を読む:

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

Ubuntu
  1. Ubuntu18.04LTSにNginxを使用してPhorumをインストールする方法

  2. Ubuntu22.04LTSにLAMPスタックをインストールする方法

  3. Ubuntu 22.04 に LEMP スタック Nginx、MySQL、PHP をインストールする方法

  1. Ubuntu 18.04にPHPとMySQL(LEMPスタック)を使用してNginxをインストールする方法

  2. Ubuntu 20.04 LTSにPHPとMySQL(LEMPスタック)を使用してNginxをインストールする方法

  3. Ubuntu14.10上のNginx1.7.9+ PHP5-FPM + MySQL(LEMP)

  1. Linux、Nginx、MySQL、PHP(LEMPスタック)をUbuntu18.04にインストールする方法

  2. Ubuntu 18.04 LTSにApache、MySQL、PHP(LAMP)スタックをインストールします

  3. Ubuntu 20.04 LTSにApache、MySQL、PHP(LAMPスタック)をインストールします