序章

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

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

前提条件

このチュートリアルを完了するには、ルート以外のsudo対応のユーザーアカウントと基本的なファイアウォールが構成されたUbuntu18.04サーバーが必要です。 これを設定するには、 Ubuntu18.04の初期サーバー設定ガイドに従ってください。

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

Apache Webサーバーは、動的なWebサイトをホストするためにPHPと一緒に使用できる人気のあるオープンソースWebサーバーです。 これは十分に文書化されており、Webの歴史の多くで広く使用されています。

まず、aptキャッシュが次のように更新されていることを確認します。

  1. sudo apt update

このセッションでsudoを初めて使用する場合は、アクセス許可を検証するために通常のユーザーのパスワードを入力するように求められます。

キャッシュが更新されたら、次のコマンドを使用してApacheをインストールできます。

  1. sudo apt install apache2

このコマンドを入力すると、aptは、インストールする予定のパッケージと、それらが使用する追加のディスク容量を通知します。 Yを押し、ENTERを押して確認すると、インストールが続行されます。

Webトラフィックを許可するようにファイアウォールを調整する

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

  1. sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

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

  1. sudo ufw app info "Apache Full"
Output
Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp

このサーバーの着信HTTPおよびHTTPSトラフィックを許可するには、次のコマンドを実行します。

  1. sudo ufw allow "Apache Full"

WebブラウザでサーバーのパブリックIPアドレスにアクセスすると、すぐにスポットチェックを実行して、すべてが計画どおりに行われたことを確認できます(この情報がない場合は、次の見出しの下にある注を参照して、パブリックIPアドレスを確認してください。すでに):

http://your_server_ip

情報提供とテストの目的で存在するデフォルトのUbuntu18.04ApacheWebページが表示されます。 次のようになります。

Ubuntu 18.04 Apache default

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

サーバーのパブリックIPアドレスを見つける方法

サーバーのパブリック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—MySQLをインストールする

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

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

  1. sudo apt install mysql-server

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

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

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

  1. sudo mysql_secure_installation

これにより、VALIDATE PASSWORD PLUGINを構成するかどうかを尋ねられます。

注:この機能を有効にすることは、判断の呼びかけのようなものです。 有効にすると、指定された基準に一致しないパスワードがMySQLによって拒否され、エラーが発生します。 これは、phpMyAdmin用のUbuntuパッケージなど、MySQLユーザー資格情報を自動的に構成するソフトウェアと組み合わせて弱いパスワードを使用する場合に問題を引き起こします。 検証を無効のままにしておくのは安全ですが、データベースの資格情報には常に強力で一意のパスワードを使用する必要があります。

Yと答えて「はい」と答えるか、有効にせずに続行するには他の何かを答えてください。

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

「はい」と答えると、パスワード検証のレベルを選択するように求められます。 最強のレベルで2と入力すると、数字、大文字と小文字、特殊文字を含まない、または一般的な辞書に基づくパスワードを設定しようとすると、エラーが発生することに注意してください。言葉。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

VALIDATE PASSWORD PLUGINの設定を選択したかどうかに関係なく、サーバーは次にMySQL rootユーザーのパスワードを選択して確認するように求めます。 これをシステムルートと混同しないでください。 データベースルートユーザーは、データベースシステムに対する完全な権限を持つ管理ユーザーです。 MySQLルートユーザーのデフォルトの認証方法ではパスワードの使用は不要ですが、パスワードが設定されている場合でも、追加の安全対策としてここで強力なパスワードを定義する必要があります。 これについては後で説明します。

パスワード検証を有効にしている場合は、入力したルートパスワードのパスワード強度が表示され、サーバーはそのパスワードを変更するかどうかを尋ねます。 現在のパスワードに満足している場合は、プロンプトで「いいえ」にNと入力します。

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

残りの質問については、Yを押し、各プロンプトでENTERキーを押してください。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートrootログインが無効になり、これらの新しいルールが読み込まれるため、MySQLは行った変更をすぐに尊重します。

終了したら、次のように入力してMySQLコンソールにログインできるかどうかをテストします。

  1. sudo mysql

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

Output
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

MySQLコンソールを終了するには、次のように入力します。

  1. exit

mysql_secure_installationスクリプトの実行時にパスワードを定義した場合でも、rootユーザーとして接続するためにパスワードを指定する必要がないことに注意してください。 これは、管理用MySQLユーザーのデフォルトの認証方法がpasswordではなくunix_socketであるためです。 これは最初はセキュリティ上の懸念のように見えるかもしれませんが、 root MySQLユーザーとしてログインできるユーザーは、コンソールまたは同じ権限で実行されているアプリケーションを介して。 つまり、実際には、管理データベースrootユーザーを使用してPHPアプリケーションから接続することはできません。 root MySQLアカウントのパスワードを設定すると、デフォルトの認証方法がunix_socketからpasswordに変更された場合の安全策として機能します。

セキュリティを強化するには、特にサーバーで複数のデータベースをホストする予定の場合は、データベースごとに拡張性の低い特権を持つ専用のユーザーアカウントを設定することをお勧めします。 MySQLユーザーを作成し、データベースアクセス権を構成する方法の詳細については、MySQLで新しいユーザーを作成してアクセス許可を付与する方法に関するガイドを参照してください。

これで、MySQLサーバーがインストールされ、保護されました。 次に、LAMPスタックの最後のコンポーネントであるPHPをインストールします。

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

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

もう一度、aptシステムを利用してPHPをインストールします。 phpパッケージに加えて、PHPをApacheに統合するためのlibapache2-mod-phpと、PHPがMySQLデータベースに接続できるようにするためのphp-mysqlパッケージも必要です。 次のコマンドを実行して、3つのパッケージすべてとそれらの依存関係をインストールします。

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

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

Apacheのディレクトリインデックスの変更(オプション)

場合によっては、ディレクトリが要求されたときにApacheがファイルを提供する方法を変更したいことがあります。 現在、ユーザーがサーバーにディレクトリを要求すると、Apacheは最初にindex.htmlというファイルを探します。 Apacheが最初にindex.phpファイルを検索するように、Webサーバーに他のファイルよりもPHPファイルを優先するように指示します。 そうしないと、アプリケーションのドキュメントルートに配置されたindex.htmlファイルが常にindex.phpファイルよりも優先されます。

この変更を行うには、選択したテキストエディタでdir.conf構成ファイルを開きます。 ここでは、nanoを使用します。

  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) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago Main PID: 3719 (apache2) Tasks: 55 (limit: 2361) CGroup: /system.slice/apache2.service ├─3719 /usr/sbin/apache2 -k start ├─3721 /usr/sbin/apache2 -k start └─3722 /usr/sbin/apache2 -k start Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server... Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Qを押して、このステータス出力を終了します。

PHP拡張機能のインストール(オプション)

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

  1. apt search php- | less

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

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

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 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 Ubuntu's default PHP version (currently 7.2). …

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

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

  1. sudo apt install php-cli

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

  1. sudo apt install package1 package2 ...

この時点で、LAMPスタックがインストールおよび構成されています。 他の作業を行う前に、サーバーの構成の詳細を保存できるApache仮想ホストをセットアップすることをお勧めします。

Apache Webサーバーを使用する場合、仮想ホスト(Nginxのサーバーブロックと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 your_domain というドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOceanDNSの概要を参照してください。

Ubuntu 18.04上のApacheでは、/var/www/htmlディレクトリからドキュメントを提供するように構成された1つのサーバーブロックがデフォルトで有効になっています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 /var/www/htmlを変更する代わりに、 your_domain サイトの/var/www内にディレクトリ構造を作成し、/var/www/htmlをデフォルトのディレクトリとして残します。クライアントリクエストが他のサイトと一致しません。

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

  1. sudo mkdir /var/www/your_domain

次に、$USER環境変数を使用してディレクトリの所有権を割り当てます。これは、現在ログに記録されているユーザーを参照します。

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

umask値を変更していない場合は、Webルートディレクトリのアクセス許可は正しいはずですが、次のように入力して確認できます。

  1. sudo chmod -R 755 /var/www/your_domain

次に、nanoまたはお気に入りのエディターを使用して、サンプルのindex.htmlページを作成します。

  1. nano /var/www/your_domain/index.html

内部に、次のサンプルHTMLを追加します。

/var/www/your_domain/index.html
<html>
    <head>
        <title>Welcome to Your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

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

Apacheがこのコンテンツを提供するには、正しいディレクティブを使用して仮想ホストファイルを作成する必要があります。 /etc/apache2/sites-available/000-default.confにあるデフォルトの構成ファイルを直接変更する代わりに、/etc/apache2/sites-available/your_domain.confに新しい構成ファイルを作成しましょう。

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

次の構成ブロックに貼り付けます。これはデフォルトに似ていますが、新しいディレクトリとドメイン名用に更新されています。

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DocumentRootを新しいディレクトリに更新し、ServerAdminyour_domainサイト管理者がアクセスできる電子メールに更新したことに注意してください。 また、2つのディレクティブを追加しました。この仮想ホスト定義に一致する必要があるベースドメインを確立するServerNameと、ベースであるかのように一致する必要があるさらなる名前を定義するServerAliasです。名前。

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

a2ensiteツールでファイルを有効にしましょう。

  1. sudo a2ensite your_domain.conf

000-default.confで定義されているデフォルトサイトを無効にします。

  1. sudo a2dissite 000-default.conf

次に、構成エラーをテストしましょう。

  1. sudo apache2ctl configtest

次の出力が表示されます。

Output
Syntax OK

Apacheを再起動して、変更を実装します。

  1. sudo systemctl restart apache2

これで、Apacheがドメイン名を提供するはずです。 これをテストするには、http://your_domainに移動します。ここで、次のように表示されます。

Apache virtual host example

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

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

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

次の手順を実行して、前の手順で作成したWebルートにファイルを作成します。

  1. sudo 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

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

Ubuntu 18.04 default PHP info

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

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

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

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

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

結論

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

次のステップとして、HTTPS経由でサービスを提供することにより、Webサーバーへの接続が保護されていることを確認する必要があります。 Let’s Encrypt でApacheを保護する方法に関するガイドに従って、無料のTLS/SSL証明書でサイトを保護します。

その他の人気のあるオプションは次のとおりです。