序章

「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をインストールします。

  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

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

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

WWW Fullプロファイルを調べると、ポート80および443へのトラフィックが有効になっていることがわかります。

  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ページが表示されます。 次のようになります。

Debian 10 Apache default

このページが表示されている場合は、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アドレスの取得に使用する方法に関係なく、Webブラウザのアドレスバーに入力して、デフォルトのApacheページを表示します。

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

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

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

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

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

  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ユーザーのデフォルトの認証方法がpasswordではなくunix_socketであるために機能します。 これは最初はセキュリティ上の懸念のように見えるかもしれませんが、 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ファイルを検索させます。

これを行うには、次のコマンドを入力して、root権限を持つテキストエディタで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+XYENTERの順に押して確認します。

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

  1. sudo systemctl reload apache2

systemctl statusを使用して、apache2サービスのステータスを確認できます。

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

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

次のように、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 [email protected]
    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を使用して、この仮想ホストを有効にできます。

  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テストスクリプトを作成します。

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

  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

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

Debian 10 default PHP info

このページでは、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

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

Example PHP todo list

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

結論

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

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