メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール

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

重要

Ubuntu インスタンスでの LAMP ウェブサーバーのセットアップは、このチュートリアルの範囲外です。これらの手順は Amazon Linux で使用するためのものです。その他のディストリビューションの詳細については、各ドキュメントを参照してください。Ubuntu の LAMP ウェブサーバーについては、Ubuntu コミュニティのドキュメントの ApacheMySQLPHP トピックを参照してください。

前提条件

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

Amazon Linux に LAMP ウェブサーバーをインストールして起動するには

  1. インスタンスに接続します

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

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

    Copy
    [ec2-user ~]$ sudo yum update -y
  3. これでインスタンスが最新状態になったので、Apache ウェブサーバー、MySQL、PHP ソフトウェアパッケージをインストールできます。

    注記

    アプリケーションによっては、次の推奨のソフトウェア環境と互換性がない場合があります。これらのパッケージをインストールする前に、LAMP アプリケーションと互換性があることを確認してください。問題がある場合には、代替環境のインストールが必要になることがあります。詳細については、「サーバーで実行するアプリケーションソフトウェアに、インストールされている PHP バージョンまたは他のソフトウェアとの互換性がありません。」を参照してください。

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

    Copy
    [ec2-user ~]$ sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
  4. Apache ウェブサーバーを起動します。

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

    Copy
    [ec2-user ~]$ sudo chkconfig httpd on

    chkconfig コマンドでは、それを使用してサービスを正常に有効にしたときに確認メッセージは一切表示されません。

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

    Copy
    [ec2-user ~]$ chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    ここで、httpd は実行レベル 2、3、4、および 5 で on です (これらの値である必要があります)。

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

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

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

    3. [セキュリティグループ] で [インバウンドルールの表示] を選択します。

    4. デフォルトのセキュリティグループに次のルールの一覧が表示されます。

      Copy
      Security Groups associated with i-1234567890abcdef0 Ports Protocol Source launch-wizard-N 22 tcp 0.0.0.0/0 ✔

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

      • [Type]—HTTP

      • [プロトコル]—TCP

      • [ポート範囲]—80

      • [ソース]—カスタム

  7. ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力すると、Apache テストページが表示されます。Amazon EC2 コンソールを使用すると、インスタンスのパブリック DNS を取得できます ([パブリック DNS] 列をチェックします。列が非表示の場合は、[表示/非表示] を選択して、[パブリック DNS] を選択します)。

    Apache テストページが表示されない場合、使用しているセキュリティグループに、HTTP (ポート 80) トラフィックを許可するルールが含まれていることを確認します。HTTP ルールをセキュリティグループに追加する方法については、セキュリティグループへのルールの追加 を参照してください。

    重要

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

     Apache テストページ

    注記

    このテストページが表示されるのは、/var/www/html にコンテンツがない場合のみです。ドキュメントルートにコンテンツを追加すると、コンテンツはこのテストページではなく、インスタンスのパブリック DNS アドレスに表示されます。

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

Copy
[ec2-user ~]$ ls -l /var/www total 16 drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin drwxr-xr-x 3 root root 4096 Aug 7 00:02 error drwxr-xr-x 2 root root 4096 Jan 6 2012 html drwxr-xr-x 3 root root 4096 Aug 7 00:02 icons drwxr-xr-x 2 root root 4096 Aug 7 21:17 noindex

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

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

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

    Copy
    [ec2-user ~]$ sudo usermod -a -G apache ec2-user

    重要

    新しいグループを取得するには、ログアウトしてから再度ログインする必要があります。exit コマンドを使用するか、ターミナルウィンドウを閉じることができます。

  2. ログアウトし、再度ログインして apache グループでメンバーシップを確認します。

    1. ログアウトします。

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

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

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

    Copy
    [ec2-user ~]$ sudo chmod 2775 /var/www [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
  5. グループ書き込み許可を追加するには、/var/www とサブディレクトリのファイル許可を再帰的に変更します。

    Copy
    [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 で SSL/TLS を使用できるように Apache ウェブサーバーを設定する」を参照してください。

LAMP ウェブサーバーをテストするには

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

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

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

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

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

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

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

    注記

    このページが表示されない場合は、前のステップで /var/www/html/phpinfo.php ファイルが正しく作成されたことを確認します。必要なすべてのパッケージが次のコマンドでインストールされたことも確認できます (2 番目の列のパッケージのバージョンが、この出力例に一致する必要はありません)。

    Copy
    [ec2-user ~]$ sudo yum list installed httpd24 php70 mysql56-server php70-mysqlnd Loaded plugins: priorities, update-motd, upgrade-helper Installed Packages httpd24.x86_64 2.4.25-1.68.amzn1 @amzn-updates mysql56-server.x86_64 5.6.35-1.23.amzn1 @amzn-updates php70.x86_64 7.0.14-1.20.amzn1 @amzn-updates php70-mysqlnd.x86_64 7.0.14-1.20.amzn1 @amzn-updates

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

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

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

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

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

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

    Copy
    [ec2-user ~]$ sudo service mysqld start Initializing MySQL database: ... PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! ... Starting mysqld: [ OK ]
  2. mysql_secure_installation を実行します。

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

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

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

        注記

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

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

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

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

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

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

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

    Copy
    [ec2-user ~]$ sudo chkconfig mysqld on

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

(オプション) phpMyAdmin のインストール

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

重要

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

注記

Amazon Linux パッケージの管理システムは、現在のところ PHP 7 環境における phpMyAdmin の自動インストールをサポートしていません。このチュートリアルでは、phpMyAdmin を手動でインストールする方法を説明します。

  1. SSH を使用して EC2 インスタンスにログインします。

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

    Copy
    [ec2-user ~]$ sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
  3. Apache を再起動します。

    Copy
    [ec2-user ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
  4. /var/www/html で Apache ドキュメントルートに移動します。

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

    Copy
    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. パッケージを解凍し、結果のディレクトリ名を管理しやすい名前に変更します。

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

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

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

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

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

    インストールは、サービス開始前に設定する必要があります。phpMyAdmin を設定するには、手動で設定ファイルを作成するか、設定コンソールを使用するか、あるいはその両方の方法を組み合わせることができます。

    phpMyAdmin の使用に関する情報は、phpMyAdmin User Guide を参照してください。

トラブルシューティング

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

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

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

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

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

    Copy
    [ec2-user ~]$ chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    ここで、httpd は実行レベル 2、3、4、および 5 で on です (これらの値である必要があります)。

    httpd プロセスが実行されていない場合は、Amazon Linux に LAMP ウェブサーバーをインストールして起動するには に記載されているステップを繰り返します。

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

    Apache テストページが表示されない場合、使用しているセキュリティグループに、HTTP (ポート 80) トラフィックを許可するルールが含まれていることを確認します。HTTP ルールをセキュリティグループに追加する方法については、セキュリティグループへのルールの追加 を参照してください。

サーバーで実行するアプリケーションソフトウェアに、インストールされている PHP バージョンまたは他のソフトウェアとの互換性がありません。

このチュートリアルでは、最新バージョンの Apache HTTP Server、PHP、MySQL をインストールすることをお勧めします。追加の LAMP アプリケーションをインストールする前に、そのシステム条件を調べて、インストール済みの環境と互換性があることを確認してください。最新バージョンの PHP がサポートされていない場合は、以前サポートされていた設定にダウングレードできます (全体的に安全です)。PHP は、複数のバージョンを並行してインストールすることもできます。これにより、最小限の労力で特定の互換性の問題を解決できます。複数バージョンの PHP の優先順位を設定する方法については、「Amazon Linux AMI 2016.09 Release Notes」を参照してください。

ダウングレード方法

このチュートリアルの十分にテストされた前バージョンでは、次のコア LAMP パッケージを推奨しています。

  • httpd24

  • php56

  • mysql55-server

  • php56-mysqlnd

このチュートリアルの始まりの推奨に従って最新のパッケージをインストールした場合は、まずこのパッケージとその他の依存ファイルを次のようにアンインストールする必要があります。

Copy
[ec2-user ~]$ sudo yum remove -y httpd24 php70 mysql56-server php70-mysqlnd perl-DBD-MySQL56

次に、代替環境をインストールします。

Copy
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd

後で推奨環境にアップグレードすることを決定した場合は、まずカスタマイズされたパッケージと依存関係を削除する必要があります。

Copy
[ec2-user ~]$ sudo yum remove -y httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL55

これで、前に説明した最新のパッケージをインストールできます。

関連トピック

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

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

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