Linux、Apache、MariaDB、PHP(LAMP)スタックをCentOS8にインストールする方法
序章
「LAMP」スタックはオープンソースソフトウェアのグループであり、通常は一緒にインストールされ、サーバーが動的なWebサイトやPHPで記述されたWebアプリをホストできるようにします。 この用語は、 LinuxオペレーティングシステムとApacheWebサーバーを表す頭字語です。 バックエンドデータはM ariaDBデータベースに保存され、動的処理は PHPによって処理されます。
LAMPスタックのデータベースレイヤーは通常MySQLデータベースサーバーですが、CentOS 8がリリースされる前は、デフォルトのCentOSリポジトリからMySQLを利用できませんでした。 このため、MySQLのコミュニティフォークである MariaDB は、CentOSマシンのLAMPスタックのデフォルトのデータベースシステムとして、MySQLの代替として広く受け入れられるようになりました。 MariaDBは、元のMySQLサーバーのドロップイン代替として機能します。つまり、実際には、アプリケーションで構成やコードを変更することなく、MariaDBに切り替えることができます。
このガイドでは、データベース管理システムとしてMariaDBを使用して、CentOS8サーバーにLAMPスタックをインストールします。
前提条件
このガイドに従うには、sudo権限を持つ非rootユーザーとしてCentOS 8サーバーにアクセスし、サーバーにアクティブなファイアウォールをインストールする必要があります。 これを設定するには、CentOS8の初期サーバー設定ガイドに従ってください。
ステップ1—ApacheWebサーバーをインストールする
サイト訪問者にWebページを表示するために、PHPページを提供するように構成できる人気のあるオープンソースWebサーバーであるApacheを採用します。 を使用します dnf
このソフトウェアをインストールするためのCentOS8の新しいデフォルトのパッケージマネージャーであるパッケージマネージャー。
をインストールします httpd
パッケージ:
- sudo dnf install httpd
プロンプトが表示されたら、次のように入力します y
Apacheをインストールすることを確認します。
インストールが完了したら、次のコマンドを実行してサーバーを有効にして起動します。
- sudo systemctl start httpd
有効にした場合 firewalld
サーバーの初期設定ガイドに従ってファイアウォールを使用するには、Apacheへの接続を許可する必要があります。 次のコマンドは、ポートで実行されるHTTP接続を永続的に有効にします 80
デフォルト:
- sudo firewall-cmd --permanent --add-service=http
変更が適用されたことを確認するには、次のコマンドを実行します。
- sudo firewall-cmd --permanent --list-all
次のような出力が表示されます。
Outputpublic
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:
変更を有効にするには、ファイアウォール構成を再ロードする必要があります。
- sudo firewall-cmd --reload
新しいファイアウォールルールを追加すると、WebブラウザからサーバーのパブリックIPアドレスまたはドメイン名にアクセスして、サーバーが稼働しているかどうかをテストできます。
注:DNSホスティングプロバイダーとしてDigitalOceanを使用している場合は、製品ドキュメントで、新しいドメイン名を設定してサーバーにポイントする方法の詳細な手順を確認できます。
サーバーを指すドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、次のコマンドを実行してドメイン名を見つけることができます。
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
これにより、いくつかのIPアドレスが出力されます。 Webブラウザでそれぞれを順番に試すことができます。
別の方法として、インターネット上の他の場所から見たときに、どのIPアドレスにアクセスできるかを確認できます。
- curl -4 icanhazip.com
Webブラウザで受け取ったアドレスを入力すると、Apacheのデフォルトのランディングページに移動します。
このページが表示されている場合は、Webサーバーが正しくインストールされています。
ステップ2—MariaDBをインストールする
Webサーバーが稼働しているので、サイトのデータを保存および管理できるようにデータベースシステムをインストールする必要があります。 オラクルが元のMySQLサーバーのコミュニティで開発したフォークであるMariaDBをインストールします。
このソフトウェアをインストールするには、以下を実行します。
- sudo dnf install mariadb-server
インストールが完了したら、次のコマンドでMariaDBサーバーを有効にして起動できます。
- sudo systemctl start mariadb
データベースサーバーのセキュリティを向上させるために、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。 このスクリプトは、いくつかの安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。 次のコマンドを実行して、インタラクティブスクリプトを開始します。
- sudo mysql_secure_installation
このスクリプトは、MariaDBの設定にいくつかの変更を加えることができる一連のプロンプトを表示します。 最初のプロンプトでは、現在のデータベースルートパスワードを入力するように求められます。 これをシステムルートユーザーと混同しないでください。 データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 MariaDBをインストールしたばかりで、まだ構成を変更していないため、このパスワードは空白になります。を押すだけです。 ENTER
プロンプトで。
次のプロンプトでは、データベースルートパスワードを設定するかどうかを尋ねられます。 MariaDBは、 root ユーザーに対して、通常はパスワードを使用するよりも安全な特別な認証方法を使用するため、ここでこれを設定する必要はありません。 タイプ N
次にを押します ENTER
.
そこから、を押すことができます Y
その後 ENTER
後続のすべての質問のデフォルトを受け入れます。 これにより、匿名ユーザーとテストデータベースが削除され、リモート root ログインが無効になり、これらの新しいルールが読み込まれるため、サーバーは行った変更をすぐに尊重します。
終了したら、次のように入力してMariaDBコンソールにログインします。
- sudo mysql
これにより、管理データベースユーザー root としてMariaDBサーバーに接続されます。これは、 sudo
このコマンドを実行するとき。 次のような出力が表示されます。
OutputWelcome 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コンソールから次のコマンドを実行します。
- CREATE DATABASE example_database;
これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限をユーザーに付与できます。 次のコマンドは、このユーザーのパスワードを次のように定義します。 password
、ただし、この値は、自分で選択した安全なパスワードに置き換える必要があります。
- GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
これにより、example_userユーザーに example\_database
このユーザーがサーバー上で他のデータベースを作成または変更できないようにします。
特権をフラッシュして、現在のセッションで保存され、使用可能であることを確認します。
- FLUSH PRIVILEGES;
これに続いて、MariaDBシェルを終了します。
- exit
今回はカスタムユーザークレデンシャルを使用して、MariaDBコンソールに再度ログインすることにより、新しいユーザーが適切な権限を持っているかどうかをテストできます。
- mysql -u example_user -p
に注意してください -p
このコマンドのフラグ。example_userユーザーの作成時に選択したパスワードの入力を求められます。 MariaDBコンソールにログインした後、にアクセスできることを確認します example\_database
データベース:
- SHOW DATABASES;
これにより、次の出力が得られます。
Output+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
MariaDBシェルを終了するには、次のように入力します。
- exit
この時点で、データベースシステムがセットアップされ、LAMPスタックの最後のコンポーネントであるPHPのインストールに進むことができます。
ステップ3—PHPのインストール
コンテンツを提供するためにApacheをインストールし、データを保存および管理するためにMariaDBをインストールしました。 PHPは、動的コンテンツを最終ユーザーに表示するコードを処理するセットアップのコンポーネントです。 に加えて php
パッケージ、あなたが必要になります php-mysqlnd
、PHPがMySQLベースのデータベースと通信できるようにするPHPモジュール。 コアPHPパッケージは、依存関係として自動的にインストールされます。
をインストールするには php
と php-mysqlnd
を使用したパッケージ dnf
パッケージマネージャー、実行:
sudo dnf install php php-mysqlnd
インストールが完了したら、PHPモジュールを有効にするためにApacheWebサーバーを再起動する必要があります。
sudo systemctl restart httpd
これで、Webサーバーが完全にセットアップされました。 次のステップでは、PHPテストスクリプトを作成して、すべてが期待どおりに機能することを確認します。
ステップ4—Apacheを使用したPHPのテスト
CentOS 8へのデフォルトのApacheインストールでは、次の場所にドキュメントルートが作成されます。 /var/www/html
. Webサーバー内でPHPが正しく機能するために、Apacheのデフォルト設定を変更する必要はありません。
唯一の調整は、Apacheドキュメントルートフォルダーのデフォルトのアクセス許可設定を変更することです。 このようにして、各コマンドの前にプレフィックスを付けることなく、通常のシステムユーザーでそのディレクトリにファイルを作成および変更できます。 sudo
.
次のコマンドは、デフォルトのApacheドキュメントルートの所有権を sammy というユーザーとグループに変更するため、システムのユーザー名とグループを反映するために、このコマンドで強調表示されたユーザー名とグループを必ず置き換えてください。
- sudo chown -R sammy.sammy /var/www/html/
次に、テストPHPページを作成して、Webサーバーが期待どおりに機能することを確認します。
CentOS8に付属するデフォルトのテキストエディタは vi
. vi
は非常に強力なテキストエディタですが、経験が不足しているユーザーにとってはやや鈍感になる可能性があります。 次のようなよりユーザーフレンドリーなエディタをインストールすることをお勧めします nano
CentOS8サーバー上のファイルの編集を容易にするために:
- sudo dnf install nano
タイプ y
インストールの確認を求められたら。
次に、という新しいPHPファイルを作成します info.php
で /var/www/html
ディレクトリ:
- nano /var/www/html/info.php
次のPHPコードは、サーバーで実行されている現在のPHP環境に関する情報を表示します。
<?php
phpinfo();
終了したら、ファイルを保存して閉じます。 使用している場合 nano
、入力することでそれを行うことができます CTRL+X
、 それから Y
と ENTER
確認するために。
これで、WebサーバーがPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 ブラウザに移動し、サーバーのホスト名またはIPアドレスにアクセスしてから、 /info.php
:
http://server_host_or_IP/info.php
次のようなページが表示されます。
そのページでPHPサーバーに関する関連情報を確認した後、PHP環境とCentOSサーバーに関する機密情報が含まれているため、作成したファイルを削除することをお勧めします。 使用できます rm
そのファイルを削除するには:
- rm /var/www/html/info.php
後で必要になった場合は、いつでもこのファイルを再生成できます。 次に、PHP側からデータベース接続をテストします。
ステップ5— PHPからのデータベース接続のテスト(オプション)
PHPがMariaDBに接続してデータベースクエリを実行できるかどうかをテストする場合は、ダミーデータを使用してテストテーブルを作成し、PHPスクリプトからその内容をクエリできます。
まず、このガイドのステップ2で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。
- 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)
);
次に、テストテーブルに数行のコンテンツを挿入します。 異なる値を使用して、次のコマンドを数回繰り返すことをお勧めします。
- INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
データがテーブルに正常に保存されたことを確認するには、次のコマンドを実行します。
- 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コンソールを終了できます。
- exit
これで、MariaDBに接続してコンテンツをクエリするPHPスクリプトを作成できます。 好みのエディタを使用して、カスタムWebルートディレクトリに新しいPHPファイルを作成します。 使用します nano
そのために:
- nano /var/www/html/todo_list.php
次のコンテンツを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サーバーに接続して対話する準備ができていることを意味します。
結論
このガイドでは、ApacheをWebサーバーとして使用して、訪問者にPHPWebサイトとアプリケーションを提供するための柔軟な基盤を構築しました。 PHPリクエストを処理するようにApacheを設定し、Webサイトのデータを格納するためにMariaDBデータベースも設定しました。