Ubuntu 18.04にLinux、Apache、MySQL、PHP(LAMP)スタックをインストールする方法

このチュートリアルの以前のバージョンは、Brennan Bearnesによって作成されました。

前書き

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

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

前提条件

このチュートリアルを完了するには、root以外のsudoが有効なユーザーアカウントと基本的なファイアウォールを備えたUbuntu18.04サーバーが必要です。 これは、initial server setup guide for Ubuntu 18.04を使用して構成できます。

[[step-1 -—- installing-apache-and-updating-the-firewall]] ==ステップ1—Apacheのインストールとファイアウォールの更新

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

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

sudo apt update
sudo apt install apache2

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

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

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

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

sudo ufw app list
OutputAvailable applications:
  Apache
  Apache Full
  Apache Secure
  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:
  80,443/tcp

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

sudo ufw allow in "Apache Full"

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

http://your_server_ip

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

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ページを表示します。

[[step-2 -—- installing-mysql]] ==ステップ2—MySQLのインストール

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

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

sudo apt install mysql-server

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

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

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

sudo mysql_secure_installation

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

[.note]#Note:この機能を有効にすることは、判断の呼びかけのようなものです。 有効にすると、指定された基準に一致しないパスワードが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を設定することを選択したかどうかに関係なく、サーバーは次にMySQLrootユーザーのパスワードを選択して確認するように要求します。 これは、権限が強化された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キーを押します。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールがロードされるため、MySQLは変更内容をすぐに尊重します。

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

MySQLにrootとして接続するときにパスワードを使用する場合は、認証方法を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コマンドを実行します。 必ずpasswordを選択した強力なパスワードに変更してください。

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

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

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法をもう一度確認して、rootauth_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)

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

exit

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

[[step-3 -—- installing-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というファイルを探します。 Webサーバーに他のファイルよりもPHPファイルを優先するように指示したいので、Apacheに最初にindex.phpファイルを検索させます。

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

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

これは次のようになります。

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


    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

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

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


    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

終了したら、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 package_name

モジュールが提供する機能のより長い説明がある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 package1 package2 ...

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

[[step-4 -—- setting-up-virtual-hosts-recommended]] ==ステップ4—仮想ホストの設定(推奨)

Apache Webサーバーを使用する場合、virtual hosts(Nginxのサーバーブロックと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 your_domainというドメインを設定しますが、replace this with your own domain nameを設定する必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、Introduction to DigitalOcean DNSを参照してください。

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

次のように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


    
        Welcome to Your_domain!
    
    
        

Success! The your_domain server block is working!

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

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


    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

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

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

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

sudo a2ensite your_domain.conf

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

sudo a2dissite 000-default.conf

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

sudo apache2ctl configtest

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

OutputSyntax OK

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

sudo systemctl restart apache2

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

Apache virtual host example

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

[[step-5 -—- testing-php-processing-on-your-web-server]] ==ステップ5—WebサーバーでのPHP処理のテスト

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

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

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

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

info.php

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

これで、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ソフトウェアをインストールできるプラットフォームをインストールしました。

次のステップとして、HTTPS経由でWebサーバーに接続することにより、Webサーバーへの接続が保護されていることを確認する必要があります。 ここでの最も簡単なオプションは、use Let’s Encryptを使用して、無料のTLS / SSL証明書でサイトを保護することです。

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

  • Install Wordpressは、インターネット上で最も人気のあるコンテンツ管理システムです。

  • Set Up PHPMyAdminは、WebブラウザからMySQLデータベースを管理するのに役立ちます。

  • サーバーとの間でファイルを転送するためのLearn how to use SFTP

Related