開発者ドキュメント

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

序章

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

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

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

前提条件

このチュートリアルを完了するには、ルート以外のDebian10サーバーが必要です。 sudo-有効なユーザーアカウントと基本的なファイアウォール。 これは、Debian10初期サーバーセットアップガイドを使用して構成できます。

ステップ1—Apacheのインストールとファイアウォールの更新

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

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

  1. sudo apt update
  2. sudo apt install apache2

これは sudo コマンドの場合、これらの操作はroot権限で実行されます。 それはあなたの意図を確認するためにあなたの通常のユーザーのパスワードを尋ねます。

パスワードを入力したら、 apt インストールする予定のパッケージと、それらが使用する追加のディスク容量が表示されます。 プレス Y とヒット ENTER 続行すると、インストールが続行されます。

次に、 UFWファイアウォールをインストールして有効にすることでサーバーの初期設定手順に従ったと仮定して、ファイアウォールがHTTPおよびHTTPSトラフィックを許可していることを確認します。

Debian 10にインストールすると、UFWにはファイアウォール設定を微調整するために使用できるアプリプロファイルがロードされます。 次のコマンドを実行して、アプリケーションプロファイルの完全なリストを表示します。

  1. sudo ufw app list

The WWW プロファイルは、Webサーバーが使用するポートを管理するために使用されます。

Output
Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

あなたが検査する場合 WWW Full プロファイル、それはそれがポートへのトラフィックを可能にすることを示しています 80443:

  1. 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トラフィックを許可します。

  1. sudo ufw allow in "WWW Full"

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

http://your_server_ip

情報提供とテストの目的でそこにあるデフォルトのDebian10ApacheWebページが表示されます。 次のようになります。

このページが表示されている場合は、Webサーバーが正しくインストールされ、ファイアウォールを介してアクセスできるようになっています。

サーバーのパブリックIPアドレスがわからない場合は、いくつかの方法で見つけることができます。 通常、これはSSH経由でサーバーに接続するために使用するアドレスです。

コマンドラインからこれを行うには、いくつかの異なる方法があります。 まず、あなたは使用することができます iproute2 次のように入力してIPアドレスを取得するツール:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

これにより、2行または3行戻ります。 これらはすべて正しいアドレスですが、コンピュータで使用できるのは1つだけである可能性があるため、それぞれを試してみてください。

別の方法は、 curl itがサーバーをどのように認識しているかを外部の関係者に問い合わせるユーティリティ。 これは、特定のサーバーにIPアドレスを尋ねることによって行われます。

  1. sudo apt install curl
  2. curl http://icanhazip.com

IPアドレスの取得に使用する方法に関係なく、IPアドレスをWebブラウザのアドレスバーに入力して、デフォルトのApacheページを表示します。

ステップ2—MariaDBをインストールする

Webサーバーが稼働しているので、サイトのデータを保存および管理できるようにデータベースシステムをインストールする必要があります。

Debian10ではメタパッケージ mysql-server、従来はMySQLサーバーのインストールに使用されていましたが、 default-mysql-server. このメタパッケージは、Oracleによる元のMySQLサーバーのコミュニティフォークである MariaDB を参照し、現在、Debianベースのパッケージマネージャーリポジトリで使用可能なデフォルトのMySQL互換データベースサーバーです。

ただし、長期的な互換性のために、メタパッケージを使用する代わりに、プログラムの実際のパッケージを使用してMariaDBをインストールすることをお勧めします。 mariadb-server.

このソフトウェアをインストールするには、以下を実行します。

  1. sudo apt install mariadb-server

インストールが完了したら、MariaDBにプリインストールされているセキュリティスクリプトを実行することをお勧めします。 このスクリプトは、いくつかの安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。 次のコマンドを実行して、インタラクティブスクリプトを開始します。

  1. sudo mysql_secure_installation

このスクリプトは、MariaDBの設定にいくつかの変更を加えることができる一連のプロンプトを表示します。 最初のプロンプトでは、現在のデータベースルートパスワードを入力するように求められます。 これをシステムルートと混同しないでください。 データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 MariaDBをインストールしたばかりで、まだ構成を変更していないため、このパスワードは空白になります。を押すだけです。 ENTER プロンプトで。

次のプロンプトでは、データベースルートパスワードを設定するかどうかを尋ねられます。 MariaDBは、 root ユーザーに対して、通常はパスワードを使用するよりも安全な特別な認証方法を使用するため、ここでこれを設定する必要はありません。 タイプ N 次にを押します ENTER.

そこから、を押すことができます Y その後 ENTER 後続のすべての質問のデフォルトを受け入れます。 これにより、匿名ユーザーとテストデータベースが削除され、リモート root ログインが無効になり、これらの新しいルールが読み込まれるため、MariaDBは行った変更をすぐに尊重します。 終了したら、次のように入力してMariaDBコンソールにログインします。

  1. sudo mariadb

これにより、管理データベースユーザー root としてMariaDBサーバーに接続されます。これは、 sudo このコマンドを実行するとき。 次のような出力が表示されます。

Output
Welcome 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管理ユーザーのデフォルトの認証方法が unix_socket それ以外の password. これは最初はセキュリティ上の懸念のように見えるかもしれませんが、 root MariaDBユーザーとしてログインできるユーザーは、コンソールまたは同じ権限で実行されているアプリケーションを介して。 つまり、実際には、管理データベースrootユーザーを使用してPHPアプリケーションから接続することはできません。

セキュリティを強化するには、特にサーバーで複数のデータベースをホストする予定の場合は、データベースごとに拡張性の低い特権を持つ専用のユーザーアカウントを設定することをお勧めします。 このような設定を示すために、example_databaseという名前のデータベースとexample_userという名前のユーザーを作成しますが、これらの名前を別の値に置き換えることができます。 新しいデータベースを作成するには、MariaDBコンソールから次のコマンドを実行します。

  1. CREATE DATABASE example_database;

これで、新しいユーザーを作成し、作成したカスタムデータベースに対する完全な権限をユーザーに付与できます。 次のコマンドは、このユーザーのパスワードを次のように定義します。 password、ただし、この値は、自分で選択した安全なパスワードに置き換える必要があります。

  1. GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

これにより、 example_userユーザーにexample_database データベースに対する完全な権限が与えられ、このユーザーがサーバー上で他のデータベースを作成または変更することはできなくなります。

特権をフラッシュして、現在のセッションで保存され、使用可能であることを確認します。

  1. FLUSH PRIVILEGES;

これに続いて、MariaDBシェルを終了します。

  1. exit

今回はカスタムユーザークレデンシャルを使用して、MariaDBコンソールに再度ログインすることにより、新しいユーザーが適切な権限を持っているかどうかをテストできます。

  1. mariadb -u example_user -p

に注意してください -p このコマンドのフラグ。example_userユーザーの作成時に使用されるパスワードの入力を求められます。 MariaDBコンソールにログインした後、example_databaseデータベースにアクセスできることを確認します。

  1. SHOW DATABASES;

これにより、次の出力が得られます。

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

MariaDBシェルを終了するには、次のように入力します。

  1. exit

この時点で、データベースシステムがセットアップされ、LAMPスタックの最後のコンポーネントであるPHPのインストールに進むことができます。

ステップ3—PHPのインストール

PHPは、動的コンテンツを表示するコードを処理するセットアップのコンポーネントです。 スクリプトを実行し、MariaDBデータベースに接続して情報を取得し、処理されたコンテンツをWebサーバーに渡して表示することができます。

もう一度、 apt PHPをインストールするシステム。 さらに、PHPコードがApacheサーバーで実行され、MariaDBデータベースと通信できるようにするヘルパーパッケージをいくつか含めます。

  1. sudo apt install php libapache2-mod-php php-mysql

これにより、問題なくPHPがインストールされます。 これをすぐにテストします。

ほとんどの場合、Apacheがファイルを提供する方法を変更する必要があります。 現在、ユーザーがサーバーにディレクトリをリクエストすると、Apacheは最初に次のファイルを探します。 index.html. Webサーバーに他のファイルよりもPHPファイルを優先するように指示したいので、Apacheに index.php 最初にファイルします。

これを行うには、次のコマンドを入力して、 dir.conf ルート権限を持つテキストエディタのファイル:

  1. 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.php index.xhtml index.htm
</IfModule>

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

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

終了したら、ファイルを保存して閉じます。 使用している場合 nano、を押すことでそれを行うことができます CTRL+X、 それから YENTER 確認するために。

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

  1. sudo systemctl reload apache2

の状態を確認できます apache2 とのサービス systemctl status:

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

その後、内にディレクトリ構造を作成します /var/www your_domainという名前のWebサイトの例。

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

  1. sudo mkdir /var/www/your_domain

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

  1. sudo chown -R $USER:$USER /var/www/your_domain

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

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

これにより、新しい空白のファイルが作成されます。 次の必要最低限の構成で貼り付けます。

/ etc / apache2 / sites-available / your_domain
<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にサービスを提供するように指示しています your_domain を使用して /var/www/your_domain Webルートディレクトリとして。 ドメイン名なしでApacheをテストしたい場合は、オプションを削除またはコメントアウトできます ServerNameServerAlias 追加することによって # 各オプションの行の先頭にある文字。

これで使用できます a2ensite この仮想ホストを有効にするには:

  1. sudo a2ensite your_domain

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

  1. sudo a2dissite 000-default

構成ファイルに構文エラーが含まれていないことを確認するには、次のコマンドを実行します。

  1. sudo apache2ctl configtest

最後に、Apacheをリロードして、これらの変更を有効にします。

  1. sudo systemctl reload apache2

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

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

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

名前の付いた新しいファイルを作成します info.php カスタムWebルートフォルダ内:

  1. nano /var/www/your_domain/info.php

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

/var/www/your_domain/info.php
<?php
phpinfo();

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

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

訪問したいアドレスは次のとおりです。

http://your_domain/info.php

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

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

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

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

  1. sudo rm /var/www/your_domain/info.php

後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。

ステップ6— PHPからのデータベース接続のテスト(オプション)

PHPがMariaDBに接続してデータベースクエリを実行できるかどうかをテストする場合は、ダミーデータを使用してテストテーブルを作成し、PHPスクリプトからその内容をクエリできます。

まず、このガイドのステップ2で作成したデータベースユーザーを使用してMariaDBコンソールに接続します。

  1. mariadb -u example_user -p

todo_listという名前のテーブルを作成します。 MariaDBコンソールから、次のステートメントを実行します。

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

次に、テストテーブルに数行のコンテンツを挿入します。 異なる値を使用して、次のコマンドを数回繰り返すことをお勧めします。

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

データがテーブルに正常に保存されたことを確認するには、次のコマンドを実行します。

  1. 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コンソールを終了できます。

  1. exit

これで、MariaDBに接続してコンテンツをクエリするPHPスクリプトを作成できます。 好みのエディタを使用して、カスタムWebルートディレクトリに新しいPHPファイルを作成します。 使用します nano そのために:

  1. nano /var/www/your_domain/todo_list.php

次のPHPスクリプトは、MariaDBデータベースに接続し、 todo_list テーブルのコンテンツを照会して、結果をリストに表示します。 データベース接続に問題がある場合は、例外がスローされます。 このコンテンツをあなたの todo_list.php 脚本:

/var/www/your_domain/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サーバーに接続して対話する準備ができていることを意味します。

結論

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

現在の設定をさらに改善するために、PHPでの依存関係とパッケージ管理のためにComposer インストールできます。また、 Let’sEncryptを使用してWebサイトのOpenSSL証明書をインストールすることもできます。

モバイルバージョンを終了