序章

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

LEMPスタックのデータベース層は通常MySQLデータベースサーバーですが、CentOS 8がリリースされる前は、デフォルトのCentOSリポジトリからMySQLを利用できませんでした。 このため、MySQLのコミュニティフォークである MariaDB は、CentOSマシンのLEMPスタックのデフォルトのデータベースシステムとして、MySQLの代替として広く受け入れられるようになりました。 MariaDBは、元のMySQLサーバーのドロップイン代替として機能します。つまり、実際には、アプリケーションで構成やコードを変更することなく、MariaDBに切り替えることができます。

このガイドでは、CentOS8サーバーにLEMPスタックをインストールします。 MySQLはCentOS8のデフォルトのリポジトリから利用できますが、このガイドでは、データベース管理システムとしてMariaDBを使用してLEMPスタックを設定するプロセスについて説明します。

前提条件

このガイドに従うには、sudo権限を持つ非rootユーザーとしてCentOS 8サーバーにアクセスし、サーバーにアクティブなファイアウォールをインストールする必要があります。 これを設定するには、CentOS8初期サーバー設定ガイドに従ってください。

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

サイト訪問者にWebページを表示するために、高性能WebサーバーであるNginxを採用します。 を使用します dnf このソフトウェアをインストールするためのCentOS8の新しいデフォルトのパッケージマネージャーであるパッケージマネージャー。

をインストールします nginx パッケージ:

  1. sudo dnf install nginx

プロンプトが表示されたら、次のように入力します y nginxをインストールすることを確認します。

インストールが完了したら、次のコマンドを実行してサーバーを有効にして起動します。

  1. sudo systemctl start nginx

有効にした場合 firewalld サーバーの初期設定ガイドに従ってファイアウォールを使用するには、Nginxへの接続を許可する必要があります。 次のコマンドは、ポートで実行されるHTTP接続を永続的に有効にします 80 デフォルト:

  1. sudo firewall-cmd --permanent --add-service=http

変更が適用されたことを確認するには、次のコマンドを実行します。

  1. sudo firewall-cmd --permanent --list-all

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

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

変更を有効にするには、ファイアウォール構成を再ロードする必要があります。

  1. sudo firewall-cmd --reload

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

:DNSホスティングプロバイダーとしてDigitalOceanを使用している場合は、製品ドキュメントで、新しいドメイン名を設定してサーバーにポイントする方法の詳細な手順を確認できます。

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

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

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

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

  1. curl -4 icanhazip.com

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

このページが表示されている場合は、Webサーバーが正しくインストールされています。

ステップ2—MariaDBをインストールする

Webサーバーが稼働しているので、サイトのデータを保存および管理できるようにデータベースシステムをインストールする必要があります。 オラクルが元のMySQLサーバーのコミュニティで開発したフォークであるMariaDBをインストールします。

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

  1. sudo dnf install mariadb-server

インストールが完了したら、次のコマンドでMariaDBサーバーを有効にして起動できます。

  1. sudo systemctl start mariadb

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

  1. sudo mysql_secure_installation

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

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

そこから、を押すことができます Y その後 ENTER 後続のすべての質問のデフォルトを受け入れます。 これにより、匿名ユーザーとテストデータベースが削除され、リモート root ログインが無効になり、これらの新しいルールが読み込まれるため、サーバーは行った変更をすぐに尊重します。

終了したら、次のように入力してMariaDBコンソールにログインします。

  1. sudo mysql

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

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server 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管理ユーザーのデフォルトの認証方法が unix_socket それ以外の password. これは最初はセキュリティ上の懸念のように見えるかもしれませんが、 root MariaDBユーザーとしてログインできるユーザーは、コンソールまたは同じ権限で実行されているアプリケーションを介して。 つまり、実際には、管理データベースrootユーザーを使用してPHPアプリケーションから接続することはできません。

セキュリティを強化するには、特にサーバーで複数のデータベースをホストする予定の場合は、データベースごとに拡張性の低い特権を持つ専用のユーザーアカウントを設定することをお勧めします。 このような設定を示すために、example_databaseという名前のデータベースとexample_userという名前のユーザーを作成しますが、これらの名前を別の値に置き換えることができます。

新しいデータベースを作成するには、MariaDBコンソールから次のコマンドを実行します。

  1. CREATE DATABASE example_database;

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

  1. GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

これにより、example_userユーザーに example\_database このユーザーがサーバー上で他のデータベースを作成または変更できないようにします。

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

  1. FLUSH PRIVILEGES;

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

  1. exit

今回はカスタムユーザークレデンシャルを使用して、MariaDBコンソールに再度ログインすることにより、新しいユーザーが適切な権限を持っているかどうかをテストできます。

  1. mysql -u example_user -p

に注意してください -p このコマンドのフラグ。example_userユーザーの作成時に選択したパスワードの入力を求められます。 MariaDBコンソールにログインした後、にアクセスできることを確認します example\_database データベース:

  1. SHOW DATABASES;

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

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

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

  1. exit

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

ステップ3—PHP-FPMのインストール

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

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

をインストールするには php-fpmphp-mysql パッケージ、実行:

  1. sudo dnf install php-fpm php-mysqlnd

インストールが完了したら、編集する必要があります /etc/php-fpm.d/www.conf いくつかの設定を調整するためにファイル。

CentOS8に付属するデフォルトのテキストエディタは vi. vi は非常に強力なテキストエディタですが、経験が不足しているユーザーにとってはやや鈍感になる可能性があります。 次のようなよりユーザーフレンドリーなエディタをインストールすることをお勧めします nano CentOS8サーバー上の構成ファイルの編集を容易にするために:

  1. sudo dnf install nano

今すぐ開きます /etc/php-fpm.d/www.conf を使用した構成ファイル nano または選択した編集者:

  1. sudo nano /etc/php-fpm.d/www.conf

今探して usergroup ディレクティブ。 使用している場合 nano、あなたは打つことができます CTRL+W 開いているファイル内でこれらの用語を検索します。

/etc/php-fpm.d/www.conf
…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

あなたは両方が usergroup 変数はに設定されます apache. これらをに変更する必要があります nginx:

/etc/php-fpm.d/www.conf
…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

編集が完了したら、ファイルを保存して閉じます。 使用している場合 nano、を押してそうします CTRL + X、 それから YENTER.

有効にして開始するには php-fpm サービス、実行:

  1. sudo systemctl start php-fpm

最後に、Nginx Webサーバーを再起動して、によって作成された構成ファイルをロードします。 php-fpm インストール:

  1. sudo systemctl restart nginx

これで、Webサーバーが完全にセットアップされました。 次のステップでは、PHPテストスクリプトを作成して、すべてが期待どおりに機能することを確認します。

ステップ4—Nginxを使用したPHPのテスト

CentOS 8では、デフォルト php-fpm インストールにより、NginxWebサーバーで処理できる構成ファイルが自動的に作成されます .php にあるデフォルトのドキュメントルートのファイル /usr/share/nginx/html. PHPがWebサーバー内で正しく機能するために、Nginxの構成を変更する必要はありません。

唯一の調整は、Nginxドキュメントルートフォルダーのデフォルトのアクセス許可設定を変更することです。 このようにして、各コマンドの前にプレフィックスを付けることなく、通常のシステムユーザーでそのディレクトリにファイルを作成および変更できます。 sudo.

次のコマンドは、デフォルトのNginxドキュメントルートの所有権を sammy というユーザーとグループに変更するため、このコマンドで強調表示されているユーザー名とグループを、システムのユーザー名とグループを反映するように置き換えてください。

  1. sudo chown -R sammy.sammy /usr/share/nginx/html/

次に、テストPHPページを作成して、Webサーバーが期待どおりに機能することを確認します。

と呼ばれる新しいPHPファイルを作成します info.php/usr/share/nginx/html ディレクトリ:

  1. nano /usr/share/nginx/html/info.php

次のPHPコードは、サーバーで実行されている現在のPHP環境に関する情報を表示します。

/usr/share/nginx/html/info.php
<?php

phpinfo();

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

これで、WebサーバーがPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 ブラウザに移動し、サーバーのホスト名またはIPアドレスにアクセスしてから、 /info.php:

http://server_host_or_IP/info.php

次のようなページが表示されます。

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

  1. rm /usr/share/nginx/html/info.php

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

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

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

まず、このガイドのステップ2で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。

  1. mysql -u example_user -p

名前の付いたテーブルを作成します todo_list. MariaDBコンソールから、次のステートメントを実行します。

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

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

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

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

  1. SELECT * FROM example_database.todo_list;

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

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コンソールを終了できます。

  1. exit

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

  1. nano /usr/share/nginx/html/todo_list.php

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

/usr/share/nginx/html/todo_list.php
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

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();
}

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

これで、サーバーのホスト名またはパブリックIPアドレスにアクセスし、続いてWebブラウザーでこのページにアクセスできます。 /todo_list.php:

http://server_host_or_IP/todo_list.php

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

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

結論

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