

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: AL2 に LAMP サーバーをインストールする
<a name="ec2-lamp-amazon-linux-2"></a>

次の手順は、PHP と [MariaDB](https://mariadb.org/about/) (MySQL のコミュニティ開発フォーク) をサポートする Apache ウェブサーバーを AL2 インスタンス (LAMP ウェブサーバーまたは LAMP スタックと呼ばれることもあります) にインストールするのに役立ちます。このサーバーを使用して静的ウェブサイトをホストしたり、データベースとの情報の読み取りと書き込みを行う動的な PHP アプリケーションをデプロイしたりできます。

**重要**  
Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションに LAMP ウェブサーバーを設定しようとすると、このチュートリアルの通りにはなりません。AL2023 については、[AL2023 に LAMP サーバーをインストールする](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html)」を参照してください。Ubuntu については、Ubuntu コミュニティドキュメントの [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP) を参照してください。その他のディストリビューションについては、それぞれのドキュメントを参照してください。

**オプション: オートメーション を使用してこのチュートリアルを完了する**  
以下のタスクの代わりに AWS Systems Manager Automation を使用してこのチュートリアルを完了するには、[AWS Docs-InstallALAMPServer-AL2 Automation ](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2)ドキュメントを実行します。

**Topics**
+ [ステップ 1: LAMP サーバーを準備する](#prepare-lamp-server)
+ [ステップ 2: LAMP サーバーをテストする](#test-lamp-server)
+ [ステップ 3: データベースサーバーをセキュリティで保護する](#secure-mariadb-lamp-server)
+ [ステップ 4: (オプション) phpMyAdmin をインストールする](#install-phpmyadmin-lamp-server)
+ [トラブルシューティング](#lamp-troubleshooting)
+ [関連トピック](#lamp-more-info)

## ステップ 1: LAMP サーバーを準備する
<a name="prepare-lamp-server"></a>

**前提条件**
+ このチュートリアルでは、インターネットからアクセスできるパブリック DNS 名を持つ AL2 を使用して新しいインスタンスを既に起動していることを前提としています。詳細については、*Amazon EC2 ユーザーガイド* の [インスタンスの起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) を参照してください。また、セキュリティグループを設定して、SSH (ポート 22)、HTTP (ポート 80)、HTTPS (ポート 443) 接続を有効にしている必要もあります。これらの前提条件の詳細については、*Amazon EC2 ユーザーガイド*」の[「セキュリティグループルール](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html)」を参照してください。
+ 次の手順では、AL2 で利用可能な最新の PHP バージョンをインストールします。現在は です`php8.2`。このチュートリアルで説明されている以外の PHP アプリケーションを使用する場合は、`php8.2` と互換性を確認する必要があります。<a name="install_apache-2"></a>

**LAMP サーバーを準備するには**

1. [インスタンスに接続します](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)。

1. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。この処理には数分かかりますが、最新の更新とバグ修正を確実に適用することが重要です。

   `-y` オプションを指定すると、確認メッセージを表示せずに更新をインストールします。インストール前に更新を検査する場合は、このオプションを省略できます。

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. `mariadb10.5` Amazon Linux Extras リポジトリをインストールして、MariaDB パッケージの最新バージョンを取得します。

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   `sudo: amazon-linux-extras: command not found` というエラーが表示された場合、インスタンスは Amazon Linux 2 AMI で起動されていません (おそらく、代わりに Amazon Linux AMI を使用しています)。次のコマンドを使用して、Amazon Linux のバージョンを表示できます。

   ```
   cat /etc/system-release
   ```

1. `php8.2` Amazon Linux Extras リポジトリをインストールして、AL2 のPHPパッケージの最新バージョンを取得します。

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. これでインスタンスが最新状態になったので、Apache ウェブサーバー、MariaDB、および PHP ソフトウェアパッケージをインストールできます。yum インストールコマンドを使用すると、複数のソフトウェアパッケージと関連するすべての依存関係を同時にインストールできます。

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   次のコマンドを使用して、これらのパッケージの現在のバージョンを表示できます。

   ```
   yum info {{package_name}}
   ```

1. Apache ウェブサーバーを起動します。

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  **systemctl** コマンドを使用して、システムがブートするたびに Apache ウェブサーバーが起動するように設定します。

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   **httpd** が有効であることは、次のコマンドを実行して確認できます。

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. インバウンド HTTP (ポート 80) 接続をインスタンスに許可するセキュリティルールを追加していない場合には、このルールを追加します。デフォルトでは、起動時に [**launch-wizard-{{N}}**] セキュリティグループがインスタンスに設定されます。このグループには SSH 接続を許可する単一のルールが含まれます。

   1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

   1. [**インスタンス**] を選択し、該当するインスタンスを選択します。

   1. [**セキュリティ**] タブで、インバウンドルールを表示します。次のルールが表示されます。

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**警告**  
`0.0.0.0/0` を使用すると、すべての IPv4 アドレスからインスタンスへの、SSH によるアクセスが許可されます。これはテスト環境で短時間なら許容できますが、実稼働環境で行うのは安全ではありません。本番環境では、特定の IP アドレスまたは特定のアドレス範囲にのみ、インスタンスへのアクセスを限定します。

   1. セキュリティグループのリンクを選択します。[「セキュリティグループにルールを追加する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)」の手順を使用して、次の値を持つ新しいインバウンドセキュリティルールを追加します。
      + [**Type**]: HTTP
      + [**Protocol**]: TCP
      + **[Port Range**]: 80
      + [**Source**]: Custom

1. ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。`/var/www/html` にコンテンツがない場合、Apache テストページが表示されます。インスタンスのパブリック DNS は、Amazon EC2 コンソールを使用して取得できます ([**Public DNS**] 列を確認します。この列が表示されない場合は、[**Show/Hide Columns**] (歯車型のアイコン) をクリックして、[**Public DNS**] を選択します)。

   インスタンスのセキュリティグループに、ポート 80 での HTTP ラフィックを許可するルールが含まれていることを確認します。詳細については、「[セキュリティグループへのルールの追加](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)」を参照してください。
**重要**  
Amazon Linux を使用していない場合は、それらの接続を許可するようにインスタンスのファイアウォールを設定する必要があるかもしれません。ファイアウォールの設定方法の詳細については、ディストリビューション用のドキュメントを参照してください。  
![サーバーのテストでは、Apache テストページが表示されます。](http://docs.aws.amazon.com/ja_jp/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** は、Apache ドキュメントルートと呼ばれるディレクトリに維持されるファイルを提供します。Amazon Linux Apache ドキュメントルートは `/var/www/html` であり、デフォルトでは root によって所有されます。

`ec2-user` アカウントがこのディレクトリで複数のファイルを操作することを許可するには、ディレクトリの所有権とアクセス許可を変更する必要があります。このタスクを行うには、複数の方法があります。このチュートリアルでは、`ec2-user` を `apache` グループに追加し、`apache` ディレクトリの所有権を `/var/www` グループに付与し、グループへの書き込み権限を割り当てます。<a name="setting-file-permissions-2"></a>

**ファイルの許可を設定するには**

1. ユーザー (この場合は `ec2-user`) を `apache` グループに追加します。

   ```
   [ec2-user ~]$ sudo usermod -a -G apache {{ec2-user}}
   ```

1. ログアウトし、再度ログインして新しいグループを選択し、メンバーシップを確認します。

   1. ログアウトします (**exit** コマンドを使用するか、ターミナルウィンドウを閉じます)。

      ```
      [ec2-user ~]$ exit
      ```

   1. `apache` グループのメンバーシップを検証するには、インスタンスに再接続して次のコマンドを実行します。

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. `/var/www` とそのコンテンツのグループ所有権を `apache` グループに変更します。

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. グループの書き込み許可を追加して、これからのサブディレクトにグループ ID を設定するには、`/var/www` とサブディレクトのディレクトリ許可を変更します。

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. グループ書き込み許可を追加するには、`/var/www` とサブディレクトリのファイル許可を再帰的に変更します。

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

ここで、`ec2-user` (および `apache` グループの将来のメンバー) は、Apache ドキュメントルートでファイルを追加、削除、編集できるようになります。したがって、静的ウェブサイトや PHP アプリケーションなどのコンテンツを追加できます。

**ウェブサーバーを保護するには (オプション)**  
HTTP プロトコルを実行するウェブサーバーは、送受信したデータのトランスポートセキュリティを提供しません。ウェブブラウザを使用して HTTP サーバーに接続すると、閲覧した URL、受信したウェブページのコンテンツ、送信した HTML フォームの内容 (パスワードなど) はすべて、ネットワーク経路上のだれでも傍受できるようになります。ウェブサーバーを保護するためのベストプラクティスとして、SSL/TLS 暗号化でデータを保護する HTTPS (HTTP Secure) のサポートをインストールしてください。

サーバーで HTTPS を有効にする方法については、「[チュートリアル: AL2 で SSL/TLS を設定する](SSL-on-amazon-linux-2.md)」を参照してください。

## ステップ 2: LAMP サーバーをテストする
<a name="test-lamp-server"></a>

サーバーがインストールおよび実行されており、ファイルのアクセス許可が正しく設定されている場合、`ec2-user` アカウントは、インターネットから使用できる `/var/www/html` ディレクトリに PHP ファイルを作成できます。

**LAMP サーバーをテストするには**

1. Apache ドキュメントルートで PHP ファイルを作成します。

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   このコマンドを実行しようとしたときに「許可が拒否されました」というエラーが表示された場合は、ログアウトし、再度ログインして、[ファイルの許可を設定するには](#setting-file-permissions-2) で設定した正しいグループ許可を取得します。

1. ウェブブラウザで、作成したファイルの URL を入力します。この URL は、インスタンスのパブリック DNS アドレスにスラッシュとファイル名を追加したものです。次に例を示します。

   ```
   http://{{my.public.dns.amazonaws.com}}/phpinfo.php
   ```

   PHP 情報ページが表示されるはずです。  
![LAMP サーバーのテストでは、PHP 情報ページが表示されます。](http://docs.aws.amazon.com/ja_jp/linux/al2/ug/images/phpinfo7.2.10.png)

   このページが表示されない場合は、前のステップで `/var/www/html/phpinfo.php` ファイルが正しく作成されたことを確認します。次のコマンドで、必要なパッケージがすべてインストールされたことを確認することもできます。

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   必要なパッケージのいずれかが出力に表示されていない場合は、**sudo yum install {{package}}** コマンドを使ってインストールします。また、`php7.2` と `lamp-mariadb10.2-php7.2` のエキストラが **amazon-linux-extras** のコマンド出力で有効になっていることを確認してください。

1. `phpinfo.php` ファイルを削除します。これは有用な情報であることもありますが、セキュリティ上の理由から、インターネット上で公表しないでください。

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

これで、完全に機能する LAMP ウェブサーバーを設定しました。`/var/www/html` の Apache ドキュメントルートにコンテンツを追加する場合、そのコンテンツはインスタンスのパブリック DNS アドレスで表示できます。

## ステップ 3: データベースサーバーをセキュリティで保護する
<a name="secure-mariadb-lamp-server"></a>

MariaDB サーバーのデフォルトのインストールには、テストおよび開発に役立ついくつかの機能がありますが、実稼働サーバーでは無効にするか削除する必要があります。**mysql\_secure\_installation** コマンドを使用すると、ルートパスワードを設定し、安全でない機能をインストールから削除する手順が案内されます。MariaDB サーバーを使用する予定がない場合でも、この手順を実行することが推奨されます。<a name="securing-maria-db"></a>

**MariaDB サーバーをセキュリティで保護するには**

1. MariaDB サーバーを起動します。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. **mysql\_secure\_installation** を実行します。

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. プロンプトが表示されたら、ルートアカウントのパスワードを入力します。

      1. 現在のルートパスワードを入力します。デフォルトでは、ルートアカウントにはパスワードが設定されていません。Enter キーを押します。

      1. 「**Y**」と入力してパスワードを設定し、安全なパスワードを 2 回入力します。安全なパスワード作成の詳細については、「[https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/)」を参照してください。このパスワードは必ず安全な場所に保管します。

         MariaDB のルートパスワードの設定は、データベースを保護するための最も基本的な手段にすぎません。データベース駆動型アプリケーションを構築またはインストールする必要がある場合、通常はそのアプリケーションのデータベースサービスユーザーを作成します。ルートアカウントは、データベース管理以外には使用しないでください。

   1. 「**Y**」と入力して匿名ユーザーアカウントを削除します。

   1. 「**Y**」と入力してリモートルートログインを無効にします。

   1. 「**Y**」と入力してテストデータベースを削除します。

   1. 「**Y**」と入力して権限テーブルを再ロードし、変更を保存します。

1. (オプション) MariaDB サーバーをすぐに使用する予定がない場合は、これを停止します。再び必要になったときには再起動できます。

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (オプション) ブート時に毎回 MariaDB サーバーを起動させる場合は、次のコマンドを入力します。

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## ステップ 4: (オプション) phpMyAdmin をインストールする
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/) は、EC2 インスタンスで MySQL データベースを表示して編集するために使用できる、ウェブベースのデータベース管理ツールです。Amazon Linux インスタンスで `phpMyAdmin` をインストールして設定するには、以下の手順に従ってください。

**重要**  
Apache で SSL/TLS を有効にしていない場合、LAMP サーバーへのアクセスに `phpMyAdmin` を使用することは推奨されません。そのようにすると、データベース管理者のパスワードや他のデータは、インターネット上を安全ではない状態で送信されます。開発者によるセキュリティ関連の推奨事項については、「[Securing your phpMyAdmin installation](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation)」を参照してください。EC2 インスタンスでのウェブサーバーの保護に関する一般的な情報については、「[チュートリアル: AL2 で SSL/TLS を設定する](SSL-on-amazon-linux-2.md)」を参照してください。

**pMyAdmin をインストールするには**

1. 必要な依存ファイルをインストールします。

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Apache を再起動します。

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. `php-fpm` を再起動します。

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. `/var/www/html` で Apache ドキュメントルートに移動します。

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads) で最新の phpMyAdmin リリース用のソースパッケージを選択します。ファイルディレクトリをインスタンスにダウンロードするには、次の例のようにリンクをコピーして **wget** コマンドに貼り付けます。

   ```
   [ec2-user html]$ wget {{https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz}}
   ```

1. `phpMyAdmin` フォルダを作成し、次のコマンドでパッケージを展開します。

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf {{phpMyAdmin-latest-all-languages.tar.gz}} -C phpMyAdmin --strip-components 1
   ```

1. {{phpMyAdmin-latest-all-languages.tar.gz}} Tarball を削除します。

   ```
   [ec2-user html]$ rm {{phpMyAdmin-latest-all-languages.tar.gz}}
   ```

1.  (オプション) MySQL サーバーが実行中ではない場合は、今すぐ起動します。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. ウェブブラウザで、phpMyAdmin のインストール URL を入力します。この URL は、インスタンスのパブリック DNS アドレス (または、パブリック IP アドレス) にスラッシュとインストールディレクトリを追加してものです。次に例を示します。

   ```
   http://{{my.public.dns.amazonaws.com}}/phpMyAdmin
   ```

   phpMyAdmin ログインページが表示されます。  
![phpMyAdmin インストールの URL を入力すると、phpMyAdmin ログイン画面が表示されます。](http://docs.aws.amazon.com/ja_jp/linux/al2/ug/images/phpmyadmin_login.png)

1. 前に作成した `root` ユーザー名と MySQL のルートパスワードを使って、phpMyAdmin インストールにログインします。

   インストールは、サービス開始前に設定する必要があります。次の手順に従って、設定ファイルを手動で作成することから始めるのをお勧めします。

   1. 最小の設定ファイルから開始するには、お気に入りのテキストエディタを使用して新しいファイルを作成し、`config.sample.inc.php` の内容をそのファイルにコピーします。

   1. `index.php` を含む phpMyAdmin ディレクトリに、ファイルを `config.inc.php` として保存します。

   1. 追加のセットアップについては、phpMyAdmin のインストール手順の「[セットアップスクリプトの使用](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script)」セクションにある「ファイル作成後の手順」を参照してください。

    phpMyAdmin の使用に関する情報は、「[phpMyAdmin ユーザーガイド](http://docs.phpmyadmin.net/en/latest/user.html)」を参照してください。

## トラブルシューティング
<a name="lamp-troubleshooting"></a>

このセクションでは、新しい LAMP サーバーの設定時に発生する可能性がある一般的な問題の解決案を提供します。

### ウェブブラウザを使用してサーバーに接続できません。
<a name="is_apache_on"></a>

以下のチェックを行って、Apache ウェブサーバーが実行されていて、アクセス可能であるかどうかを確認します。
+ **ウェブサーバーが実行されていますか?**

  **httpd** が有効であることは、次のコマンドを実行して確認できます。

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  **httpd** プロセスが実行されていない場合は、[LAMP サーバーを準備するには](#install_apache-2) に記載されているステップを繰り返します。
+ **ファイアウォールは正しく設定されていますか?**

  インスタンスのセキュリティグループに、ポート 80 での HTTP ラフィックを許可するルールが含まれていることを確認します。詳細については、「[セキュリティグループへのルールの追加](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)」を参照してください。

### HTTPS を使用してサーバーに接続できない
<a name="is-https-enabled"></a>

以下のチェックを行って、Apache ウェブサーバーが HTTPS をサポートするように設定されているかどうかを確認します。
+ **ウェブサーバは正しく設定されていますか?**

  Apache をインストールすると、サーバーは HTTP トラフィック用に設定されます。HTTPS をサポートするには、サーバーで TLS を有効にし、SSL 証明書をインストールします。詳細については、「[チュートリアル: AL2 で SSL/TLS を設定する](SSL-on-amazon-linux-2.md)」を参照してください。
+ **ファイアウォールは正しく設定されていますか?**

  インスタンスのセキュリティグループに、ポート 443 で HTTPS トラフィックを許可するルールが含まれていることを確認します。詳細については、[「セキュリティグループにルールを追加する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)」を参照してください。

## 関連トピック
<a name="lamp-more-info"></a>

インスタンスへのファイルの転送、またはウェブサーバーへの WordPress ブログのインストールの詳細については、次のドキュメントを参照してください。
+ [を使用して Linux インスタンスにファイルを転送するWinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP)。
+ [SCP クライアントを使用して Linux インスタンスにファイルを転送する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp)。
+ [チュートリアル: AL2 で WordPress ブログをホストする](hosting-wordpress.md)

このチュートリアルで使用されているコマンドおよびソフトウェアの詳細については、次のウェブページを参照してください。
+ Apache ウェブサーバー: [http://httpd.apache.org/](http://httpd.apache.org/)
+ MariaDB データベースサーバー: [https://mariadb.org/](https://mariadb.org/)
+ PHP プログラミング言語: [http://php.net/](http://php.net/)
+ `chmod` コマンド: [https://en.wikipedia.org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ `chown` コマンド: [https://en.wikipedia.org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

ウェブサーバーのドメイン名の登録、または、既存のドメイン名をこのホストに移す方法についての詳細は、『*Amazon Route 53 デベロッパーガイド*』の「[Amazon Route 53 のドメインとサブドメインの作成と移行](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html)」を参照してください。