このチュートリアルの以前のバージョンは、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ページが表示されます。これは、情報提供およびテスト目的であります。 これは次のようになります。
このページが表示される場合、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;
各ユーザーが採用している認証方法をもう一度確認して、rootが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)
この出力例では、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
を新しいディレクトリに更新し、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構成を事前にテストしておくと役立ちます。
[[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
訪れるページは次のようになります。
このページは、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。