序章

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

このガイドは、Ubuntu18.04サーバーにLEMPスタックをインストールする方法を示しています。 Ubuntuオペレーティングシステムが最初の要件を処理します。 残りのコンポーネントを稼働させる方法について説明します。

前提条件

このチュートリアルを完了する前に、サーバーにroot以外の通常のユーザーアカウントが必要です。 sudo 特権。 Ubuntu 18.04 初期サーバーセットアップガイドに記入して、このアカウントをセットアップしてください。

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

ステップ1-NginxWebサーバーをインストールする

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

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

初めて使うので apt このセッションでは、サーバーのパッケージインデックスを更新することから始めます。

  1. sudo apt update

次に、サーバーをインストールします。

  1. sudo apt install nginx

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

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

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

次のように入力して、これを有効にします。

  1. sudo ufw allow 'Nginx HTTP'

ステータスを確認することで、変更を確認できます。

  1. sudo ufw status

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

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

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

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

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

これにより、いくつかのIPアドレスが出力されます。 あなたはあなたのウェブブラウザでそれらのそれぞれを試すことができます。

別の方法として、インターネット上の他の場所から見たときに、どのIPアドレスにアクセスできるかを確認できます。

  1. curl -4 icanhazip.com

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

http://server_domain_or_IP

「Welcometonginx」というWebページを受け取った場合は、Nginxが正常にインストールされています。

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

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

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

  1. sudo apt install mysql-server

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

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

  1. sudo mysql_secure_installation

このスクリプトは、を構成するかどうかを尋ねます VALIDATE PASSWORD PLUGIN.

警告:この機能を有効にすると、判断が必要になります。 有効にすると、指定された基準に一致しないパスワードがMySQLによって拒否され、エラーが発生します。 これは、phpMyAdmin用のUbuntuパッケージなど、MySQLユーザー資格情報を自動的に構成するソフトウェアと組み合わせて弱いパスワードを使用する場合に問題を引き起こします。 検証を無効のままにしておくのは安全ですが、データベースの資格情報には常に強力で一意のパスワードを使用する必要があります。

答え 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: 1

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

Please set the password for root here.

New password:

Re-enter new password:

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

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

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

  1. sudo mysql

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

  1. 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 指図。 必ず変更してください password 選択した強力なパスワードに:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

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

  1. FLUSH PRIVILEGES;

各ユーザーが採用している認証方法をもう一度確認して、rootauth_socket プラグイン:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | 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)

この出力例は、 rootMySQLユーザーがパスワードを使用して認証するようになったことを示しています。 自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

  1. exit

root MySQLユーザーをパスワードで認証するように構成すると、MySQLにアクセスできなくなります。 sudo mysql 以前に使用したコマンド。 代わりに、以下を実行する必要があります。

  1. mysql -u root -p

設定したパスワードを入力すると、MySQLプロンプトが表示されます。

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

ステップ3– PHPをインストールし、PHPプロセッサを使用するようにNginxを構成する

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

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

:クラウドプロバイダーによっては、Ubuntuを追加する必要がある場合があります universe リポジトリ。インストールする前に、Ubuntuコミュニティによって維持されている無料のオープンソースソフトウェアが含まれています。 php-fpm パッケージ。 これを行うには、次のコマンドを入力します。

  1. sudo add-apt-repository universe

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

  1. sudo apt install php-fpm php-mysql

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

これはサーバーブロックレベルで行われます(サーバーブロックはApacheの仮想ホストに似ています)。 これを行うには、内の好みのテキストエディタを使用して新しいサーバーブロック構成ファイルを作成します。 /etc/nginx/sites-available/ ディレクトリ。 この例では、 nano 新しいサーバーブロック構成ファイルには、 your_domain、それであなたはそれをあなた自身の情報で置き換えることができます:

  1. sudo nano /etc/nginx/sites-available/your_domain

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

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

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

        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がリッスンするポートを定義します。 この場合、ポートでリッスンします 80、HTTPのデフォルトポート。
  • root —Webサイトによって提供されるファイルが保存されるドキュメントルートを定義します。
  • index —Nginxを構成して次の名前のサービングファイルを優先します index.php インデックスファイルが利用可能かどうかが要求されたとき。
  • server_name —サーバーへの特定の要求に使用するサーバーブロックを定義します。 このディレクティブをサーバーのドメイン名またはパブリックIPアドレスにポイントします。
  • location / —最初のロケーションブロックには、 try_files URI要求に一致するファイルの存在をチェックするディレクティブ。 Nginxが適切なファイルを見つけることができない場合、404エラーを返します。
  • location ~ \.php$ —このロケーションブロックは、Nginxをポイントすることで実際のPHP処理を処理します fastcgi-php.conf 構成ファイルと php7.2-fpm.sock どのソケットが関連付けられているかを宣言するファイル php-fpm.
  • location ~ /\.ht —最後のロケーションブロックは .htaccess Nginxが処理しないファイル。 追加することにより deny all ディレクティブ(ある場合) .htaccess ファイルはたまたまドキュメントルートに到達し、訪問者には提供されません。

このコンテンツを追加したら、ファイルを保存して閉じます。 使用している場合 nano、を押すことでこれを行うことができます CTRL + X それから YENTER. 新しいサーバーブロック構成ファイルからシンボリックリンクを作成して、新しいサーバーブロックを有効にします( /etc/nginx/sites-available/ ディレクトリ)に /etc/nginx/sites-enabled/ ディレクトリ:

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

次に、デフォルトの構成ファイルのリンクを解除します。 /sites-enabled/ ディレクトリ:

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

:デフォルト構成を復元する必要がある場合は、次のようなコマンドを使用してシンボリックリンクを再作成することで復元できます。

  1. sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

新しい構成ファイルで構文エラーをテストします。

  1. sudo nginx -t

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

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

  1. sudo systemctl reload nginx

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

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

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

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

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

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

/var/www/html/info.php
<?php
phpinfo();

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

これで、サーバーのドメイン名またはパブリックIPアドレスにアクセスしてから、Webブラウザーでこのページにアクセスできます。 /info.php:

http://your_server_domain_or_IP/info.php

ブラウザは、サーバーに関する情報を含むPHPによって生成された次のようなWebページをロードします。

ページが説明どおりであれば、Nginxを使用してPHP処理を正常に設定できています。

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

今のところ、ファイルを削除します。

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

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

結論

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

ここから実行できる次のステップがいくつかあります。 たとえば、サーバーへの接続が保護されていることを確認する必要があります。 この目的のために、Let’sEncryptを使用してNginxインストールを保護することができます。 このガイドに従うことで、サーバー用の無料のTLS / SSL証明書を取得し、HTTPS経由でコンテンツを提供できるようになります。