前書き

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

このソフトウェアスタックには通常、データベース管理システムとして* MySQL *が含まれていますが、Debianを含む一部のLinuxディストリビューションでは、MySQLのドロップイン置換としてhttps://mariadb.org [MariaDB]を使用しています。

このガイドでは、データベース管理システムとしてMariaDBを使用して、Debian 10サーバーにLEMPスタックをインストールします。

前提条件

このガイドを完了するには、Debian 10サーバーにアクセスする必要があります。 このサーバーには、「+ sudo 」権限で設定された通常のユーザーと、「 ufw +」で有効にされたファイアウォールが必要です。 これを設定するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10 [Debian 10での初期サーバー設定]ガイドに従ってください。

手順1-Nginx Webサーバーのインストール

Webページをサイト訪問者に提供するために、全体的なパフォーマンスと安定性で有名な人気のあるWebサーバーであるhttps://www.nginx.com/[Nginx]を採用します。

この手順で使用するすべてのソフトウェアは、Debianのデフォルトパッケージリポジトリから直接提供されます。 これは、 `+ apt +`パッケージ管理スイートを使用してインストールを完了することができることを意味します。

このセッションで初めて `+ apt +`を使用するので、ローカルパッケージインデックスを更新することから始めてください。 その後、サーバーをインストールできます。

sudo apt update
sudo apt install nginx

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

`+ ufw `ファイアウォールを実行している場合、Nginxへの接続を許可する必要があります。 必要なトラフィックを許可する最も制限の厳しいプロファイルを有効にする必要があります。 サーバーにSSLをまだ設定していないので、今のところはポート ` 80 +`でHTTPトラフィックのみを許可する必要があります。

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

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ブラウザーでそれぞれを順番に試すことができます。

Webブラウザーで受信したアドレスの1つを入力します。 Nginxのデフォルトのランディングページに移動します。

http://

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

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

ステップ2-MariaDBのインストール

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

Debian 10では、従来MySQLサーバーのインストールに使用されていたメタパッケージ `+ mysql-server `が ` default-mysql-server +`に置き換えられました。 このメタパッケージは、Oracleによる元のMySQLサーバーのコミュニティフォークであるhttps://mariadb.org/[MariaDB]を参照し、現在、Debianベースのパッケージマネージャーリポジトリで利用可能なデフォルトのMySQL互換データベースサーバーです。

ただし、長期的な互換性のために、メタパッケージを使用する代わりに、プログラムの実際のパッケージである「+ mariadb-server +」を使用してMariaDBをインストールすることをお勧めします。

このソフトウェアをインストールするには、次を実行します。

sudo apt install mariadb-server

インストールが完了したら、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。 このスクリプトは、いくつかの安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。 次を実行して、インタラクティブスクリプトを開始します。

sudo mysql_secure_installation

このスクリプトは、MariaDBセットアップにいくつかの変更を加えることができる一連のプロンプトを表示します。 最初のプロンプトでは、現在の*データベースルート*パスワードの入力を求められます。 これは* system root *と混同しないでください。 *データベースルート*ユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 MariaDBをインストールしたばかりで、まだ構成を変更していないため、このパスワードは空白になるため、プロンプトで「+ ENTER +」を押すだけです。

次のプロンプトでは、データベースルート*パスワードを設定するかどうかを尋ねられます。 MariaDBは、通常はパスワードを使用するよりも安全な特別な認証方法を root *ユーザーに使用するため、ここで設定する必要はありません。 「+ N 」と入力し、「 ENTER +」を押します。

そこから、「+ Y 」を押してから「 ENTER +」を押して、後続のすべての質問のデフォルトを受け入れることができます。 これにより、匿名ユーザーとテストデータベースが削除され、リモート* root *ログインが無効になり、MariaDBが行った変更がすぐに反映されるようにこれらの新しいルールが読み込まれます。 +完了したら、次を入力してMariaDBコンソールにログインします。

sudo mariadb

これは、管理データベースユーザー* root *としてMariaDBサーバーに接続します。これは、このコマンドの実行時に `+ sudo +`を使用することで推測されます。 次のような出力が表示されます。

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
  • root ユーザーとして接続するためにパスワードを提供する必要がないことに注意してください。 これは、管理MariaDBユーザーのデフォルトの認証方法が「+ password 」ではなく「 unix_socket +」であるため機能します。 これは、最初はセキュリティ上の懸念のように見えますが、 root * MariaDBユーザーとしてログインできるユーザーは、コンソールまたは実行中のアプリケーションを介して接続するsudo権限を持つシステムユーザーのみであるため、データベースサーバーのセキュリティが向上します同じ特権で。 実際には、管理データベースの* root *ユーザーを使用してPHPアプリケーションから接続することはできません。

セキュリティを強化するには、特にサーバーで複数のデータベースをホストする予定がある場合は、すべてのデータベースに拡張権限の少ない専用ユーザーアカウントを設定するのが最適です。 このような設定を示すために、* example_database という名前のデータベースと example_user *という名前のユーザーを作成しますが、これらの名前を別の値に置き換えることができます。 +新しいデータベースを作成するには、MariaDBコンソールから次のコマンドを実行します。

CREATE DATABASE ;

これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限を付与できます。 次のコマンドは、このユーザーのパスワードを「++」として定義しますが、この値を自分で選択した安全なパスワードに置き換える必要があります。

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;

これにより、* example_user ユーザーに example_database *データベースに対する完全な権限が与えられ、このユーザーはサーバー上で他のデータベースを作成または変更できなくなります。

特権をフラッシュして、それらが保存され、現在のセッションで使用できることを確認します。

FLUSH PRIVILEGES;

これに続いて、MariaDBシェルを終了します。

exit

新しいユーザーが適切な権限を持っているかどうかをテストするには、MariaDBコンソールに再度ログインします。今回はカスタムユーザー資格情報を使用します。

mariadb -u  -p

このコマンドの「+ -p +」フラグに注意してください。これは、* example_user ユーザーを作成するときに使用されるパスワードの入力を求めます。 MariaDBコンソールにログインした後、 example_database *データベースにアクセスできることを確認します。

SHOW DATABASES;

これにより、次のような出力が得られます。

Output+--------------------+
| Database           |
+--------------------+
|    |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

MariaDBシェルを終了するには、次を入力します。

exit

この時点で、データベースシステムがセットアップされ、LEMPスタックの最終コンポーネントであるPHPのインストールに進むことができます。

ステップ3-処理のためのPHPのインストール

Nginxをインストールしてコンテンツを提供し、MySQLをインストールしてデータを保存および管理します。 これで、PHPをインストールしてコードを処理し、Webサーバーの動的コンテンツを生成できます。

Apacheは各リクエストにPHPインタープリターを埋め込みますが、NginxはPHP処理を処理し、PHPインタープリター自体とWebサーバー間の「ブリッジ」として機能する外部プログラムを必要とします。 これにより、ほとんどのPHPベースのWebサイトで全体的なパフォーマンスが向上しますが、追加の構成が必要です。 「PHP fastCGIプロセスマネージャー」の略である「+ php-fpm 」をインストールし、処理のためにこのソフトウェアにPHPリクエストを渡すようにNginxに指示する必要があります。 さらに、 ` php-mysql`と、PHPがMySQLベースのデータベースと通信できるようにするPHPモジュールが必要です。 コアPHPパッケージは、依存関係として自動的にインストールされます。

+ php-fpm`および + php-mysql`パッケージをインストールするには、次を実行します:

sudo apt install php-fpm php-mysql

これで、PHPコンポーネントがインストールされました。 次に、それらを使用するようにNginxを構成します。

手順4-PHPプロセッサを使用するためのNginxの構成

Nginx Webサーバーを使用する場合、server blocks(Apacheの仮想ホストに類似)を使用して、構成の詳細をカプセル化し、単一のサーバーで複数のドメインをホストできます。 このガイドでは、ドメイン名の例として* your_domain *を使用します。 DigitalOceanを使用したドメイン名の設定の詳細については、https://www.digitalocean.com/docs/networking/dns/ [DigitalOcean DNSの紹介]をご覧ください。

Debian 10では、Nginxにはデフォルトで1つのサーバーブロックが有効になっており、 `+ / var / www / html `のディレクトリからドキュメントを提供するように設定されています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は管理が難しくなる可能性があります。 ` / var / www / html `を変更する代わりに、* your_domain * Webサイトの ` / var / www `内にディレクトリ構造を作成し、デフォルトのディレクトリとして ` / var / www / html +`を残します。クライアントリクエストが他のサイトと一致しない場合に提供されます。

次のように* your_domain *のルートWebディレクトリを作成します。

sudo mkdir /var/www/

次に、現在のシステムユーザーを参照する$ USER環境変数を使用して、ディレクトリの所有権を割り当てます。

sudo chown -R $USER:$USER /var/www/

次に、好みのコマンドラインエディタを使用して、Nginxの `+ sites-available `ディレクトリで新しい設定ファイルを開きます。 ここでは、 ` nano +`を使用します。

sudo nano /etc/nginx/sites-available/

これにより、新しい空のファイルが作成されます。 次のベアボーン構成に貼り付けます。

/ etc / nginx / sites-available / your_domain

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

   root /var/www/;
   index index.php index.html index.htm;

   server_name ;

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

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

これは、ポート「80」でリッスンし、作成したWebルートからファイルを提供する基本的な設定です。 `+ server_name `の後に指定されたホストまたはIPアドレスへのリクエストにのみ応答し、 ` .php `で終わるファイルはすべて、Nginxが結果をユーザーに送信する前に ` php-fpm +`によって処理されます。

編集が完了したら、ファイルを保存して閉じます。 + nano +`を使用してファイルを作成した場合は、 `+ CTRL + + `+ X `を入力してから、 ` y `と ` ENTER +`を入力して確認します。

Nginxの `+ sites-enabled +`ディレクトリから設定ファイルにリンクして設定を有効にします:

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

これにより、Nginxは次回リロードされたときに設定を使用するようになります。 次のように入力して、構文エラーの構成をテストできます。

sudo nginx -t

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

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

sudo systemctl reload nginx

次に、新しいWebルートディレクトリにファイルを作成して、PHPの処理をテストします。

手順5-設定をテストするためのPHPファイルの作成

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

これを行うには、ドキュメントルートにテスト用のPHPファイルを作成します。 テキストエディターのドキュメントルート内で、「+ info.php +」という新しいファイルを開きます。

nano /var/www//info.php

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

/var/www/your_domain/info.php

<?php
phpinfo();

終了したら、 + CTRL + + `+ X `を入力してファイルを保存して閉じ、確認のために ` y `と ` ENTER +`を入力します。

Nginx設定ファイルで設定したドメイン名またはパブリックIPアドレスにアクセスし、その後に `+ / info.php +`を続けることで、Webブラウザーでこのページにアクセスできます。

http:///info.php

サーバーに関する詳細情報を含むWebページが表示されます。

image:https://assets.digitalocean.com/articles/lemp_debian10/phpinfo.png [PHPページ情報]

そのページでPHPサーバーに関する関連情報を確認した後、PHP環境とDebianサーバーに関する機密情報が含まれているため、作成したファイルを削除することをお勧めします。 `+ rm +`を使用してそのファイルを削除できます。

rm /var/www//info.php

後で必要な場合は、いつでもこのファイルを再生成できます。 次に、PHP側からデータベース接続をテストします。

ステップ6-PHPからのデータベース接続のテスト(オプション)

PHPがMariaDBに接続してデータベースクエリを実行できるかどうかをテストする場合は、ダミーデータを使用してテストテーブルを作成し、PHPスクリプトからその内容をクエリします。

まず、このガイドのlink:#step-2-%E2%80%94-installing-mariadb [ステップ2]で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。

mariadb -u  -p
  • todo_list *という名前のテーブルを作成します。 MariaDBコンソールから、次のステートメントを実行します。

CREATE TABLE . (
   item_id INT AUTO_INCREMENT,
   content VARCHAR(255),
   PRIMARY KEY(item_id)
);

次に、テストテーブルに数行のコンテンツを挿入します。 異なる値を使用して、次のコマンドを数回繰り返すことができます。

INSERT INTO . (content) VALUES ("");

データがテーブルに正常に保存されたことを確認するには、次を実行します。

SELECT * FROM .;

次の出力が表示されます。

Output+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

テストテーブルに有効なデータがあることを確認したら、MariaDBコンソールを終了できます。

exit

これで、MariaDBに接続してコンテンツを照会するPHPスクリプトを作成できます。 任意のエディターを使用して、カスタムWebルートディレクトリに新しいPHPファイルを作成します。 そのために「+ nano +」を使用します。

nano /var/www//

PHPスクリプトに次のコンテンツを追加します。

<?php
$user = "";
$password = "";
$database = "";
$table = "";

try {
 $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
 echo "<h2>TODO</h2><ol>";
 foreach($db->query("SELECT content FROM $table") as $row) {
   echo "<li>" . $row['content'] . "</li>";
 }
 echo "</ol>";
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}

編集が完了したら、ファイルを保存して閉じます。

これで、Nginx構成ファイルで設定したドメイン名またはパブリックIPアドレスにアクセスし、続いて `+ / todo_list.php +`を使用して、Webブラウザーでこのページにアクセスできます。

http:///todo_list.php

次のようなページが表示され、テストテーブルに挿入したコンテンツが表示されます。

image:https://assets.digitalocean.com/articles/lemp_debian10/todo_list.png [PHP todoリストの例]

これは、PHP環境がMariaDBサーバーに接続して対話する準備ができていることを意味します。

結論

このガイドでは、NginxをWebサーバーとして使用して、訪問者にPHP Webサイトとアプリケーションを提供するための柔軟な基盤を構築しました。 `+ php-fpm +`を介してPHPリクエストを処理するようにNginxを設定し、Webサイトのデータを保存するMariaDBデータベースも設定しました。

現在の設定をさらに改善するには、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-debian-10 [install Composer]で依存関係とパッケージ管理を行いますPHP、およびhttps://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-10[OpenSSL証明書をインストール]をWebサイトに使用することもできます。 Let’s Encryptを使用します。