Debian 10にLinux、Apache、MariaDB、PHP(LAMP)スタックをインストールする方法

前書き

「LAMP」スタックは、サーバーが動的なWebサイトやWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は、実際には A pache Webサーバーを使用する L inuxオペレーティングシステムを表す頭字語です。 サイトデータは M ariaDBデータベースに保存され、動的コンテンツは P HPによって処理されます。

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

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

前提条件

このチュートリアルを完了するには、ルート以外の `+ sudo +`対応のユーザーアカウントと基本的なファイアウォールを持つDebian 10サーバーが必要です。 これはhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10[Debian 10の初期サーバーセットアップガイド]を使用して設定できます。

手順1-Apacheのインストールとファイアウォールの更新

Apache Webサーバーは、世界で最も人気のあるWebサーバーの1つです。 十分に文書化されており、ウェブの歴史の大半で広く使用されているため、ウェブサイトをホストするためのデフォルトの選択肢として最適です。

Debianのパッケージマネージャー、APTを使用してApacheをインストールします。

sudo apt update
sudo apt install apache2

これは「+ sudo +」コマンドであるため、これらの操作はルート権限で実行されます。 意図を確認するために、通常のユーザーのパスワードを求められます。

パスワードを入力すると、「+ apt 」はインストールする予定のパッケージとそれらが占有する追加ディスク容量を通知します。 ` Y `を押して ` ENTER +`を押して続行すると、インストールが続行されます。

次に、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10#step-4-%E2%80%94-による初期サーバーセットアップ手順に従っていると仮定します。基本的なファイアウォールの設定[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:
 ,

このプロファイルの着信HTTPおよびHTTPSトラフィックを許可します。

sudo ufw allow in "WWW Full"

ウェブブラウザでサーバーのパブリックIPアドレスにアクセスすると、すぐにスポットチェックを行って、すべてが計画どおりに進んだことを確認できます。

http://

デフォルトのDebian 10 Apache Webページが表示されます。これは、情報提供およびテスト目的であります。 これは次のようになります。

image:http://assets.digitalocean.com/how-to-install-lamp-debian-9/small_apache_default_debian9.png [Debian 10 Apache default]

このページが表示される場合、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サーバーのコミュニティフォークである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

この時点で、データベースシステムがセットアップされ、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 `というファイルを探します。 他のファイルよりもPHPファイルを優先するようWebサーバーに指示するため、Apacheが最初に ` index.php +`ファイルを探すようにします。

これを行うには、次のコマンドを入力して、root権限でテキストエディターで `+ dir.conf +`ファイルを開きます。

sudo nano /etc/apache2/mods-enabled/dir.conf

これは次のようになります。

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
   DirectoryIndex index.html index.cgi index.pl  index.xhtml index.htm
</IfModule>

PHPインデックスファイル(上で強調表示)を、次のように `+ DirectoryIndex +`仕様の後の最初の位置に移動します。

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
   DirectoryIndex  index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

終了したら、ファイルを保存して閉じます。 「+ nano 」を使用している場合は、「 CTRL + X 」、次に「 Y 」、「 ENTER +」を押して確認できます。

次に、Apacheの設定を次のようにリロードします。

sudo systemctl reload apache2

+ systemctl status`で + apache 2`サービスのステータスを確認できます:

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スクリプトを使用してセットアップをテストする前に、適切なhttps://httpd.apache.org/docs/current/vhosts/[Apache Virtual Host]をセットアップすることをお勧めしますウェブサイトのファイルとフォルダを保持します。 次のステップでそれを行います。

ステップ4-Webサイトの仮想ホストの作成

デフォルトでは、Apacheは `+ / etc / apache2 / sites-available / 000-default.conf `に含まれる設定を使用して、 ` / var / www / html +`にあるディレクトリからコンテンツを提供します。 デフォルトのWebサイト構成ファイルを変更する代わりに、PHP環境をテストするための新しい_仮想ホスト_を作成します。 仮想ホストを使用すると、複数のWebサイトを単一のApacheサーバーでホストできます。

それに続いて、* your_domain *という名前のサンプルWebサイトの `+ / var / www +`内にディレクトリ構造を作成します。

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

sudo mkdir /var/www/

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

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

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

sudo nano /etc/apache2/sites-available/.conf

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

/ etc / apache2 / sites-available / your_domain

<VirtualHost *:80>
   ServerName
   ServerAlias www.
   ServerAdmin [email protected]
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

この「+ VirtualHost 」設定では、Apacheに「 / var / www / 」をWebルートディレクトリとして使用して「+」を提供するように指示しています。 ドメイン名なしでApacheをテストする場合は、各オプションの行の先頭に「#」文字を追加して、オプション「+ ServerName 」および「 ServerAlias +」を削除またはコメントアウトできます。

これで、 `+ a2ensite +`を使用してこの仮想ホストを有効にできます。

sudo a2ensite

Apacheと共にインストールされるデフォルトのWebサイトを無効にすることができます。 これは、カスタムドメイン名を使用していない場合に必要です。この場合、Apacheのデフォルト設定により仮想ホストが上書きされるためです。 ApacheのデフォルトWebサイトを無効にするには、次を入力します。

sudo a2dissite 000-default

構成ファイルに構文エラーが含まれていないことを確認するには、次を実行できます。

sudo apache2ctl configtest

最後に、これらの変更が有効になるようにApacheをリロードします。

sudo systemctl reload apache2

新しいWebサイトはアクティブになりましたが、Webルートの `+ / var / www / +`はまだ空です。 次の手順では、PHPスクリプトを作成して新しいセットアップをテストし、サーバーにPHPが正しくインストールおよび構成されていることを確認します。

ステップ5-WebサーバーでのPHP処理のテスト

Webサイトのファイルとフォルダーをホストするカスタムの場所ができたので、簡単なPHPテストスクリプトを作成して、ApacheがPHPファイルのリクエストを処理できることを確認します。

カスタムWebルートフォルダー内に「+ info.php +」という名前の新しいファイルを作成します。

nano /var/www//info.php

これにより、空のファイルが開きます。 有効なPHPコードである次のテキストをファイル内に追加します。

/var/www/your_domain/info.php

<?php
phpinfo();

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

これで、WebサーバーがこのPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 これを試すには、Webブラウザーでこのページにアクセスしてください。 サーバーのパブリックIPアドレスが再び必要になります。

訪問するアドレスは次のとおりです。

http:///info.php

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

image:https://assets.digitalocean.com/articles/lamp_debian10/phpinfo_debian10_lamp.png [Debian 10のデフォルトPHP情報]

このページは、PHPの観点から見たサーバーに関する基本的な情報を提供します。 デバッグや、設定が正しく適用されていることを確認するのに役立ちます。

ブラウザでこのページが表示される場合、PHPインストールは期待どおりに機能しています。

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

sudo rm /var/www//info.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スクリプトはMariaDBデータベースに接続し、* todo_list *テーブルのコンテンツを照会して、結果をリストで表示します。 データベース接続に問題がある場合、例外がスローされます。 このコンテンツを ` todo list.php`スクリプトにコピーします:

/var/www/your_domain/todo_list.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();
}

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

これで、ウェブブラウザのドメイン名またはパブリックIPアドレスにアクセスし、続いて `+ / todo_list.php +`にアクセスして、ウェブブラウザでこのページにアクセスできます。

http:///todo_list.php

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

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

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

結論

このガイドでは、ApacheをWebサーバーとして、MariaDBをデータベースシステムとして使用して、訪問者にPHP Webサイトとアプリケーションを提供するための柔軟な基盤を構築しました。

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