序章

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

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

前提条件

このチュートリアルを完了するには、ルート以外のUbuntu18.04サーバーが必要です。 sudo-有効なユーザーアカウントと構成された基本的なファイアウォール。 これを設定するには、 Ubuntu18.04の初期サーバー設定ガイドに従ってください。

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

Apache Webサーバーは、動的WebサイトをホストするためにPHPと一緒に使用できる人気のあるオープンソースWebサーバーです。 これは十分に文書化されており、Webの歴史の多くで広く使用されています。

まず、 apt キャッシュは次のように更新されます。

  1. sudo apt update

初めて使用する場合 sudo このセッションでは、権限を検証するために通常のユーザーのパスワードを入力するように求められます。

キャッシュが更新されたら、次のコマンドを使用してApacheをインストールできます。

  1. sudo apt install apache2

このコマンドを入力した後、 apt インストールする予定のパッケージと、それらが使用する追加のディスク容量が表示されます。 プレス Y とヒット ENTER 確認すると、インストールが続行されます。

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

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

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

あなたが見れば Apache Full プロファイルの詳細を見ると、ポートへのトラフィックが可能になっていることがわかります 80443:

  1. sudo ufw app info "Apache Full"
Output
Profile: 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トラフィックを許可するには、次のコマンドを実行します。

  1. sudo ufw allow "Apache Full"

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

http://your_server_ip

情報提供とテストの目的で存在するデフォルトのUbuntu18.04ApacheWebページが表示されます。 次のようになります。

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

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

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

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

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

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

別の方法は、 curl itがサーバーをどのように認識しているかを外部の関係者に問い合わせるユーティリティ。 これは、特定のサーバーにIPアドレスを尋ねることによって行われます。

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

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

ステップ2—MySQLをインストールする

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

繰り返しますが、 apt このソフトウェアを入手してインストールするには:

  1. sudo apt install mysql-server

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

このコマンドも、インストールされるパッケージのリストと、それらが使用するディスク容量を表示します。 入る Y 続ける。

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

  1. 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 各プロンプトでキーを押します。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールが読み込まれるため、MySQLは行った変更をすぐに尊重します。

終了したら、次のように入力してMySQLコンソールにログインできるかどうかをテストします。

  1. sudo mysql

これにより、管理データベースユーザー root としてMySQLサーバーに接続されます。これは、 sudo このコマンドを実行するとき。 次のような出力が表示されます。

Output
Welcome 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コンソールを終了するには、次のように入力します。

  1. exit

root ユーザーとして接続するためにパスワードを指定する必要はありませんでしたが、実行時にパスワードを定義したことに注意してください。 mysql_secure_installation 脚本。 これは、管理用MySQLユーザーのデフォルトの認証方法が unix_socket それ以外の password. これは最初はセキュリティ上の懸念のように見えるかもしれませんが、 root MySQLユーザーとしてログインできるユーザーは、コンソールまたは同じ権限で実行されているアプリケーションを介して。 つまり、実際には、管理データベースrootユーザーを使用してPHPアプリケーションから接続することはできません。 root MySQLアカウントのパスワードの設定は、デフォルトの認証方法がから変更された場合の安全策として機能します unix_socketpassword.

セキュリティを強化するには、特にサーバーで複数のデータベースをホストする予定の場合は、データベースごとに拡張性の低い特権を持つ専用のユーザーアカウントを設定することをお勧めします。 MySQLユーザーを作成し、データベースアクセス権を構成する方法の詳細については、MySQLで新しいユーザーを作成してアクセス許可を付与する方法に関するガイドを参照してください。

これで、MySQLサーバーがインストールされ、保護されました。 次に、LAMPスタックの最後のコンポーネントであるPHPをインストールします。

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

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

もう一度、 apt PHPをインストールするシステム。 に加えて php パッケージ、あなたも必要になります libapache2-mod-php PHPをApacheに統合し、 php-mysql PHPがMySQLデータベースに接続できるようにするパッケージ。 次のコマンドを実行して、3つのパッケージすべてとそれらの依存関係をインストールします。

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

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

Apacheのディレクトリインデックスの変更(オプション)

場合によっては、ディレクトリが要求されたときにApacheがファイルを提供する方法を変更したいことがあります。 現在、ユーザーがサーバーにディレクトリをリクエストすると、Apacheは最初に次のファイルを探します。 index.html. Apacheに検索させるために、他のファイルよりもPHPファイルを優先するようにWebサーバーに指示したいと思います。 index.php 最初にファイルします。 そうしないと、 index.html アプリケーションのドキュメントルートに配置されたファイルは、常に優先されます index.php ファイル。

この変更を行うには、 dir.conf 選択したテキストエディタの構成ファイル。 ここでは、 nano:

  1. 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.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 ファイルの保存場所を確認します。

この後、変更が認識されるように、ApacheWebサーバーを再起動します。 次のコマンドでこれを行うことができます。

  1. sudo systemctl restart apache2

の状態を確認することもできます apache2 を使用したサービス systemctl:

  1. 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、他のコマンドの出力をスクロールできるページャー:

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

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

  1. apt show package_name

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

たとえば、何を見つけるために php-cli モジュールはそうします、あなたはこれをタイプすることができます:

  1. 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 必要なものです。次のように入力できます。

  1. sudo apt install php-cli

複数のモジュールをインストールする場合は、次のようにスペースで区切って各モジュールをリストすることでインストールできます。 apt install 次のようなコマンド:

  1. sudo apt install package1 package2 ...

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

Apache Webサーバーを使用する場合、仮想ホスト(Nginxのサーバーブロックと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 your_domain というドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOceanDNSの概要を参照してください。

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

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

  1. sudo mkdir /var/www/your_domain

次に、ディレクトリの所有権を $USER 現在ログに記録されているユーザーを参照する環境変数:

  1. sudo chown -R $USER:$USER /var/www/your_domain

umask値を変更していない場合は、Webルートディレクトリのアクセス許可は正しいはずですが、次のように入力して確認できます。

  1. sudo chmod -R 755 /var/www/your_domain

次に、サンプルを作成します index.html 使用するページ nano またはお気に入りの編集者:

  1. 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:

  1. 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 道具:

  1. sudo a2ensite your_domain.conf

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

  1. sudo a2dissite 000-default.conf

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

  1. sudo apache2ctl configtest

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

Output
Syntax OK

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

  1. sudo systemctl restart apache2

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

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

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

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

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

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

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

/var/www/your_domain/info.php
<?php
phpinfo();

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

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

訪問したいアドレスは次のとおりです。

http://your_domain/info.php

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

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

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

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

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

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

結論

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

次のステップとして、HTTPS経由でサービスを提供することにより、Webサーバーへの接続が保護されていることを確認する必要があります。 Let’s Encrypt でApacheを保護する方法に関するガイドに従って、無料のTLS/SSL証明書でサイトを保護します。

その他の人気のあるオプションは次のとおりです。