Amazon Linux 2 での LAMP のインストール - Amazon Elastic Compute Cloud

Amazon Linux 2 での LAMP のインストール

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

重要

Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションに LAMP ウェブサーバーを設定しようとすると、このチュートリアルの通りにはなりません。Amazon Linux AMI については、「Amazon Linux への LAMP のインストール」を参照してください。Ubuntu については、Ubuntu コミュニティドキュメントの ApacheMySQLPHP を参照してください。その他のディストリビューションについては、それぞれのドキュメントを参照してください。

オプション: オートメーション を使用してこのチュートリアルを完了する

以下のタスクを行う代わりに AWS Systems Manager オートメーションを使用してこのチュートリアルを完了するには、オートメーションドキュメントである AWSDocs-InstallALAMPServer-AL2 を実行します。

ステップ 1: LAMP サーバーを準備する

前提条件
  • このチュートリアルでは、インターネットからアクセス可能なパブリック DNS 名を持つ、Amazon Linux 2 を使用する新しいインスタンスをすでに起動していることを前提にしています。詳細については、「ステップ 1: インスタンスを起動する」を参照してください。また、セキュリティグループを設定して、SSH (ポート 22)、HTTP (ポート 80)、HTTPS (ポート 443) 接続を有効にしている必要もあります。前提条件の詳細については、Linux インスタンス用のインバウンドトラフィックの承認 を参照してください。

  • 次の手順により、Amazon Linux 2 で利用可能な最新の PHP バージョンがインストールされます。現在のバージョンは php8.2 です。このチュートリアルで説明されている以外の PHP アプリケーションを使用する場合は、php8.2 と互換性を確認する必要があります。

LAMP サーバーを準備するには
  1. インスタンスに接続します

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

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

    [ec2-user ~]$ sudo yum update -y
  3. 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
  4. php8.2 Amazon Linux Extras リポジトリをインストールして、Amazon Linux 2 向け PHP パッケージの最新バージョンを取得します。

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

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

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

    yum info package_name
  6. Apache ウェブサーバーを起動します。

    [ec2-user ~]$ sudo systemctl start httpd
  7. systemctl コマンドを使用して、システムがブートするたびに Apache ウェブサーバーが起動するように設定します。

    [ec2-user ~]$ sudo systemctl enable httpd

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

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

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

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

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

      Port range Protocol Source 22 tcp 0.0.0.0/0
      警告

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

    4. セキュリティグループのリンクを選択します。「セキュリティグループへのルールの追加」の手順を使用して、次の値で新しいインバウンドセキュリティルールを追加します。

      • [Type]: HTTP

      • [Protocol]: TCP

      • [Port Range]: 80

      • [Source]: Custom

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

    インスタンスのセキュリティグループに、ポート 80 での HTTP ラフィックを許可するルールが含まれていることを確認します。詳細については、「セキュリティグループへのルールの追加」を参照してください。

    重要

    Amazon Linux を使用していない場合は、それらの接続を許可するようにインスタンスのファイアウォールを設定する必要があるかもしれません。ファイアウォールの設定方法の詳細については、ディストリビューション用のドキュメントを参照してください。

    
                        Apache テストページ

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

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

ファイルの許可を設定するには
  1. ユーザー (この場合は ec2-user) を apache グループに追加します。

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. ログアウトし、再度ログインして新しいグループを選択し、メンバーシップを確認します。

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

      [ec2-user ~]$ exit
    2. apache グループのメンバーシップを検証するには、インスタンスに再接続して次のコマンドを実行します。

      [ec2-user ~]$ groups ec2-user adm wheel apache systemd-journal
  3. /var/www とそのコンテンツのグループ所有権を apache グループに変更します。

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. グループの書き込み許可を追加して、これからのサブディレクトにグループ ID を設定するには、/var/www とサブディレクトのディレクトリ許可を変更します。

    [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
  5. グループ書き込み許可を追加するには、/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 を有効にする方法については、「Amazon Linux 2 での SSL/TLS の設定」を参照してください。

ステップ 2: LAMP サーバーをテストする

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

LAMP サーバーをテストするには
  1. Apache ドキュメントルートで PHP ファイルを作成します。

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

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

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

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

    PHP 情報ページが表示されるはずです。

    
                        PHP 情報ページ。

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

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

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

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

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

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

ステップ 3: データベースサーバーをセキュリティで保護する

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

MariaDB サーバーをセキュリティで保護するには
  1. MariaDB サーバーを起動します。

    [ec2-user ~]$ sudo systemctl start mariadb
  2. mysql_secure_installation を実行します。

    [ec2-user ~]$ sudo mysql_secure_installation
    1. プロンプトが表示されたら、ルートアカウントのパスワードを入力します。

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

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

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

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

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

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

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

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

    [ec2-user ~]$ sudo systemctl stop mariadb
  4. (オプション) ブート時に毎回 MariaDB サーバーを起動させる場合は、次のコマンドを入力します。

    [ec2-user ~]$ sudo systemctl enable mariadb

ステップ 4: (オプション) phpMyAdmin をインストールする

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

重要

Apache で SSL/TLS を有効にしていない場合、LAMP サーバーへのアクセスに phpMyAdmin を使用することは推奨されません。そのようにすると、データベース管理者のパスワードや他のデータは、インターネット上を安全ではない状態で送信されます。開発者によるセキュリティ関連の推奨事項については、「Securing your phpMyAdmin installation」を参照してください。EC2 インスタンスでのウェブサーバーの保護に関する一般的な情報については、「Amazon Linux 2 での SSL/TLS の設定」を参照してください。

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

    [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
  2. Apache を再起動します。

    [ec2-user ~]$ sudo systemctl restart httpd
  3. php-fpm を再起動します。

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. /var/www/html で Apache ドキュメントルートに移動します。

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

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. phpMyAdmin フォルダを作成し、次のコマンドでパッケージを展開します。

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. phpMyAdmin-latest-all-languages.tar.gz Tarball を削除します。

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (オプション) MySQL サーバーが実行中ではない場合は、今すぐ起動します。

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

    http://my.public.dns.amazonaws.com/phpMyAdmin

    phpMyAdmin ログインページが表示されます。

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

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

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

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

    3. 追加のセットアップについては、phpMyAdmin のインストール手順の「セットアップスクリプトの使用」セクションにある「ファイル作成後の手順」を参照してください。

    phpMyAdmin の使用に関する情報は、「phpMyAdmin ユーザーガイド」を参照してください。

トラブルシューティング

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

ウェブブラウザを使用してサーバーに接続できません。

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

  • ウェブサーバーが実行されていますか?

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

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

    httpd プロセスが実行されていない場合は、LAMP サーバーを準備するには に記載されているステップを繰り返します。

  • ファイアウォールは正しく設定されていますか?

    インスタンスのセキュリティグループに、ポート 80 での HTTP ラフィックを許可するルールが含まれていることを確認します。詳細については、「セキュリティグループへのルールの追加」を参照してください。

HTTPS を使用してサーバーに接続できない

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

  • ウェブサーバは正しく設定されていますか?

    Apache をインストールすると、サーバーは HTTP トラフィック用に設定されます。HTTPS をサポートするには、サーバーで TLS を有効にし、SSL 証明書をインストールします。詳細については、Amazon Linux 2 での SSL/TLS の設定 を参照してください。

  • ファイアウォールは正しく設定されていますか?

    インスタンスのセキュリティグループに、ポート 443 で HTTPS トラフィックを許可するルールが含まれていることを確認します。詳細については、「セキュリティグループへのルールの追加」を参照してください。

関連トピック

インスタンスへのファイルの転送、またはウェブサーバーへの WordPress ブログのインストールの詳細については、次のドキュメントを参照してください。

このチュートリアルで使用されているコマンドおよびソフトウェアの詳細については、次のウェブページを参照してください。

ウェブサーバーのドメイン名の登録、または、既存のドメイン名をこのホストに移す方法についての詳細は、『Amazon Route 53 デベロッパーガイド』の「Amazon Route 53 のドメインとサブドメインの作成と移行」を参照してください。