_このチュートリアルの以前のバージョンはhttps://www.digitalocean.com/community/users/bpb[Brennan Bearnes]によって作成されました。

前書き

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

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

前提条件

このチュートリアルを完了するには、ルート以外の `+ sudo +`対応のユーザーアカウントと基本的なファイアウォールを持つUbuntu 18.04サーバーが必要です。 これはhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04[Ubuntu 18.04の初期サーバーセットアップガイド]を使用して構成できます。

手順1-Apacheのインストールとファイアウォールの更新

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

Ubuntuのパッケージマネージャー、 `+ apt +`を使用してApacheをインストールします。

sudo apt update
sudo apt install apache2

これは「+ sudo +」コマンドであるため、これらの操作はルート権限で実行されます。 意図を確認するために、通常のユーザーのパスワードを求められます。

パスワードを入力すると、「+ apt 」はインストールする予定のパッケージとそれらが占有する追加ディスク容量を通知します。 ` Y `を押して ` ENTER +`を押して続行すると、インストールが続行されます。

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

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

sudo ufw app list
OutputAvailable applications:



 OpenSSH

「+ Apache Full 」プロファイルを見ると、ポート「+80」および「443」へのトラフィックが有効になっていることが示されます。

sudo ufw app info "Apache Full"
OutputProfile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:

このプロファイルの着信HTTPおよびHTTPSトラフィックを許可します。

sudo ufw allow in "Apache Full"

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

http://

デフォルトのUbuntu 18.04 Apache Webページが表示されます。これは、情報提供およびテスト目的で表示されます。 これは次のようになります。

image:http://assets.digitalocean.com/articles/how-to-install-lamp-ubuntu-18/small_apache_default_1804.png [Ubuntu 18.04 Apache default]

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

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

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

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

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

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

別の方法は、 `+ curl +`ユーティリティを使用して外部のパーティに連絡し、_it_がサーバーをどのように見ているかを伝えることです。 これは、特定のサーバーにあなたのIPアドレスを尋ねることによって行われます:

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

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

ステップ2-MySQLのインストール

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

繰り返しになりますが、 `+ apt +`を使用してこのソフトウェアを取得してインストールします。

sudo apt install mysql-server

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

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

sudo mysql_secure_installation

これは、 `+ VALIDATE PASSWORD PLUGIN`を設定するかどうかを尋ねます。

はいの場合は「+ 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:

`+ VALIDATE PASSWORD PLUGIN +`のセットアップを選択したかどうかに関係なく、サーバーは次にMySQL * root ユーザーのパスワードを選択して確認するように求めます。 これは、権限が強化されたMySQLの管理アカウントです。 サーバー自体の root *アカウントに似ていると考えてください(ただし、現在設定しているアカウントはMySQL固有のアカウントです)。 これが強力で一意のパスワードであることを確認し、空白のままにしないでください。

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

Using existing password for root.

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

残りの質問については、「+ Y 」を押して、各プロンプトで「 ENTER +」キーを押します。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールがロードされるため、MySQLは変更をすぐに反映します。

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、* root * MySQLユーザーはパスワードではなくデフォルトで `+ auth_socket +`プラグインを使用して認証するように設定されていることに注意してください。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)がユーザーにアクセスできるようにする必要がある場合にも事態が複雑になります。

  • root *としてMySQLに接続するときにパスワードを使用する場合、その認証方法を `+ auth_socket `から ` mysql_native_password +`に切り替える必要があります。 これを行うには、ターミナルからMySQLプロンプトを開きます。

sudo mysql

次に、次のコマンドを使用して、各MySQLユーザーアカウントが使用する認証方法を確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この例では、* root *ユーザーが実際に `+ auth_socket `プラグインを使用して認証していることがわかります。 パスワードで認証するように* root *アカウントを設定するには、次の ` ALTER USER`コマンドを実行します。 必ず `++`を選択した強力なパスワードに変更してください:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

次に、 `+ FLUSH PRIVILEGES +`を実行して、サーバーに許可テーブルをリロードし、新しい変更を有効にするように指示します。

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法を再度チェックして、* root *が `+ auth_socket +`プラグインを使用して認証を行っていないことを確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F |  | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

この出力例では、* root * MySQLユーザーがパスワードを使用して認証されていることがわかります。 自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

exit

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

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

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

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

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

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

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

これを行うには、次のコマンドを入力して、root権限でテキストエディターで `+ dir.conf`ファイルを開きます。

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

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

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
   DirectoryIndex  index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

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

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

sudo systemctl restart apache2

`+ systemctl `を使用して ` apache2 +`サービスのステータスを確認することもできます:

sudo systemctl status apache2
Sample Output● apache2.service - LSB: Apache2 web server
  Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
 Drop-In: /lib/systemd/system/apache2.service.d
          └─apache2-systemd.conf
  Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago
    Docs: man:systemd-sysv-generator(8)
 Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
 Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   Tasks: 6 (limit: 512)
  CGroup: /system.slice/apache2.service
          ├─13623 /usr/sbin/apache2 -k start
          ├─13626 /usr/sbin/apache2 -k start
          ├─13627 /usr/sbin/apache2 -k start
          ├─13628 /usr/sbin/apache2 -k start
          ├─13629 /usr/sbin/apache2 -k start
          └─13630 /usr/sbin/apache2 -k start

このステータス出力を終了するには、「+ Q +」を押します。

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

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
…
:

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

apt show

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

たとえば、 `+ php-cli +`モジュールが何をするかを調べるには、次のように入力できます。

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 +`が必要なものであると判断した場合は、次のように入力できます。

sudo apt install php-cli

複数のモジュールをインストールしたい場合は、次のように、 `+ apt install +`コマンドの後にスペースで区切って各モジュールをリストすることでそれを行うことができます:

sudo apt install

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

ステップ4-仮想ホストのセットアップ(推奨)

Apache Webサーバーを使用する場合、virtual hosts(Nginxのサーバーブロックに類似)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 * your_domain というドメインを設定しますが、これを*自分のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns [DigitalOcean DNSの紹介]をご覧ください。

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

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

sudo mkdir /var/www/

次に、 `+ $ USER +`環境変数を使用してディレクトリの所有権を割り当てます。

sudo chown -R $USER:$USER /var/www/

`+ unmask +`の値を変更していない場合、Webルートの権限は正しいはずですが、次のように入力して確認できます。

sudo chmod -R 755 /var/www/

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

nano /var/www//index.html

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

/var/www/your_domain/index.html

<html>
   <head>
       <title>Welcome to !</title>
   </head>
   <body>
       <h1>Success!  The  server block is working!</h1>
   </body>
</html>

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

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

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

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

/etc/apache2/sites-available/your_domain.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName
   ServerAlias
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

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

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

sudo a2ensite .conf

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

sudo a2dissite 000-default.conf

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

sudo apache2ctl configtest

次のような出力が表示されるはずです。

OutputSyntax OK

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

sudo systemctl restart apache2

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

image:https://assets.digitalocean.com/articles/apache_virtual_hosts_ubuntu/vhost_your_domain.png [Apache仮想ホストの例]

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

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

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

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

sudo nano /var/www//info.php

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

info.php

<?php
phpinfo();
?>

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

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

訪問するアドレスは次のとおりです。

http:///info.php

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

image:https://assets.digitalocean.com/articles/how-to-install-lamp-ubuntu-18/small_php_info_1804.png [Ubuntu 18.04デフォルトのPHP情報]

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

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

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

sudo rm /var/www//info.php

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

結論

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

次のステップとして、HTTPS経由でWebサーバーに接続することにより、Webサーバーへの接続が保護されていることを確認する必要があります。 ここで最も簡単なオプションは、https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04 [Let’s Encryptを使用]を保護することです無料のTLS / SSL証明書を持つサイト。

他の一般的なオプションは次のとおりです。