Linux、Apache、MySQL、PHP(LAMP)スタックをCentOS7にインストールする方法
序章
「LAMP」スタックは、サーバーが動的なWebサイトやWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は、 LinuxオペレーティングシステムとApacheWebサーバーを表す頭字語です。 サイトデータは通常、 M ySQLデータベースに保存され、動的コンテンツは PHPによって処理されます。
ほとんどのLinuxシステムでは、システムのデフォルトのパッケージ管理リポジトリからmysql-serverパッケージをダウンロードすることでMySQLをインストールできます。 ただし、CentOS 7では、mysql-serverパッケージは、MySQLのドロップイン代替として機能するMySQLリレーショナルデータベース管理システムのコミュニティ開発フォークであるMariaDBを実際にインストールします。 したがって、このチュートリアルでは、 L inux、 A pache、 M ariaDB、およびPで構成されるLAMPスタックをインストールする方法の概要を説明します。 CentOS7サーバー上のHP。
前提条件
このガイドを開始する前に、サーバーにroot以外のユーザーアカウントを設定しておく必要があります。 これを行う方法については、CentOS7チュートリアルのサーバーの初期設定に従ってください。
ステップ1—ApacheWebサーバーをインストールする
Apacheは、訪問者にWebページを表示するために使用される人気のあるオープンソースWebサーバーです。 PHPページを提供するように構成できます。
CentOSのパッケージマネージャーyumを使用してApacheをインストールします。 パッケージマネージャーを使用すると、CentOSが管理するリポジトリからほとんどのソフトウェアをインストールできます。
端末に次のコマンドを入力して、httpdApacheパッケージをインストールします。
sudo yum install httpd
プロンプトが表示されたら、Yと入力して、Apacheのインストールを確認します。 インストールが完了したら、次のコマンドを使用してApacheサーバーを起動します。
sudo systemctl start httpd
WebブラウザにパブリックIPアドレスまたはドメイン名を入力して、サーバーが実行されているかどうかをテストできます。
注:DNSホスティングプロバイダーとしてDigitalOceanを使用している場合は、製品ドキュメントで、新しいドメイン名を設定してサーバーにポイントする方法の詳細な手順を確認できます。
サーバーを指すドメイン名がない場合、またはサーバーのパブリックIPアドレスがわからない場合は、次のコマンドを実行してドメイン名を見つけることができます。
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
これにより、いくつかの異なるアドレスが出力されます。 あなたはあなたのウェブブラウザでそれらのそれぞれを試すことができます。
別の方法は、外部の関係者を使用して、サーバーがどのように認識されているかを通知することです。 これを行うには、次のコマンドを使用して、特定のサーバーにIPアドレスを尋ねます。
curl http://icanhazip.com
どちらの方法を選択した場合でも、WebブラウザにIPアドレスを入力して、サーバーが実行されていることを確認します。
http://your_server_IP_address
デフォルトのCentOS7Apacheランディングページが表示されます。
次のコマンドを使用して、Apacheを起動時に起動できるようにすることができます。
sudo systemctl enable httpd.service
ステップ2— MySQLのインストール(MariaDB)
Webサーバーが稼働している状態で、MariaDBをインストールできます。 それはあなたのサイトが情報を保存できるデータベースを整理し、データベースへのアクセスを提供します。
MariaDBソフトウェアパッケージをインストールするには、次のコマンドを実行します。
sudo yum install mariadb-server
インストールが完了したら、MariaDBを起動します。
sudo systemctl start mariadb
次のコマンドを使用して、MariaDBが起動時に起動できるようにすることができます。
sudo systemctl enable mariadb.service
データベースサーバーのセキュリティを向上させるために、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。 このスクリプトは、いくつかの安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。
次のコマンドを実行して、インタラクティブスクリプトを開始します。
sudo mysql_secure_installation
このスクリプトは、MariaDBの設定にいくつかの変更を加えることができる一連のプロンプトを表示します。 最初のプロンプトでは、現在のデータベースルートパスワードを入力するように求められます。 これをシステムルートユーザーと混同しないでください。 データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 MariaDBをインストールしたばかりで、構成を変更していないため、このパスワードは空白になります。 プロンプトでENTERを押します。
次のプロンプトでは、データベースルートパスワードを設定するかどうかを尋ねられます。 Nと入力し、ENTERを押します。
そこから、Yを押してから、ENTERを押して、後続のすべての質問のデフォルトを受け入れることができます。 これにより、匿名ユーザーとテストデータベースが削除され、リモート root ログインが無効になり、これらの新しいルールが読み込まれるため、サーバーは行った変更をすぐに尊重します。
終了したら、次のように入力してMariaDBコンソールにログインします。
sudo mysql
これにより、管理データベースユーザーrootとしてMariaDBサーバーに接続されます。
OutputWelcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 12 Server version: 5.5.68-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.
セキュリティを強化するには、データベースごとに、拡張性の低い特権を持つ専用のユーザーアカウントを設定することをお勧めします。 これは、サーバーで複数のデータベースをホストすることを計画している場合に特に重要です。
このような設定を示すために、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ステートメントを使用して、example_userに付与した特権を再ロードして保存します。
FLUSH PRIVILEGES;
MariaDBシェルを終了します。
exit
新しいユーザーが適切な権限を持っているかどうかをテストするには、MariaDBコンソールに再度ログインしますが、上記で作成したexample_userクレデンシャルを使用します。
mysql -u example_user -p
このコマンドの-pフラグに注意してください。これにより、example_userユーザーの作成時に選択したパスワードの入力を求められます。 MariaDBコンソールにログインした後、次のステートメントを使用してexample_databaseデータベースにアクセスできることを確認します。
SHOW DATABASES;
example_databaseが出力に表示されます。
Output+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)
MariaDBシェルを終了するには、次のように入力します。
exit
データベースシステムがセットアップされ、PHPのインストールに進むことができます。
ステップ3—PHPのインストール
コンテンツを提供するためにApacheをインストールし、データを保存および管理するためにMariaDBをインストールしました。 PHPはコードを処理して、動的コンテンツをユーザーに表示します。 phpパッケージに加えて、PHPがMySQLベースのデータベースと通信できるようにするPHPモジュールであるphp-mysqlが必要です。 コアPHPパッケージは、依存関係として自動的にインストールされます。
次のコマンドを使用して、phpおよびphp-mysqlパッケージをyumとともにインストールします。
sudo yum install php php-mysql
Apache Webサーバーを再起動して、インストールしたPHPモジュールを有効にします。
sudo systemctl restart httpd.service
これで、サーバーはLAMPスタックアプリケーションに必要なすべてのコンポーネントで構成されました。 次のステップは、構成をテストして、すべてが調和して機能していることを確認することです。
ステップ4—ApacheWebサーバーでPHPをテストする
CentOS 7へのデフォルトのApacheインストールでは、/var/www/htmlにドキュメントルートが作成されます。 Webサーバー内でPHPが正しく機能するために、Apacheのデフォルト設定を変更する必要はありません。
ただし、Apacheドキュメントのルートフォルダのデフォルトのアクセス許可設定を変更するように調整することはできます。 これにより、各コマンドの前にsudoを付ける必要なしに、通常のシステムユーザーでそのディレクトリにファイルを作成および変更できます。
次のコマンドは、デフォルトのApacheドキュメントルートの所有権をsammyというユーザーとグループに変更するため、システムのユーザー名とグループを反映するために、このコマンドで強調表示されたユーザー名とグループを必ず置き換えてください。
sudo chown -R sammy.sammy /var/www/html/
PHPテストファイルを作成して、Webサーバーが期待どおりに機能することを確認できます。 お好みのテキストエディタを使用して、このファイルを作成してください。 次の例では、CentOS7のデフォルトのviテキストエディタを使用しています。
var/www/htmlディレクトリにinfo.phpというPHPファイルを作成します。
vi /var/www/html/info.php
これにより、/var/www/htmlディレクトリにある空のPHPファイルが開きます。 Iを押して、viエディターでINSERTモードに入ります。 これにより、テキストエディタ内で入力および変更を行うことができます。 次のPHPコードを入力します。
/var/www/html/info.php
<?php phpinfo(); ?>
このPHPコードは、サーバーで実行されているPHP環境に関する情報を表示します。 このファイルへの変更が終了したら、ESCキーを押して、viのINSERTモードを終了します。 :x(セミコロンと小文字のx)と入力して、ファイルを保存して閉じます。
サーバーのパブリックIPアドレスに移動し、続いて/info.phpに移動すると、WebサーバーがPHPコンテンツを正しく表示するかどうかをテストできます。
http://your_server_IP_address/info.php
以下のようなWebページがブラウザに表示されます。
このページでは、PHPの観点からサーバーに関する情報を提供します。 これは、デバッグを行い、設定が正しく適用されていることを確認するのに役立ちます。 PHPサーバーに関する関連情報を確認した後、PHP環境とCentOSサーバーに関する機密情報が含まれているため、このファイルを削除することをお勧めします。
rmを使用して、このファイルを削除できます。
rm /var/www/html/info.php
後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。 次に、PHPを使用してデータベース接続をテストできます。
ステップ5– PHPを使用したデータベース接続のテスト(オプション)
PHPがMariaDBに接続し、データベースクエリを実行するかどうかをテストするには、いくつかのテストデータを含むテストテーブルを作成します。 PHPスクリプトからその内容を照会できます。
まず、このガイドのステップ2で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。
mysql -u example_user -p
MariaDBコンソールから、次のステートメントを実行して、example_database内にtodo_listという名前のテーブルを作成します。
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
MariaDBコンソールは、編集のたびにテーブルの変更について通知します。
Query OK, 0 rows affected (0.00 sec)
テストテーブルにコンテンツの数行を挿入します。 異なる値を使用して次のコマンドを数回繰り返し、テストテーブルにデータを入力できます。
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ファイルを作成します。 この例では、viを使用しています。
vi /var/www/html/todo_list.php
viテキストエディタでIを押して、次のコンテンツを追加します。example_userとpasswordを自分のものに置き換えることを忘れないでください。
/var/www/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();
}
編集が終わったら、ESCを押してファイルを保存して閉じ、viに:xと入力します。
これで、サーバーのホスト名またはパブリックIPアドレスにアクセスし、続いて/todo_list.phpにアクセスして、Webブラウザーでこのページにアクセスできます。
http://server_host_or_IP/todo_list.php
以下は、テストテーブルに挿入したコンテンツを示すWebページの例です。
結論
このガイドでは、ApacheをWebサーバーとして使用して、訪問者にPHPWebサイトとアプリケーションを提供するための柔軟な基盤を構築しました。 PHPリクエストを処理するようにApacheを設定し、Webサイトのデータを格納するためにMariaDBデータベースを設定しました。