

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

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

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

**重要**  
これらの手順は AL2023 で使用するためのものです。Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションに LAMP ウェブサーバーを設定しようとすると、このチュートリアルの通りにはなりません。Ubuntu については、Ubuntu コミュニティドキュメントの [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP) を参照してください。その他のディストリビューションについては、それぞれのドキュメントを参照してください。

**Topics**
+ [

## ステップ 1: LAMP サーバーを準備する
](#prepare-lamp-server-2023)
+ [

## ステップ 2: LAMP サーバーをテストする
](#test-lamp-server-2023)
+ [

## ステップ 3: データベースサーバーをセキュリティで保護する
](#secure-mariadb-lamp-server-2023)
+ [

## ステップ 4: (オプション) phpMyAdmin をインストールする
](#install-phpmyadmin-lamp-server-2023)
+ [

## トラブルシューティング
](#lamp-troubleshooting-2023)
+ [

## 関連トピック
](#lamp-more-info-2023)

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

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

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

1. インスタンスに接続します。詳細については、「[AL2023 インスタンスへの接続](connecting-to-instances.md)」を参照してください。

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

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

   ```
   [ec2-user ~]$ sudo dnf upgrade -y
   ```

1. Apache ウェブサーバーの最新バージョンと AL2023 用の PHP パッケージをインストールします。

   ```
   [ec2-user ~]$ sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
   ```

1. MariaDB ソフトウェアパッケージをインストールします。**dnf install** コマンドを使用すると、複数のソフトウェアパッケージと関連するすべての依存関係を同時にインストールできます。

   ```
   [ec2-user ~]$ sudo dnf install mariadb105-server
   ```

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

   ```
   [ec2-user ~]$ sudo dnf info package_name
   ```

   例:

   ```
   [root@ip-172-31-25-170 ec2-user]# dnf info mariadb105
   Last metadata expiration check: 0:00:16 ago on Tue Feb 14 21:35:13 2023.
   Installed Packages
   Name         : mariadb105
   Epoch        : 3
   Version      : 10.5.16
   Release      : 1.amzn2023.0.6
   Architecture : x86_64
   Size         : 18 M
   Source       : mariadb105-10.5.16-1.amzn2023.0.6.src.rpm
   Repository   : @System
   From repo    : amazonlinux
   Summary      : A very fast and robust SQL database server
   URL          : http://mariadb.org
   License      : GPLv2 and LGPLv2
   Description  : MariaDB is a community developed fork from MySQL - a multi-user, multi-threaded
                : SQL database server. It is a client/server implementation consisting of
                : a server daemon (mariadbd) and many different client programs and libraries.
                : The base package contains the standard MariaDB/MySQL client programs and
                : utilities.
   ```

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. HTTP (ポート 80) 接続を許可するインバウンドルールがないときは、この時点でルールを追加する必要があります。セキュリティグループのリンクを選択します。「[Linux インスタンス用のインバウンドトラフィック承認](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)」の手順を使用して、次の値で新しいインバウンドセキュリティルールを追加します。
      + [**Type**]: HTTP
      + [**Protocol**]: TCP
      + **[Port Range**]: 80
      + [**Source**]: Custom

1. ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。`/var/www/html` にコンテンツがない場合は Apache テストページが表示され、このページには「**正常に動作しました**」と表示されます。

   インスタンスのパブリック DNS は、Amazon EC2 コンソールを使用して取得できます (**[パブリック IPv4 DNS]** 列を確認します。この列が表示されない場合は、**[設定]** (歯車のアイコン) をクリックし、**[パブリック IPv4 DNS]** を選択します)。

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

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

`ec2-user` アカウントがこのディレクトリで複数のファイルを操作することを許可するには、ディレクトリの所有権とアクセス許可を変更する必要があります。このタスクを行うには、複数の方法があります。このチュートリアルでは、`ec2-user` を `apache` グループに追加し、`/var/www` ディレクトリの所有権を `apache` グループに付与し、グループへの書き込み権限を割り当てます。<a name="setting-file-permissions-2023"></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 を有効にする方法については、「[チュートリアル: AL2023 に SSL/TLS を設定する](SSL-on-amazon-linux-2023.md)」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

   必要なパッケージのいずれかが出力に表示されていない場合は、**sudo yum install *package*** コマンドを使ってインストールします。

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

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

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

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

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

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

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

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

1. **mysql\$1secure\$1installation** を実行します。

   ```
   [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-2023"></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 インスタンスでのウェブサーバーの保護に関する一般的な情報については、「[チュートリアル: AL2023 に SSL/TLS を設定する](SSL-on-amazon-linux-2023.md)」を参照してください。

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

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

   ```
   [ec2-user ~]$ sudo dnf 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/al2023/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-2023"></a>

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

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

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

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

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

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

  インスタンスのセキュリティグループに、ポート 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-2023"></a>

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

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

  インスタンスのセキュリティグループに、ポート 443 で HTTPS トラフィックを許可するルールが含まれていることを確認します。詳細については、の「[インスタンス用のインバウンドトラフィックの承認](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)」を参照してください。

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

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

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

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