Linux、Apache、MariaDB、PHP(LAMP)スタックをDebian10にインストールする方法
序章
「LAMP」スタックは、サーバーが動的なWebサイトやWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は、実際には LinuxオペレーティングシステムとApacheWebサーバーを表す頭字語です。 サイトデータはM ariaDBデータベースに保存され、動的コンテンツは PHPによって処理されます。
このソフトウェアスタックには通常、データベース管理システムとして MySQL が含まれていますが、Debianを含む一部のLinuxディストリビューションでは、MySQLのドロップイン代替としてMariaDBを使用しています。
このガイドでは、データベース管理システムとしてMariaDBを使用して、Debian10サーバーにLAMPスタックをインストールします。
前提条件
このチュートリアルを完了するには、ルート以外のsudo
対応のユーザーアカウントと基本的なファイアウォールを備えたDebian10サーバーが必要です。 これは、Debian10の初期サーバーセットアップガイドを使用して構成できます。
ステップ1—Apacheのインストールとファイアウォールの更新
Apache Webサーバーは、世界で最も人気のあるWebサーバーの1つです。 これは十分に文書化されており、Webの歴史の多くで広く使用されているため、Webサイトをホストするための優れたデフォルトの選択肢となっています。
DebianのパッケージマネージャーであるAPTを使用してApacheをインストールします。
- sudo apt update
- sudo apt install apache2
これはsudo
コマンドであるため、これらの操作はroot権限で実行されます。 それはあなたの意図を確認するためにあなたの通常のユーザーのパスワードを尋ねます。
パスワードを入力すると、apt
は、インストールする予定のパッケージと、それらが使用する追加のディスク容量を通知します。 Y
を押し、ENTER
を押して続行すると、インストールが続行されます。
次に、 UFWファイアウォールをインストールして有効にすることでサーバーの初期設定手順に従ったと仮定して、ファイアウォールがHTTPおよびHTTPSトラフィックを許可していることを確認します。
Debian 10にインストールすると、UFWにはファイアウォール設定を微調整するために使用できるアプリプロファイルがロードされます。 次のコマンドを実行して、アプリケーションプロファイルの完全なリストを表示します。
- sudo ufw app list
WWW
プロファイルは、Webサーバーが使用するポートを管理するために使用されます。
OutputAvailable applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .
WWW Full
プロファイルを調べると、ポート80
および443
へのトラフィックが有効になっていることがわかります。
- sudo ufw app info "WWW Full"
OutputProfile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)
Ports:
80,443/tcp
このプロファイルの着信HTTPおよびHTTPSトラフィックを許可します。
- sudo ufw allow in "WWW Full"
WebブラウザでサーバーのパブリックIPアドレスにアクセスすると、すぐにスポットチェックを実行して、すべてが計画どおりに行われたことを確認できます。
http://your_server_ip
情報提供とテストの目的でそこにあるデフォルトのDebian10ApacheWebページが表示されます。 次のようになります。
このページが表示されている場合は、Webサーバーが正しくインストールされ、ファイアウォールを介してアクセスできるようになっています。
サーバーのパブリックIPアドレスがわからない場合は、いくつかの方法で見つけることができます。 通常、これはSSH経由でサーバーに接続するために使用するアドレスです。
コマンドラインからこれを行うには、いくつかの異なる方法があります。 まず、iproute2
ツールを使用して、次のように入力してIPアドレスを取得できます。
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
これにより、2行または3行戻ります。 これらはすべて正しいアドレスですが、コンピュータで使用できるのは1つだけである可能性があるため、それぞれを試してみてください。
別の方法は、curl
ユーティリティを使用して外部の関係者に連絡し、itがサーバーをどのように認識しているかを通知することです。 これは、特定のサーバーにIPアドレスを尋ねることによって行われます。
- sudo apt install curl
- curl http://icanhazip.com
IPアドレスの取得に使用する方法に関係なく、Webブラウザのアドレスバーに入力して、デフォルトのApacheページを表示します。
ステップ2—MariaDBをインストールする
Webサーバーが稼働しているので、サイトのデータを保存および管理できるようにデータベースシステムをインストールする必要があります。
Debian 10では、MySQLサーバーのインストールに従来使用されていたメタパッケージmysql-server
が、default-mysql-server
に置き換えられました。 このメタパッケージは、Oracleによる元のMySQLサーバーのコミュニティフォークである MariaDB を参照し、現在、Debianベースのパッケージマネージャーリポジトリで使用可能なデフォルトのMySQL互換データベースサーバーです。
ただし、長期的な互換性のために、メタパッケージを使用する代わりに、プログラムの実際のパッケージmariadb-server
を使用してMariaDBをインストールすることをお勧めします。
このソフトウェアをインストールするには、以下を実行します。
- sudo apt install mariadb-server
インストールが完了したら、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。 このスクリプトは、いくつかの安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。 次のコマンドを実行して、インタラクティブスクリプトを開始します。
- sudo mysql_secure_installation
このスクリプトは、MariaDBの設定にいくつかの変更を加えることができる一連のプロンプトを表示します。 最初のプロンプトでは、現在のデータベースルートパスワードを入力するように求められます。 これをシステムルートと混同しないでください。 データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 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ユーザーとしてログインできるユーザーは、コンソールまたは同じ権限で実行されているアプリケーションを介して。 つまり、実際には、管理データベース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コンソールに再度ログインすることにより、新しいユーザーが適切な権限を持っているかどうかをテストできます。
- mariadb -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のインストール
PHPは、動的コンテンツを表示するコードを処理するセットアップのコンポーネントです。 スクリプトを実行し、MariaDBデータベースに接続して情報を取得し、処理されたコンテンツをWebサーバーに渡して表示することができます。
もう一度、apt
システムを利用してPHPをインストールします。 さらに、PHPコードがApacheサーバーで実行され、MariaDBデータベースと通信できるようにするヘルパーパッケージをいくつか含めます。
- sudo apt install php libapache2-mod-php php-mysql
これにより、問題なくPHPがインストールされます。 これをすぐにテストします。
ほとんどの場合、Apacheがファイルを提供する方法を変更する必要があります。 現在、ユーザーがサーバーにディレクトリを要求すると、Apacheは最初にindex.html
というファイルを探します。 Webサーバーに他のファイルよりもPHPファイルを優先するように指示したいので、Apacheに最初にindex.php
ファイルを検索させます。
これを行うには、次のコマンドを入力して、root権限を持つテキストエディタでdir.conf
ファイルを開きます。
- sudo nano /etc/apache2/mods-enabled/dir.conf
次のようになります。
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
次のように、PHPインデックスファイル(上で強調表示)をDirectoryIndex
仕様の後の最初の位置に移動します。
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
終了したら、ファイルを保存して閉じます。 nano
を使用している場合は、CTRL+X
、Y
、ENTER
の順に押して確認します。
次に、Apacheの構成を次のようにリロードします。
- sudo systemctl reload apache2
systemctl status
を使用して、apache2
サービスのステータスを確認できます。
- sudo systemctl status apache2
Sample Output● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-07-08 12:58:31 UTC; 8s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 11948 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 11954 (apache2)
Tasks: 6 (limit: 4719)
Memory: 11.5M
CGroup: /system.slice/apache2.service
├─11954 /usr/sbin/apache2 -k start
├─11955 /usr/sbin/apache2 -k start
├─11956 /usr/sbin/apache2 -k start
├─11957 /usr/sbin/apache2 -k start
├─11958 /usr/sbin/apache2 -k start
└─11959 /usr/sbin/apache2 -k start
この時点で、LAMPスタックは完全に機能していますが、PHPスクリプトを使用してセットアップをテストする前に、Webサイトのファイルとフォルダーを保持する適切なApache仮想ホストをセットアップすることをお勧めします。 次のステップでそれを行います。
ステップ4—Webサイトの仮想ホストを作成する
デフォルトでは、Apacheは、/etc/apache2/sites-available/000-default.conf
に含まれる構成を使用して、/var/www/html
にあるディレクトリからコンテンツを提供します。 デフォルトのWebサイト構成ファイルを変更する代わりに、PHP環境をテストするための新しい仮想ホストを作成します。 仮想ホストを使用すると、単一のApacheサーバーで複数のWebサイトをホストできます。
続いて、your_domainという名前のサンプルWebサイトの/var/www
内にディレクトリ構造を作成します。
次のように、your_domainのルートWebディレクトリを作成します。
- sudo mkdir /var/www/your_domain
次に、現在のシステムユーザーを参照する$USER環境変数を使用してディレクトリの所有権を割り当てます。
- sudo chown -R $USER:$USER /var/www/your_domain
次に、お好みのコマンドラインエディタを使用して、Apacheのsites-available
ディレクトリにある新しい設定ファイルを開きます。 ここでは、nano
を使用します。
- sudo nano /etc/apache2/sites-available/your_domain.conf
これにより、新しい空白のファイルが作成されます。 次の必要最低限の構成で貼り付けます。
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
このVirtualHost
構成では、/var/www/your_domain
をWebルートディレクトリとして使用してyour_domain
を提供するようにApacheに指示しています。 ドメイン名なしでApacheをテストする場合は、各オプションの先頭に#
文字を追加することで、オプションServerName
およびServerAlias
を削除またはコメントアウトできます。行。
これで、a2ensite
を使用して、この仮想ホストを有効にできます。
- sudo a2ensite your_domain
ApacheにインストールされているデフォルトのWebサイトを無効にすることをお勧めします。 カスタムドメイン名を使用していない場合は、これが必要です。この場合、Apacheのデフォルト構成によって仮想ホストが上書きされるためです。 ApacheのデフォルトのWebサイトを無効にするには、次のように入力します。
- sudo a2dissite 000-default
構成ファイルに構文エラーが含まれていないことを確認するには、次のコマンドを実行します。
- sudo apache2ctl configtest
最後に、Apacheをリロードして、これらの変更を有効にします。
- sudo systemctl reload apache2
これで新しいWebサイトがアクティブになりましたが、Webルート/var/www/your_domain
はまだ空です。 次のステップでは、新しいセットアップをテストし、PHPがサーバーに正しくインストールおよび構成されていることを確認するためのPHPスクリプトを作成します。
ステップ5—WebサーバーでのPHP処理のテスト
Webサイトのファイルとフォルダーをホストするカスタムの場所ができたので、ApacheがPHPファイルの要求を処理および処理できることを確認するための簡単なPHPテストスクリプトを作成します。
カスタムWebルートフォルダ内にinfo.php
という名前の新しいファイルを作成します。
- nano /var/www/your_domain/info.php
これにより、空のファイルが開きます。 ファイル内に、有効なPHPコードである次のテキストを追加します。
<?php
phpinfo();
終了したら、ファイルを保存して閉じます。
これで、WebサーバーがこのPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 これを試すには、Webブラウザでこのページにアクセスしてください。 サーバーのパブリックIPアドレスが再度必要になります。
訪問したいアドレスは次のとおりです。
http://your_domain/info.php
次のようなページが表示されます。
このページでは、PHPの観点からサーバーに関する基本的な情報を提供します。 デバッグや、設定が正しく適用されていることを確認するのに役立ちます。
このページがブラウザに表示されている場合、PHPのインストールは期待どおりに機能しています。
そのページでPHPサーバーに関する関連情報を確認した後、PHP環境とDebianサーバーに関する機密情報が含まれているため、作成したファイルを削除することをお勧めします。 rm
を使用してこれを行うことができます。
- sudo rm /var/www/your_domain/info.php
後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。
ステップ6— PHPからのデータベース接続のテスト(オプション)
PHPがMariaDBに接続してデータベースクエリを実行できるかどうかをテストする場合は、ダミーデータを使用してテストテーブルを作成し、PHPスクリプトからその内容をクエリできます。
まず、このガイドのステップ2で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。
- mariadb -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/your_domain/todo_list.php
次のPHPスクリプトは、MariaDBデータベースに接続し、 todo_list テーブルのコンテンツを照会して、結果をリストに表示します。 データベース接続に問題がある場合は、例外がスローされます。 このコンテンツを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();
}
編集が完了したら、ファイルを保存して閉じます。
これで、Webブラウザでこのページにアクセスできます。Webサイトのドメイン名またはパブリックIPアドレスにアクセスし、続いて/todo_list.php
にアクセスします。
http://your_domain/todo_list.php
テストテーブルに挿入したコンテンツを示す次のようなページが表示されます。
これは、PHP環境がMariaDBサーバーに接続して対話する準備ができていることを意味します。
結論
このガイドでは、WebサーバーとしてApacheを使用し、データベースシステムとしてMariaDBを使用して、訪問者にPHPWebサイトとアプリケーションを提供するための柔軟な基盤を構築しました。
現在の設定をさらに改善するために、PHPでの依存関係とパッケージ管理のためにComposer をインストールできます。また、 Let’sEncryptを使用してWebサイトのOpenSSL証明書をインストールすることもできます。