序章

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

このガイドでは、Debian9サーバーにLAMPスタックをインストールします。

前提条件

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

ステップ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 9にインストールすると、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

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

Debian 9 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サーバーが稼働しているので、MariaDBをインストールします。 MariaDBはデータベース管理システムです。 基本的に、それはあなたのサイトが情報を保存できるデータベースを整理し、データベースへのアクセスを提供します。

MariaDBは、コミュニティで構築されたMySQLのフォークです。 Debian9ではデフォルトのMySQLサーバーはMariaDB10.1であり、MySQLのインストールに通常使用されるmysql-serverパッケージは、実際にMariaDBをインストールする移行パッケージです。 ただし、プログラムの実際のパッケージmariadb-serverを使用してMariaDBをインストールすることをお勧めします。

ここでも、aptを使用して、このソフトウェアを入手してインストールします。

  1. sudo apt install mariadb-server

:この場合、コマンドの前にsudo apt updateを実行する必要はありません。 これは、Apacheをインストールするために上記のコマンドで最近実行したためであり、コンピューターのパッケージインデックスはすでに最新である必要があります。

このコマンドも、インストールされるパッケージのリストと、それらが使用するディスク容量を表示します。 Yと入力して続行します。

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

  1. sudo mysql_secure_installation

これにより、MariaDBインストールのセキュリティオプションにいくつかの変更を加えることができる一連のプロンプトが表示されます。 最初のプロンプトでは、現在のデータベースrootのパスワードを入力するように求められます。 これは、特権が強化されたMariaDBの管理アカウントです。 サーバー自体のrootアカウントに似ていると考えてください(ただし、現在構成しているのはMariaDB固有のアカウントです)。 MariaDBをインストールしたばかりで、まだ構成を変更していないため、このパスワードは空白になります。プロンプトでENTERを押すだけです。

次のプロンプトでは、データベースrootパスワードを設定するかどうかを尋ねられます。 Nと入力し、ENTERを押します。 Debianでは、MariaDBの root アカウントは自動システムメンテナンスと密接に関連しているため、そのアカウントに設定されている認証方法を変更しないでください。 そうすることで、管理者アカウントへのアクセスを削除することにより、パッケージの更新によってデータベースシステムが破壊される可能性があります。 後で、ソケット認証がユースケースに適していない場合に、パスワードアクセス用に追加の管理者アカウントをオプションで設定する方法について説明します。

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

Debianシステムへの新規インストールでは、 root MariaDBユーザーは、パスワードではなく、デフォルトでunix_socketプラグインを使用して認証するように設定されています。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)の管理者権限を許可する必要がある場合は、事態が複雑になる可能性もあります。

サーバーはログローテーションやサーバーの起動と停止などのタスクにrootアカウントを使用するため、rootアカウントの認証の詳細を変更しないことをお勧めします。 /etc/mysql/debian.cnfでアカウントのクレデンシャルを変更すると、最初は機能する可能性がありますが、パッケージの更新によってこれらの変更が上書きされる可能性があります。 パスワードベースのアクセスを設定する必要がある場合、パッケージメンテナは、 root アカウントを変更する代わりに、別の管理者アカウントを作成することをお勧めします。

そのために、 root アカウントと同じ機能を備えた、パスワード認証用に構成されたadminという新しいアカウントを作成します。 これを行うには、ターミナルからMariaDBプロンプトを開きます。

  1. sudo mariadb

これで、root権限とパスワードベースのアクセス権を持つ新しいユーザーを作成できます。 好みに合わせてユーザー名とパスワードを変更します。

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

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

  1. FLUSH PRIVILEGES;

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

  1. exit

これで、新しい管理ユーザーとしてデータベースにアクセスするときはいつでも、次のコマンドを使用して設定したパスワードでそのユーザーとして認証する必要があります。

  1. mariadb -u admin -p

この時点で、データベースシステムがセットアップされ、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>

終了したら、CTRL+Xを押してファイルを保存して閉じます。 Yと入力して保存を確認し、ENTERを押してファイルの保存場所を確認します。

この後、変更が認識されるように、ApacheWebサーバーを再起動します。 これを入力してこれを行います:

  1. sudo systemctl restart apache2

systemctlを使用して、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 Tue 2018-09-04 18:23:03 UTC; 9s ago Process: 22209 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS) Process: 22216 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 22221 (apache2) Tasks: 6 (limit: 4915) CGroup: /system.slice/apache2.service ├─22221 /usr/sbin/apache2 -k start ├─22222 /usr/sbin/apache2 -k start ├─22223 /usr/sbin/apache2 -k start ├─22224 /usr/sbin/apache2 -k start ├─22225 /usr/sbin/apache2 -k start └─22226 /usr/sbin/apache2 -k start

PHPの機能を強化するために、いくつかの追加モジュールをインストールするオプションがあります。 PHPモジュールとライブラリで使用可能なオプションを確認するには、apt searchの結果をlessにパイプします。これは、他のコマンドの出力をスクロールできるページャーです。

  1. apt search php- | less

矢印キーを使用して上下にスクロールし、Qを押して終了します。

結果は、インストールできるすべてのオプションのコンポーネントです。 それぞれについて簡単に説明します。

Output
Sorting... Full Text Search... bandwidthd-pgsql/stable 2.0.1+cvs20090917-10 amd64 Tracks usage of TCP/IP and builds html files with graphs bluefish/stable 2.2.9-1+b1 amd64 advanced Gtk+ text editor for web and software development cacti/stable 0.8.8h+ds1-10 all web interface for graphing of monitoring systems cakephp-scripts/stable 2.8.5-1 all rapid application development framework for PHP (scripts) ganglia-webfrontend/stable 3.6.1-3 all cluster monitoring toolkit - web front-end haserl/stable 0.9.35-2+b1 amd64 CGI scripting program for embedded environments kdevelop-php-docs/stable 5.0.3-1 all transitional package for kdevelop-php kdevelop-php-docs-l10n/stable 5.0.3-1 all transitional package for kdevelop-php-l10n … :

各モジュールの機能の詳細については、インターネットでモジュールの詳細を検索できます。 または、次のように入力して、パッケージの詳細な説明を確認します。

  1. apt show package_name

モジュールが提供する機能のより長い説明があるDescriptionと呼ばれる1つのフィールドで、多くの出力があります。

たとえば、php-cliモジュールの機能を確認するには、次のように入力します。

  1. apt show php-cli

他の大量の情報とともに、次のようなものが見つかります。

Output
… Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Debian's default PHP version (currently 7.0). …

調査の結果、パッケージをインストールすることにした場合は、他のソフトウェアの場合と同じようにapt installコマンドを使用してインストールできます。

php-cliが必要なものであると判断した場合は、次のように入力できます。

  1. sudo apt install php-cli

複数のモジュールをインストールする場合は、次のようにapt installコマンドに従って、スペースで区切って各モジュールを一覧表示します。

  1. sudo apt install package1 package2 ...

この時点で、LAMPスタックがインストールおよび構成されています。 ただし、これ以上変更を加えたり、アプリケーションをデプロイしたりする前に、対処する必要のある問題がある場合に備えて、PHP構成を事前にテストしておくと役立ちます。

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

システムがPHP用に適切に構成されていることをテストするには、info.phpという非常に基本的なPHPスクリプトを作成します。 Apacheがこのファイルを見つけて正しく提供するには、 webrootと呼ばれる非常に特定のディレクトリに保存する必要があります。

Debian 9では、このディレクトリは/var/www/html/にあります。 次のコマンドを実行して、その場所にファイルを作成します。

  1. sudo nano /var/www/html/info.php

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

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

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

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

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

http://your_server_ip/info.php

表示されるページは次のようになります。

Debian 9 default PHP info

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

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

このファイルは、許可されていないユーザーにサーバーに関する情報を実際に提供する可能性があるため、このテストの後で削除することをお勧めします。 これを行うには、次のコマンドを実行します。

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

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

結論

LAMPスタックがインストールされたので、次に何をするかについて多くの選択肢があります。 基本的に、サーバーにほとんどの種類のWebサイトとWebソフトウェアをインストールできるプラットフォームをインストールしました。