前書き

LEMPソフトウェアスタックは、動的なWebページおよびWebアプリケーションを提供するために使用できるソフトウェアのグループです。 これは、Nginx(「 E ngine-X」と発音)Webサーバーを備えた L inuxオペレーティングシステムを表す頭字語です。 バックエンドデータは MySQLデータベースに保存され、動的処理は P ** HPによって処理されます。

このガイドは、Ubuntu 18.04サーバーにLEMPスタックをインストールする方法を示しています。 Ubuntuオペレーティングシステムは、最初の要件を処理します。 残りのコンポーネントを起動して実行する方法を説明します。

前提条件

このチュートリアルを完了する前に、サーバーに「+ sudo +」権限を持つ通常の非ルートユーザーアカウントが必要です。 Ubuntu 18.04の初期サーバーセットアップガイドを完了することにより、このアカウントをセットアップします。

ユーザーが利用可能になったら、このガイドで説明されている手順を開始できます。

ステップ1 – Nginx Webサーバーのインストール

サイト訪問者にWebページを表示するために、最新の効率的なWebサーバーであるNginxを採用します。

この手順で使用されるソフトウェアはすべて、Ubuntuのデフォルトパッケージリポジトリから取得されます。 これは、必要なインストールを完了するために、 `+ apt +`パッケージ管理スイートを使用できることを意味します。

このセッションで初めて「+ apt +」を使用するので、サーバーのパッケージインデックスを更新することから始めます。 その後、サーバーをインストールします。

sudo apt update
sudo apt install nginx

Ubuntu 18.04では、Nginxはインストール時に実行を開始するように設定されています。

初期セットアップガイドで説明されているように、「+ ufw 」ファイアウォールを実行している場合は、Nginxへの接続を許可する必要があります。 Nginxはインストール時に自身を ` ufw +`に登録するため、手順はかなり簡単です。

必要なトラフィックを引き続き許可する最も制限の厳しいプロファイルを有効にすることをお勧めします。 このガイドではサーバーのSSLを設定していないため、ポート「80」のトラフィックのみを許可する必要があります。

次を入力してこれを有効にします。

sudo ufw allow 'Nginx HTTP'

次のコマンドを実行して、変更を確認できます。

sudo ufw status

このコマンドの出力は、HTTPトラフィックが許可されていることを示します。

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

新しいファイアウォールルールを追加したら、ウェブブラウザでサーバーのドメイン名またはパブリックIPアドレスにアクセスして、サーバーが稼働しているかどうかをテストできます。

サーバーを指すドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、次のコマンドを実行して見つけることができます。

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

これにより、いくつかのIPアドレスが出力されます。 Webブラウザーでそれぞれを順番に試すことができます。

別の方法として、インターネット上の他の場所から表示されるアクセス可能なIPアドレスを確認できます。

curl -4 icanhazip.com

Webブラウザで受け取ったアドレスを入力すると、Nginxのデフォルトのランディングページに移動します。

http://

image:https://assets.digitalocean.com/articles/lemp_ubuntu_1604/nginx_default.png [Nginxデフォルトページ]

上記のページが表示されたら、Nginxが正常にインストールされています。

ステップ2 – MySQLをインストールしてサイトデータを管理する

Webサーバーができたので、MySQL(データベース管理システム)をインストールして、サイトのデータを保存および管理する必要があります。

次を入力してMySQLをインストールします。

sudo apt install mysql-server

MySQLデータベースソフトウェアがインストールされましたが、その構成はまだ完了していません。

インストールを保護するために、MySQLには、いくつかの安全でないデフォルトを変更するかどうかを尋ねるスクリプトが付属しています。 次のように入力して、スクリプトを開始します。

sudo mysql_secure_installation

このスクリプトは、 `+ VALIDATE PASSWORD PLUGIN`を設定するかどうかを尋ねます。

はいの場合は「+ Y +」、その他の場合は有効にせずに続行します。

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:

検証を有効にした場合、スクリプトはパスワード検証のレベルを選択するように求めます。 * 2 *(最強レベル)を入力すると、数字、大文字、小文字、特殊文字を含まないパスワード、または一般的な辞書の単語に基づくパスワードを設定しようとするとエラーが発生することに注意してください。

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:

次に、ルートパスワードを送信して確認するよう求められます。

Please set the password for root here.

New password:

Re-enter new password:

残りの質問については、各プロンプトで「+ Y 」を押して「 ENTER」キーを押す必要があります。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールがロードされ、MySQLが行った変更がすぐに反映されます。

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、* root * MySQLユーザーはパスワードではなくデフォルトで `+ auth_socket +`プラグインを使用して認証するように設定されていることに注意してください。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)がユーザーにアクセスできるようにする必要がある場合にも事態が複雑になります。

MySQLにアクセスするために `+ auth_socket `プラグインを使用している場合、ワークフローに適合する場合は、手順3に進むことができます。 ただし、MySQLに* root *として接続するときにパスワードを使用する場合、その認証方法を ` auth_socket `から ` mysql_native_password +`に切り替える必要があります。 これを行うには、ターミナルからMySQLプロンプトを開きます。

sudo mysql

次に、次のコマンドを使用して、各MySQLユーザーアカウントが使用する認証方法を確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この例では、* root *ユーザーが実際に `+ auth_socket `プラグインを使用して認証していることがわかります。 パスワードで認証するように* root *アカウントを設定するには、次の ` ALTER USER`コマンドを実行します。 必ず `++`を選択した強力なパスワードに変更してください:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

次に、 `+ FLUSH PRIVILEGES +`を実行して、サーバーに許可テーブルをリロードし、新しい変更を有効にするように指示します。

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法を再度チェックして、* root *が `+ auth_socket +`プラグインを使用して認証を行っていないことを確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F |  | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この出力例では、* root * MySQLユーザーがパスワードを使用して認証されていることがわかります。 自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

exit

この時点で、データベースシステムがセットアップされ、PHPのインストールに進むことができます。

ステップ3 – PHPのインストールとPHPプロセッサを使用するためのNginxの構成

ページを提供するためにNginxがインストールされ、データを保存および管理するためにMySQLがインストールされました。 ただし、動的コンテンツを生成できるものはまだありません。 これがPHPの出番です。

Nginxには他のWebサーバーのようなネイティブPHP処理が含まれていないため、「fastCGIプロセスマネージャー」を表す `+ php-fpm +`をインストールする必要があります。 Nginxに、処理のためにこのソフトウェアにPHPリクエストを渡すように指示します。

PHPがデータベースバックエンドと通信できるようにする追加のヘルパーパッケージである + php-mysql`とともに、 + php-fpm`モジュールをインストールします。 インストールにより、必要なPHPコアファイルが取り込まれます。 次のように入力してこれを行います。

sudo apt install php-fpm php-mysql

これで、必要なLEMPスタックコンポーネントがすべてインストールされましたが、動的コンテンツにPHPプロセッサを使用するようにNginxに指示するには、いくつかの構成変更を行う必要があります。

これはサーバーブロックレベルで行われます(サーバーブロックはApacheの仮想ホストに似ています)。 これを行うには、 `+ / etc / nginx / sites-available / `ディレクトリ内で新しいサーバーブロック設定ファイルを開きます。 この例では、新しいサーバーブロック構成ファイルの名前は「 example.com +」ですが、好きな名前を付けることができます。

sudo nano /etc/nginx/sites-available/

デフォルトのファイルを編集するのではなく、新しいサーバーブロックの設定ファイルを編集することにより、必要に応じてデフォルトの設定を簡単に復元できます。

デフォルトのサーバーブロック構成ファイルから取得してわずかに変更した以下のコンテンツを、新しいサーバーブロック構成ファイルに追加します。

/etc/nginx/sites-available/example.com

server {
       listen 80;
       root /var/www/html;
       index index.php index.html index.htm index.nginx-debian.html;
       server_name ;

       location / {
               try_files $uri $uri/ =404;
       }

       location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       }

       location ~ /\.ht {
               deny all;
       }
}

これらの各ディレクティブとロケーションブロックの機能は次のとおりです。

  • + listen +-Nginxがリッスンするポートを定義します。 この場合、HTTPのデフォルトポートであるポート「80」でリッスンします。

  • + root +-Webサイトが提供するファイルが保存されるドキュメントルートを定義します。

  • + index-Nginxを設定して、インデックスファイルが利用可能な場合、インデックスファイルが要求されたときに、` + index.php`という名前のファイルの提供を優先します。

  • + server_name +-サーバーへの特定のリクエストに使用するサーバーブロックを定義します。 このディレクティブはサーバーのドメイン名またはパブリックIPアドレスを指します。

  • + location / +-最初のロケーションブロックには、 `+ try_files +`ディレクティブが含まれており、URIリクエストに一致するファイルの存在をチェックします。 Nginxが適切なファイルを見つけられない場合、404エラーを返します。

  • + location〜\ .php $ +-このロケーションブロックは、Nginxが `+ fastcgi-php.conf `設定ファイルと、宣言する ` php7.2-fpm.sock `ファイルを指すことにより、実際のP​​HP処理を処理します。 ` php-fpm +`に関連付けられているソケット。

  • + location〜/ \。ht +-最後のロケーションブロックは、Nginxが処理しない `+ .htaccess `ファイルを処理します。 ` deny all `ディレクティブを追加することで、 ` .htaccess +`ファイルがドキュメントルートにたどり着いた場合、それらは訪問者には提供されません。

このコンテンツを追加したら、ファイルを保存して閉じます。 新しいサーバーブロック構成ファイル( `+ / etc / nginx / sites-available / `ディレクトリ内)から ` / etc / nginx / sites-enabled / +`へのシンボリックリンクを作成して、新しいサーバーブロックを有効にします。ディレクトリ:

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

次に、 `+ / sites-enabled / +`ディレクトリからデフォルトの設定ファイルのリンクを解除します:

sudo unlink /etc/nginx/sites-enabled/default

次のように入力して、新しい構成ファイルの構文エラーをテストします。

sudo nginx -t

エラーが報告された場合は、戻ってファイルを再確認してから続行してください。

準備ができたら、Nginxをリロードして必要な変更を加えます。

sudo systemctl reload nginx

これで、LEMPスタックのインストールと構成が完了しました。 ただし、すべてのコンポーネントが相互に通信できることを確認するのが賢明です。

ステップ4 –設定をテストするためのPHPファイルの作成

これでLEMPスタックが完全にセットアップされました。 これをテストして、Nginxが `+ .php +`ファイルをPHPプロセッサに正しく渡すことができることを検証できます。

これを行うには、テキストエディターを使用して、ドキュメントルートに `+ info.php +`というテストPHPファイルを作成します。

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

新しいファイルに次の行を入力します。 これは、サーバーに関する情報を返す有効なPHPコードです。

/var/www/html/info.php

<?php
phpinfo();

終了したら、ファイルを保存して閉じます。

これで、サーバーのドメイン名またはパブリックIPアドレスに続けて `+ / info.php +`を表示することで、Webブラウザーでこのページにアクセスできます。

http:///info.php

サーバーに関する情報を含むPHPによって生成されたWebページが表示されます。

image:https://assets.digitalocean.com/lemp_ubuntu_1804/php_info_1804.png [PHPページ情報]

このようなページが表示された場合、NginxでPHP処理を正常に設定しました。

Nginxがページを正しく表示することを確認したら、作成したファイルを削除することをお勧めします。実際には、許可されていないユーザーに設定に関するヒントを与え、侵入を試みるのに役立ちます。 後で必要な場合は、いつでもこのファイルを再生成できます。

今のところ、次のように入力してファイルを削除します。

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

これで、Ubuntu 18.04サーバーに完全に構​​成され機能するLEMPスタックができました。

結論

LEMPスタックは、サーバーからほぼすべてのWebサイトまたはアプリケーションをセットアップして提供できる強力なプラットフォームです。

ここから実行できる次のステップがいくつかあります。 たとえば、サーバーへの接続が保護されていることを確認する必要があります。 この目的のために、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04 [Lgin’s暗号化]。 このガイドに従うことにより、サーバーの無料のTLS / SSL証明書を取得し、HTTPSを介してコンテンツを提供できるようになります。