導入
LAMPスタックは、通常サーバー上で動的なウェブサイトやウェブアプリケーションをホストするために一緒にインストールされるオープンソースソフトウェアのグループです。これは、Apacheウェブサーバーを搭載したLinuxオペレーティングシステムを指します。サイトデータはMariaDBデータベースに保存され、動的なコンテンツはPHPによって処理されます。.
このソフトウェア スタックには通常、データベース管理システムとして MySQL が含まれていますが、Debian を含む一部の Linux ディストリビューションでは、MySQL の代わりに MariaDB を使用しています。.
このガイドでは、データベース管理システムとして MariaDB を使用して、Debian 10 サーバーに LAMP スタックをインストールします。.
前提条件
このチュートリアルを実行するには、アクティブな非 root sudo アカウントと基本的なファイアウォールを備えた Debian 10 サーバーが必要です。.
ステップ1 – Apacheをインストールし、ファイアウォールを更新する
Apacheウェブサーバーは、世界で最も人気のあるウェブサーバーの1つです。豊富なドキュメントがあり、ウェブの歴史を通じて広く使用されてきたため、ウェブサイトホスティングのデフォルトの選択肢として最適です。.
まず、パッケージマネージャーのキャッシュを更新します。このセッションで初めてsudoを使用する場合は、aptでシステムパッケージを管理するための適切な権限があることを確認するために、ユーザーパスワードの入力を求められます。
sudo apt update次に、次のコマンドで Apache をインストールします。
sudo apt install apache2このコマンドはApacheのインストールを確認するように求めます。Yキーを押してからENTERキーを押してください。インストールが完了したら、ファイアウォールの設定を行う必要があります。サーバーの初期設定手順に従ってUFWファイアウォールをインストールして有効化した場合は、ファイアウォールがHTTPおよびHTTPSトラフィックを許可していることを確認してください。.
Debian 10では、UFWにファイアウォール設定に使用できるアプリケーションプロファイルがロードされています。アプリケーションプロファイルの完全なリストを確認するには、次のコマンドを実行してください。
sudo ufw app listWWW プロファイルは、Web サーバーが使用するポートを管理するために使用されます。
Output
Available applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .WWW フル プロファイルを確認すると、ポート 80 と 443 でトラフィックが有効になっていることがわかります。
sudo ufw app info "WWW Full"Output
Profile: 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これにより、情報提供とテストの目的で用意されたデフォルトの Debian 10 Apache Web ページが返されます。
ブラウザがこのページを返す場合、Web サーバーは適切にインストールされ、ファイアウォール経由でアクセス可能になります。.
サーバーのパブリックIPアドレスを見つける方法
サーバーのパブリックIPアドレスがわからない場合は、いくつかの方法で確認できます。通常、これはSSH経由でサーバーに接続する際に使用するアドレスです。.
コマンドラインからこれを行うにはいくつかの方法があります。まず、iproute2ツールを使用して次のコマンドを実行し、IPアドレスを取得します。
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'2、3行戻ります。すべて有効なアドレスですが、お使いのコンピュータではそのうちの1つしか使用できない可能性がありますので、それぞれ試してみてください。.
ツールを使用する別の方法 カール これは、外部の相手にあなたのサーバーがどのように認識されているかを伝えるためのものです。特定のサーバーにあなたのIPアドレスを問い合わせるには、以下のコマンドを実行してください。
Debian 10では カール これはデフォルトではないので、最初にインストールする必要があります。
sudo apt install curl次に、次のコマンドを実行して、特定のサーバーに IP アドレスを問い合わせます。
curl http://icanhazip.com方法に関係なく、Web ブラウザに IP アドレスを入力して、サーバーがデフォルトの Apache ページを実行していることを確認します。.
ステップ2 – MariaDBをインストールする
Web サーバーの準備ができたので、サイトのデータを保存および管理できるようにデータベース システムをインストールする必要があります。.
Debian 10では、従来MySQLサーバーのインストールに使用されていたMySQL-serverメタパッケージがdefault-MySQL-serverに置き換えられました。このメタパッケージは、OracleによるオリジナルのMySQLサーバーのフォークであるMariaDBを参照しており、現在ではDebianベースのパッケージ管理リポジトリで利用可能なデフォルトのMySQL互換データベースサーバーとなっています。.
ただし、長期的な互換性を確保するには、メタ パッケージではなく、実際のアプリケーション パッケージである mariadb-server を使用して MariaDB をインストールすることをお勧めします。.
MariaDB ソフトウェアをインストールするには、次のコマンドを実行します。
sudo apt install mariadb-serverインストールが完了したら、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。このスクリプトは、安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。以下のコマンドを実行して、対話型スクリプトを起動してください。
sudo mysql_secure_installationこのスクリプトは、MariaDBの設定を変更するための一連のコマンドを案内します。最初のプロンプトでは、現在のデータベースルートパスワードの入力を求められます。これはシステムルートと混同しないでください。データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。MariaDBをインストールしたばかりで、まだ設定を変更していないため、このパスワードは空白になっています。プロンプトでENTERキーを押してください。.
次のプロンプトでは、データベースのルートパスワードを設定するかどうかを尋ねられます。MariaDBはルートユーザーに対して、通常はパスワードよりも安全な特別な認証方法を使用しているため、今すぐ設定する必要はありません。Nを押してからENTERを押してください。.
そこからYを押してEnterキーを押すと、以降のすべての質問でデフォルト設定が適用されます。これにより、匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効化され、新しいルールが読み込まれるため、MariaDBは変更を即座に反映します。.
完了したら、MariaDB コンソールにログインします。
sudo mariadbこれにより、MariaDBサーバーに管理データベースユーザー(root)として接続されます。このコマンドを実行すると、sudoによってrootであることが推測されます。以下の出力が表示されます。
Output
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.3.36-MariaDB-0+deb10u2 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管理ユーザーのデフォルトの認証方法がunix_socketパスワードであるためです。一見セキュリティ上の懸念事項のように思えるかもしれませんが、MariaDBのrootユーザーとしてログインできるのはsudo権限を持つシステムユーザーのみであるため、データベースサーバーのセキュリティが向上します。sudo権限はコンソールから、または同じ権限を持つ実行中のアプリケーションから実行できます。実際には、これはPHPアプリケーションから管理データベースのrootユーザーを使用して接続できないことを意味します。.
セキュリティを強化するために、特にサーバー上で複数のデータベースをホストする予定の場合は、各データベースに対して権限を制限した専用のユーザー アカウントを設定することをお勧めします。.
次のコマンドで MariaDB コンソールを終了できます。
exitMariaDBサーバーのインストールとセキュリティ保護が完了しました。次に、LAMPスタックの最後のコンポーネントであるPHPをインストールします。.
ステップ3 – PHPをインストールする
コンテンツを提供するためにApacheがインストールされ、データの保存と管理のためにMariaDBがインストールされています。PHPは、エンドユーザーに動的なコンテンツを表示するためのコードを処理するコンポーネントです。PHPはスクリプトを実行し、MariaDBデータベースに接続して情報を取得し、処理済みのコンテンツをWebサーバーに送信して表示することができます。.
php パッケージに加えて、PHP が MariaDEB などの MySQL ベースのデータベースと通信できるようにする PHP モジュールである php-mysql が必要です。また、Apache が PHP ファイルを処理できるようにするには、libapache2-mod-php も必要です。PHP のコアパッケージは依存関係として自動的にインストールされます。.
これらのパッケージをインストールするには、次のコマンドを実行します。
sudo apt install php libapache2-mod-php php-mysqlインストールが完了したら、次のコマンドで PHP のバージョンを確認できます。
php -vOutput
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies多くの場合、Apache のファイル提供方法を変更する必要があります。現在、ユーザーがサーバーからディレクトリへのリクエストを送信すると、Apache はまず index.html ファイルを検索します。Web サーバーに PHP ファイルを他のファイルよりも優先させるには、Apache が最初に index.php ファイルを検索するように設定できます。.
これを行うには、以下のコマンドを実行し、お好みのテキストエディタでルート権限で dir.conf ファイルを開きます。この例では、nano を使用します。
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 apache2systemctl status を使用して apache2 サービスのステータスを確認できます。
sudo systemctl status apache2Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/
Main PID: 13080 (apache2)
Tasks: 6 (limit: 4915)
Memory: 13.7M
CGroup: /system.slice/apache2.service
├─13080 /usr/sbin/apache2 -k start
├─13101 /usr/sbin/apache2 -k start
├─13102 /usr/sbin/apache2 -k start
├─13103 /usr/sbin/apache2 -k start
├─13104 /usr/sbin/apache2 -k start
└─13105 /usr/sbin/apache2 -k startこの時点でLAMPスタックは完全に動作しますが、PHPスクリプトで設定をテストする前に、ウェブサイトのファイルとフォルダを保存するための適切なApache仮想ホストを設定することをお勧めします。これは次のステップで設定します。.
ステップ4 – ウェブサイトの仮想ホストを作成する
Apacheウェブサーバーを使用する場合、仮想ホスト(Nginxのサーバーブロックに似ています)を作成して設定の詳細をカプセル化し、単一のサーバーで複数のドメインをホストできます。このセクションでは、your_domainというドメインを設定していますが、これは実際のドメイン名に置き換えてください。.
デフォルトでは、Apacheは/etc/apache2/sites-available/000-default.confの設定に基づいて、/var/www/htmlにあるディレクトリからコンテンツを提供します。デフォルトのウェブサイト設定ファイルを変更する代わりに、PHP環境をテストするための新しい仮想ホストを作成します。仮想ホストを使用すると、1台のApacheサーバーで複数のウェブサイトをホストできます。また、クライアントからのリクエストが他のどのサイトにも一致しない場合に備えて、/var/www/htmlをデフォルトディレクトリとして残し、/var/www/htmlに your_domain 用のディレクトリ構造を作成します。.
まず、次のように 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設定では、Apacheに/var/www/your_domainをWebルートディレクトリとしてyour_domainにサービスを提供するよう指示しています。ドメイン名なしでApacheをテストしたい場合は、ServerNameおよびServerAliasオプションの先頭にシャープ記号(#)を追加して、これらのオプションを削除するかコメントアウトしてください。.
完了したら、ファイルを保存して閉じます。.
次に、a2ensite を使用してこの仮想ホストをアクティブ化します。
sudo a2ensite your_domainApache がインストールするデフォルトのウェブサイトを無効にしたい場合があります。カスタムドメイン名を使用していない場合、Apache がバーチャルホストのデフォルト設定を上書きするため、これは必須です。Apache のデフォルトのウェブサイトを無効にするには、次のコマンドを実行します。
sudo a2dissite 000-default構成ファイルに構文エラーが含まれていないことを確認するには、次のコマンドを実行します。
sudo apache2ctl configtest最後に、これらの変更を有効にするために Apache をリロードします。
sudo systemctl reload apache2次に、PHP がサーバーに適切にインストールされ、構成されていることをテストするための PHP スクリプトを作成します。.
ステップ5 – ウェブサーバー上でPHP処理をテストする
ウェブサイトのファイルとフォルダをホストするカスタムの場所ができたので、PHP テスト スクリプトを作成して、Apache が PHP ファイルの要求を処理できることを確認します。.
まず、カスタム Web ルート フォルダー内に info.php という新しいファイルを作成します。
nano /var/www/your_domain/info.php空のファイルが開きます。以下のテキスト(有効なPHPコード)をファイルに追加してください。
<?php
phpinfo();完了したら、ファイルを保存して閉じます。.
スクリプトをテストするには、Web ブラウザーでサーバーのドメイン名または IP アドレスにアクセスし、スクリプト名 (この場合は info.php) を入力します。
http://your_domain/info.phpデフォルトの PHP Web ページの例を次に示します。
このページでは、PHPの観点からサーバーの基本情報を提供します。デバッグや設定が正しく適用されているかの確認に役立ちます。.
ブラウザにこのページが表示されれば、PHP のインストールは期待どおりに動作しています。.
そのページでPHPサーバーに関する情報を確認した後、作成したファイルを削除するのが最善です。このファイルにはPHP環境とDebianサーバーに関する機密情報が含まれているためです。rmコマンドを使って削除できます。
sudo rm /var/www/your_domain/info.php情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。.
ステップ6 – PHPからのデータベース接続のテスト(オプション)
PHPがMariaDBに接続してデータベースクエリを実行できるかどうかをテストしたい場合は、テストデータを含むテストテーブルを作成し、PHPスクリプトからその内容に対してクエリを実行できます。ただし、これを行う前に、新しいMariaDBデータベースと、それにアクセスできるように適切に設定されたユーザーを作成する必要があります。.
まず、root アカウントを使用して MariaDB コンソールに接続します。
sudo mariadb新しいデータベースを作成するには、MariaDB コンソールから次のコマンドを実行します。
CREATE DATABASE example_database;
次に、新しいユーザーを作成し、作成したカスタム データベースに対する完全な権限を付与します。.
次のコマンドは、パスワード認証を行うexample_userという新しいユーザーを作成します。このユーザーのパスワードはpasswordと定義されていますが、この値は任意の安全なパスワードに置き換えてください。
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';次に、このユーザーに example_database データベースを使用する権限を付与します。
GRANT ALL ON example_database.* TO 'example_user'@'%';これにより、ユーザー 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)次に、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;次のような出力が得られます。
+---------+--------------------------+
| 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 スクリプトに追加し、example_user と password の値を独自の値に置き換えることを忘れないでください。
<?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 サイトのドメイン名またはパブリック IP アドレスに続けて /todo_list.php にアクセスすると、Web ブラウザーでこのページにアクセスできるようになります。
http://your_domain/todo_list.phpこの Web ページには、テスト テーブルに含めたコンテンツが訪問者に表示されます。
これは、PHP 環境が MariaDB サーバーに接続して対話する準備ができていることを意味します。.
結果
このガイドでは、Apache を Web サーバーとして、MariaDB をデータベース システムとして使用して、PHP Web サイトとアプリケーションを訪問者に配信するための柔軟な基盤を作成しました。.
次のステップとして、Webサーバーへの接続をHTTPSで安全に行う必要があります。Let's Encryptを利用できます。また、PHPで依存関係とパッケージを管理するためのComposerのインストールと使用方法については、こちらのガイドをご覧ください。.












