A previous version of this tutorial was written by Brennan Bearnes.

はじめに

「LAMP」スタックはオープンソース ソフトウェアのグループで、通常はサーバーでダイナミック Web サイトと Web アプリをホストできるよう一緒にインストールされます。 この用語は、実際には、Apache Web サーバーを備えた Linux オペレーティング システムを表す頭字語です。

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

前提条件

このチュートリアルを完了するには、非 root sudo 対応ユーザーアカウントおよび基本的なファイアウォールを備えた Ubuntu 18.04 サーバーを準備する必要があります。 これは、Ubuntu 18.04の初期サーバー設定ガイドを使用して設定することができます。

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

Apache Web サーバーは、世界で最も人気のある Web サーバーの 1 つです。

Ubuntuのパッケージマネージャ、apt:

  • sudo apt update
  • sudo apt install apache2

を使用してApacheをインストールします。これはsudoコマンドなので、これらの操作はルート権限で実行されます。

パスワードを入力すると、apt はインストールする予定のパッケージと、それらがどれくらいの余分なディスクスペースを取るかを教えてくれます。

Adjust the Firewall to Allow Web Traffic

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

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

プロファイルを見ると、ポート 80443 へのトラフィックを有効にしていることがわかるはずです:

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

このプロファイルに対して HTTP および HTTPS トラフィックの入力を許可する。

  • sudo ufw allow in "Apache Full"

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

http://your_server_ip

すると、Ubuntu 18.1 のデフォルトが表示されることでしょう。04のApacheウェブページが表示されますが、これは情報提供およびテスト用です。

Ubuntu 18.04 Apache default

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

How To Find your Server’s Public IP Address

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

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

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

これで 2、3 行が返されるはずです。 これらはすべて正しいアドレスですが、お使いのコンピュータはこれらのうちの1つしか使用できないかもしれませんので、自由にそれぞれを試してみてください。

別の方法として、curl ユーティリティを使って外部のパーティに連絡し、サーバがどう見られているかを教えてもらうという方法があります。 これは、特定のサーバーにあなたの IP アドレスが何であるかを問い合わせることで行われます。

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

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

ステップ 2 – MySQL

さて、Web サーバーを起動して実行したら、次は MySQL をインストールする番です。 MySQL はデータベース管理システムです。 基本的には、あなたのサイトが情報を保存できるデータベースを整理し、アクセスを提供します。

もう一度、apt を使用してこのソフトウェアを取得し、インストールします:

  • sudo apt install mysql-server

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

このコマンドも、インストールされるパッケージのリストと、それらが消費するディスクスペースを表示します。 インストールが完了したら、MySQL にプリインストールされている簡単なセキュリティ スクリプトを実行して、危険なデフォルトをいくつか削除し、データベース システムへのアクセスをロックダウンします。 対話型スクリプトを次のように実行することで開始します。 有効にすると、指定された基準に一致しないパスワードは、MySQL によってエラーで拒否されます。 これは、phpMyAdmin の Ubuntu パッケージなど、MySQL のユーザー認証を自動的に構成するソフトウェアと組み合わせて弱いパスワードを使用する場合に問題が発生します。 検証を無効にしたままでも安全ですが、データベースの資格情報には常に強力で固有のパスワードを使用する必要があります。

「はい」の場合は Y、有効にしないで続ける場合はその他の質問に答えます。 最強のレベルに 2 を入力した場合、数字、大文字、小文字、および特殊文字を含まないパスワード、または一般的な辞書の単語に基づいているパスワードを設定しようとすると、エラーが発生することに留意してください。

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

VALIDATE PASSWORD PLUGINを選択したかどうかに関係なく、サーバーは次に MySQL ルートユーザーのパスワードを選択および確認するよう求めます。 これは、MySQL の管理アカウントで、より大きな特権を持ちます。 これは、サーバー自体のルート アカウントに似ていると考えてください (ただし、今設定しているものは MySQL 固有のアカウントです)。 パスワード検証を有効にした場合、入力したルートパスワードのパスワード強度が表示され、サーバーはそのパスワードを変更するかどうかを尋ねます。 現在のパスワードでよければ、プロンプトで「no」にNを入力します:

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

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

Note that Ubuntu systems running MySQL 5.7 (and later versions), the root MySQL user is set to authenticate using the auth_socket plugin by default instead with the password. これにより、多くの場合、セキュリティとユーザビリティが向上しますが、外部プログラム (例 phpMyAdmin) がユーザーにアクセスできるようにする必要がある場合、事態が複雑になることがあります。

ルートとして MySQL に接続する際にパスワードを使用したい場合、認証方法を auth_socket から mysql_native_password に変更する必要があります。 これを行うには、ターミナルから MySQL プロンプトを開きます。

  • sudo mysql

次に、次のコマンドを使用して、各 MySQL ユーザー アカウントがどの認証方法を使用するかを確認します。 root アカウントがパスワードで認証されるように設定するには、次の ALTER USER コマンドを実行します。

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

それから FLUSH PRIVILEGES を実行し、グラント テーブルを再ロードして新しい変更を有効にするようにサーバーに指示します。

  • FLUSH PRIVILEGES;

各ユーザーが採用する認証方法を再度確認し、ルートが auth_socket プラグインを使用して認証されなくなったことを確認します:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | 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)

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

  • exit

この時点で、データベースシステムは設定され、LAMP スタックの最終コンポーネントである PHP のインストールに進むことができます。 スクリプトを実行し、MySQL データベースに接続して情報を取得し、処理されたコンテンツを表示するために Web サーバーに渡します。

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

ほとんどの場合、ディレクトリが要求されたときにApacheがファイルを提供する方法を変更したいと思うことでしょう。 現在、ユーザがサーバにディレクトリを要求すると、Apache はまず index.html という名前のファイルを探します。

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

  • sudo nano /etc/apache2/mods-enabled/dir.conf

それは以下のようになります:

/etc/apache2/mods-enabled/dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.Dir.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 を押してファイルの保存場所を確認します。

この後、変更を認識させるために Apache ウェブサーバを再起動します。

  • 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 モジュールやライブラリの利用可能なオプションを見るには、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 graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

各モジュールが何をするかについて詳しく知るには、インターネットでそのモジュールについての情報を検索するとよいでしょう。 あるいは、次のように入力してパッケージの長い説明を見ます:

  • apt show package_name

たくさんの出力がありますが、Description というフィールドがあり、そこにはモジュールが提供する機能についての長い説明が書かれています。

たとえば、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 package1 package2 ...

この時点で、LAMPスタックはインストールと設定が完了しています。 他のことをする前に、サーバの設定詳細を保存できるApacheバーチャルホストをセットアップすることをお勧めします。

ステップ 4 – バーチャル ホストの設定 (推奨)

Apache Web サーバーを使用する場合、バーチャル ホスト (Nginx のサーバー ブロックと同様) を使用して設定の詳細をカプセル化し、1 つのサーバーから複数のドメインをホストすることが可能です。 ここでは、your_domain というドメインを設定しますが、これを自分のドメイン名に置き換えてください。 DigitalOceanでのドメイン名の設定の詳細については、DigitalOcean DNSの紹介を参照してください。

Apache on Ubuntu 18.04 has one server block enabled by default that is configured to serve documents from the /var/www/html directory. これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合、扱いにくくなる可能性があります。 /var/www/html を変更する代わりに、 /var/www 内に your_domain サイト用のディレクトリ構造を作成し、 /var/www/html はクライアントからの要求が他のサイトにマッチしない場合に提供されるデフォルトのディレクトリとしてそのままにしておきましょう。

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

sudo mkdir /var/www/your_domain

次に、$USER 環境変数でディレクトリの所有権を割り当てます:

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

unmask値を変更していない場合、Web ルーツのパーミッションは正しいはずですが、タイプして確認することも可能です。

  • sudo chmod -R 755 /var/www/your_domain

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

  • 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 に新しいものを作りましょう。

  • 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 を新しいディレクトリ、ServerAdmin を your_domain サイト管理者がアクセスできるメールに更新したことに注意してください。 また、2つのディレクティブを追加しています。 ServerName はこのバーチャルホストの定義にマッチするベースドメインを確立し、 ServerAlias はベースネームであるかのようにマッチする更なる名前を定義しています。

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

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

  • sudo a2ensite your_domain.conf

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

  • sudo a2dissite 000-default.conf

次に、設定エラーがないかテストしてみましょう。

  • sudo apache2ctl configtest

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

Output
Syntax OK

変更を実装するために Apache を再起動します:

  • sudo systemctl restart apache2

現在、Apache はドメイン名を提供しているはずです。

Apache virtual host example

これで、バーチャルホストは完全にセットアップされました。 しかし、これ以上変更を加えたり、アプリケーションをデプロイする前に、対処すべき問題がある場合に備えて、PHP の設定を積極的にテストしておくとよいでしょう。

Step 5 – Web サーバー上での PHP 処理のテスト

システムが PHP に対して適切に設定されていることをテストするには、 info.php という非常に基本的な PHP スクリプトを作ってください。

前のステップで作成したWebルートに、

  • sudo nano /var/www/your_domain/info.php

を実行してファイルを作成すると、空のファイルが開かれます。

info.php
<?phpphpinfo();?>

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

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

アクセスしたいアドレスは次のとおりです:

http://your_domain/info.php

アクセスしたページは次のように見えるはずです:

Ubuntu 18.04 default PHP info

このページは PHP から見たサーバーについての基本情報を提供します。 デバッグや設定が正しく適用されていることを確認するのに便利です。

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

このファイルは実際に不正なユーザーにサーバーに関する情報を与える可能性があるので、テスト後はおそらく削除したいことでしょう。 これを行うには、次のコマンドを実行します。

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

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

まとめ

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

すぐにできる次のステップとして、Web サーバーへの接続が安全であることを確認し、HTTPS でサービスを提供する必要があります。

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

  • インターネット上で最も人気のあるコンテンツ管理システムである WordPress をインストールする。
  • PHPMyAdmin を設定して、Web ブラウザから MySQL データベースを管理する。
  • SFTP を使用してサーバーとファイルを転送する方法について学ぶ。