Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu18.04にインストールする方法
序章
「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
キャッシュが次のように更新されていることを確認します。
- sudo apt update
このセッションでsudo
を初めて使用する場合は、アクセス許可を検証するために通常のユーザーのパスワードを入力するように求められます。
キャッシュが更新されたら、次のコマンドを使用してApacheをインストールできます。
- sudo apt install apache2
このコマンドを入力すると、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 "Apache Full"
WebブラウザでサーバーのパブリックIPアドレスにアクセスすると、すぐにスポットチェックを実行して、すべてが計画どおりに行われたことを確認できます(この情報がない場合は、次の見出しの下にある注を参照して、パブリックIPアドレスを確認してください。すでに):
http://your_server_ip
情報提供とテストの目的で存在するデフォルトのUbuntu18.04ApacheWebページが表示されます。 次のようになります。
このページが表示されている場合は、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
注:この場合、コマンドの前にsudo apt update
を実行する必要はありません。 これは、Apacheをインストールするために上記のコマンドで最近実行したためです。 コンピュータのパッケージインデックスはすでに最新である必要があります。
このコマンドも、インストールされるパッケージのリストと、それらが使用するディスク容量を表示します。 Y
と入力して続行します。
インストールが完了したら、MySQLにプリインストールされている簡単なセキュリティスクリプトを実行します。これにより、いくつかの危険なデフォルトが削除され、データベースシステムへのアクセスがロックダウンされます。 次のコマンドを実行して、インタラクティブスクリプトを開始します。
- 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コンソールにログインできるかどうかをテストします。
- sudo mysql
これにより、管理データベースユーザー root としてMySQLサーバーに接続されます。これは、このコマンドの実行時にsudo
を使用することで推測されます。 次のような出力が表示されます。
OutputWelcome 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コンソールを終了するには、次のように入力します。
- 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つのパッケージすべてとそれらの依存関係をインストールします。
- 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
を使用します。
- sudo nano /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
仕様の後の最初の位置に移動します。
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
終了したら、CTRL+X
を押してファイルを保存して閉じます。 Y
と入力して保存を確認し、ENTER
を押してファイルの保存場所を確認します。
この後、変更が認識されるように、ApacheWebサーバーを再起動します。 次のコマンドでこれを行うことができます。
- sudo systemctl restart apache2
systemctl
を使用して、apache2
サービスのステータスを確認することもできます。
- 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
にパイプします。これは、他のコマンドの出力をスクロールできるページャーです。
- 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仮想ホストをセットアップすることをお勧めします。
手順4—仮想ホストの設定(推奨)
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のディレクトリを作成します。
- sudo mkdir /var/www/your_domain
次に、$USER
環境変数を使用してディレクトリの所有権を割り当てます。これは、現在ログに記録されているユーザーを参照します。
- sudo chown -R $USER:$USER /var/www/your_domain
umask値を変更していない場合は、Webルートディレクトリのアクセス許可は正しいはずですが、次のように入力して確認できます。
- sudo chmod -R 755 /var/www/your_domain
次に、nano
またはお気に入りのエディターを使用して、サンプルのindex.html
ページを作成します。
- nano /var/www/your_domain/index.html
内部に、次のサンプル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
次の構成ブロックに貼り付けます。これはデフォルトに似ていますが、新しいディレクトリとドメイン名用に更新されています。
<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
次の出力が表示されます。
OutputSyntax OK
Apacheを再起動して、変更を実装します。
- sudo systemctl restart apache2
これで、Apacheがドメイン名を提供するはずです。 これをテストするには、http://your_domain
に移動します。ここで、次のように表示されます。
これで、仮想ホストが完全にセットアップされました。 ただし、これ以上変更を加えたり、アプリケーションをデプロイしたりする前に、対処する必要のある問題がある場合に備えて、PHP構成を事前にテストしておくと役立ちます。
ステップ5—WebサーバーでのPHP処理のテスト
システムがPHP用に適切に構成されていることをテストするには、info.php
というPHPスクリプトを作成します。 Apacheがこのファイルを見つけて正しく提供するには、Webルートディレクトリに保存する必要があります。
次の手順を実行して、前の手順で作成したWebルートにファイルを作成します。
- sudo nano /var/www/your_domain/info.php
これにより、空のファイルが開きます。 ファイル内に、有効なPHPコードである次のテキストを追加します。
<?php
phpinfo();
終了したら、ファイルを保存して閉じます。
これで、WebサーバーがこのPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 これを試すには、Webブラウザでこのページにアクセスしてください。 サーバーのパブリックIPアドレスまたはドメイン名が再度必要になります。
訪問したいアドレスは次のとおりです。
http://your_domain/info.php
表示されるページは次のようになります。
このページでは、PHPの観点からサーバーに関する基本的な情報を提供します。 デバッグや、設定が正しく適用されていることを確認するのに役立ちます。
このページがブラウザに表示されている場合、PHPは期待どおりに機能しています。
このファイルは、許可されていないユーザーにサーバーに関する情報を実際に提供する可能性があるため、このテストの後で削除することをお勧めします。 これを行うには、次のコマンドを実行します。
- sudo rm /var/www/your_domain/info.php
後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。
結論
LAMPスタックがインストールされたので、次に何をするかについて多くの選択肢があります。 サーバーにほとんどの種類のWebサイトとWebソフトウェアをインストールできるプラットフォームをインストールしました。
次のステップとして、HTTPS経由でサービスを提供することにより、Webサーバーへの接続が保護されていることを確認する必要があります。 Let’s Encrypt でApacheを保護する方法に関するガイドに従って、無料のTLS/SSL証明書でサイトを保護します。
その他の人気のあるオプションは次のとおりです。
- インターネットで最も人気のあるコンテンツ管理システムであるWordpressをインストールします。
- PHPMyAdmin を設定して、WebブラウザからMySQLデータベースを管理できるようにします。
- SFTPを使用してサーバーとの間でファイルを転送する方法を学びます。