Amazon Linux への LAMP のインストール
次の手順では、Apache ウェブサーバーを PHP と MySQL のサポートとともに Amazon Linux インスタンスにインストールします (LAMP ウェブサーバーまたは LAMP スタックとも呼ばれます)。このサーバーを使用して静的ウェブサイトをホストしたり、データベースとの情報の読み取りと書き込みを行う動的な PHP アプリケーションをデプロイしたりできます。
重要
Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションに LAMP ウェブサーバーを設定しようとすると、このチュートリアルの通りにはなりません。Amazon Linux 2 については、「Amazon Linux 2 での LAMP のインストール」を参照してください。Ubuntu については、Ubuntu コミュニティドキュメントの ApacheMySQLPHP
オプション: オートメーション を使用してこのチュートリアルを完了する
以下のタスクを行う代わりに AWS Systems Manager オートメーションを使用してこのチュートリアルを完了するには、オートメーションドキュメントである AWSDocs-InstallALAMPServer-AL
タスク
ステップ 1: LAMP サーバーを準備する
前提条件
このチュートリアルでは、インターネットからアクセス可能なパブリック DNS 名を持つ、Amazon Linux AMI を使用する新しいインスタンスをすでに起動していることを前提にしています。詳細については、「ステップ 1: インスタンスを起動する」を参照してください。また、セキュリティグループを設定して、SSH (ポート 22)、HTTP (ポート 80)、HTTPS (ポート 443) 接続を有効にしている必要もあります。前提条件の詳細については、Linux インスタンス用のインバウンドトラフィックの承認 を参照してください。
Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールして起動するには
-
すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。この処理には数分かかりますが、最新の更新とバグ修正を確実に適用することが重要です。
-y
オプションを指定すると、確認メッセージを表示せずに更新をインストールします。インストール前に更新を検査する場合は、このオプションを省略できます。[ec2-user ~]$
sudo yum update -y
-
これでインスタンスが最新状態になったので、Apache ウェブサーバー、MySQL、PHP ソフトウェアパッケージをインストールできます。
重要
アプリケーションによっては、次の推奨のソフトウェア環境と互換性がない場合があります。これらのパッケージをインストールする前に、LAMP アプリケーションと互換性があることを確認してください。問題がある場合には、代替環境のインストールが必要になることがあります。詳細については、「サーバーで実行するアプリケーションソフトウェアに、インストールされている PHP バージョンまたは他のソフトウェアとの互換性がありません。」を参照してください。
yum install コマンドを使用すると、複数のソフトウェアパッケージと関連するすべての依存関係を同時にインストールできます。
[ec2-user ~]$
sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd
No package
エラーが表示された場合、インスタンスは Amazon Linux AMI で起動されていません (おそらく、代わりに Amazon Linux 2 を使用しています)。次のコマンドを使用して、Amazon Linux のバージョンを表示できます。package-name
availablecat /etc/system-release
-
Apache ウェブサーバーを起動します。
[ec2-user ~]$
sudo service httpd start
Starting httpd: [ OK ]
-
chkconfig コマンドを使用して、システムがブートするたびに Apache ウェブサーバーが起動するように設定します。
[ec2-user ~]$
sudo chkconfig httpd on
chkconfig コマンドでは、それを使用してサービスを正常に有効にしたときに確認メッセージは一切表示されません。
httpd が有効であることは、次のコマンドを実行して確認できます。
[ec2-user ~]$
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ここ,httpd、
on
ランレベル 2、3、4、5 (見たいものです)。 -
インバウンド HTTP (ポート 80) 接続をインスタンスに許可するセキュリティルールを追加していない場合には、このルールを追加します。デフォルトでは、起動時に [launch-wizard-
N
] セキュリティグループがインスタンスに設定されます。このグループには SSH 接続を許可する単一のルールが含まれます。Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 [インスタンス] を選択し、該当するインスタンスを選択します。
-
[セキュリティ] タブで、インバウンドルールを表示します。次のルールが表示されます。
Port range Protocol Source 22 tcp 0.0.0.0/0
警告
0.0.0.0/0
を使用すると、すべての IPv4 アドレスからインスタンスへの、SSH によるアクセスが許可されます。これはテスト環境で短時間なら許容できますが、実稼働環境で行うのは安全ではありません。本番環境では、特定の IP アドレスまたは特定のアドレス範囲にのみ、インスタンスへのアクセスを限定します。 -
セキュリティグループのリンクを選択します。「セキュリティグループへのルールの追加」の手順を使用して、次の値で新しいインバウンドセキュリティルールを追加します。
-
[Type]: HTTP
-
[Protocol]: TCP
-
[Port Range]: 80
-
[Source]: Custom
-
-
ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。インスタンスのパブリック DNS アドレスを取得するには、Amazon EC2 コンソールを使用します。
/var/www/html
にコンテンツがない場合、Apache テストページが表示されます。ドキュメントルートに追加したコンテンツは、テストページからではなくインスタンスのパブリック DNS アドレスからアクセスできます。インスタンスのセキュリティグループに、ポート 80 での HTTP ラフィックを許可するルールが含まれていることを確認します。詳細については、「セキュリティグループへのルールの追加」を参照してください。
Amazon Linux を使用していない場合は、それらの接続を許可するようにインスタンスのファイアウォールを設定する必要があるかもしれません。ファイアウォールの設定方法の詳細については、ディストリビューション用のドキュメントを参照してください。
Apache httpd は、Apache ドキュメントルートと呼ばれるディレクトリに維持されるファイルを提供します。Amazon Linux Apache ドキュメントルートは /var/www/html
であり、デフォルトでは root によって所有されます。
[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
グループに追加し、apache
ディレクトリの所有権を /var/www
グループに付与し、グループへの書き込み権限を割り当てます。
ファイルの許可を設定するには
-
ユーザー (この場合は
ec2-user
) をapache
グループに追加します。[ec2-user ~]$
sudo usermod -a -G apache
ec2-user
-
ログアウトし、再度ログインして新しいグループを選択し、メンバーシップを確認します。
-
ログアウトします (exit コマンドを使用するか、ターミナルウィンドウを閉じます)。
[ec2-user ~]$
exit
-
apache
グループのメンバーシップを検証するには、インスタンスに再接続して次のコマンドを実行します。[ec2-user ~]$
groups
ec2-user wheel apache
-
-
/var/www
とそのコンテンツのグループ所有権をapache
グループに変更します。[ec2-user ~]$
sudo chown -R ec2-user:apache /var/www
-
グループの書き込み許可を追加して、これからのサブディレクトにグループ ID を設定するには、
/var/www
とサブディレクトのディレクトリ許可を変更します。[ec2-user ~]$
sudo chmod 2775 /var/www
[ec2-user ~]$
find /var/www -type d -exec sudo chmod 2775 {} \;
-
グループ書き込み許可を追加するには、
/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 での SSL/TLS の設定」を参照してください。
ステップ 2: LAMP サーバーをテストする
サーバーがインストールおよび実行されており、ファイルのアクセス許可が正しく設定されている場合、ec2-user
アカウントは、インターネットから使用できる /var/www/html
ディレクトリに PHP ファイルを作成できます。
LAMP ウェブサーバーをテストするには
-
Apache ドキュメントルートで PHP ファイルを作成します。
[ec2-user ~]$
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
このコマンドを実行しようとしたときに「許可が拒否されました」というエラーが表示された場合は、ログアウトし、再度ログインして、ステップ 1: LAMP サーバーを準備する で設定した正しいグループ許可を取得します。
-
ウェブブラウザで、作成したファイルの URL を入力します。この URL は、インスタンスのパブリック DNS アドレスにスラッシュとファイル名を追加したものです。次に例を示します。
http://
my.public.dns.amazonaws.com
/phpinfo.phpPHP 情報ページが表示されるはずです。
このページが表示されない場合は、前のステップで
/var/www/html/phpinfo.php
ファイルが正しく作成されたことを確認します。次のコマンドで、必要なパッケージがすべてインストールされたことを確認することもできます。2 番目の列のパッケージのバージョンが、この出力例に一致する必要はありません。[ec2-user ~]$
sudo yum list installed httpd24 php72 mysql57-server php72-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
コマンドを使ってインストールします。 -
phpinfo.php
ファイルを削除します。これは有用な情報であることもありますが、セキュリティ上の理由から、インターネット上で公表しないでください。[ec2-user ~]$
rm /var/www/html/phpinfo.php
ステップ 3: データベースサーバーをセキュリティで保護する
MySQL サーバーのデフォルトのインストールには、テストおよび開発に役立ついくつかの機能がありますが、実稼働サーバーでは無効にするか削除する必要があります。mysql_secure_installation コマンドを使用すると、ルートパスワードを設定し、安全でない機能をインストールから削除する手順が案内されます。MySQL サーバーを使用する予定がない場合でも、この手順を実行することが推奨されます。
データベースサーバーをセキュリティで保護するには
-
MySQL サーバーを起動します。
[ec2-user ~]$
sudo service mysqld start
Initializing MySQL database: ... PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! ... Starting mysqld: [ OK ]
-
mysql_secure_installation を実行します。
[ec2-user ~]$
sudo mysql_secure_installation
-
プロンプトが表示されたら、ルートアカウントのパスワードを入力します。
-
現在のルートパスワードを入力します。デフォルトでは、ルートアカウントにはパスワードが設定されていません。Enter キーを押します。
-
「
Y
」と入力してパスワードを設定し、安全なパスワードを 2 回入力します。安全なパスワード作成の詳細については、「https://identitysafe.norton.com/password-generator/」を参照してください。このパスワードは必ず安全な場所に保管します。 MySQL のルートパスワードの設定は、データベースを保護するための最も基本的な手段にすぎません。データベース駆動型アプリケーションを構築またはインストールする必要がある場合、通常はそのアプリケーションのデータベースサービスユーザーを作成します。ルートアカウントは、データベース管理以外には使用しないでください。
-
-
「
Y
」と入力して匿名ユーザーアカウントを削除します。 -
「
Y
」と入力してリモートルートログインを無効にします。 -
「
Y
」と入力してテストデータベースを削除します。 -
「
Y
」と入力して権限テーブルを再ロードし、変更を保存します。
-
-
(オプション) MySQL サーバーをすぐに使用する予定がない場合は、これを停止します。再び必要になったときには再起動できます。
[ec2-user ~]$
sudo service mysqld stop
Stopping mysqld: [ OK ]
-
(オプション) ブート時に毎回 MySQL サーバーを起動させる場合は、次のコマンドを入力します。
[ec2-user ~]$
sudo chkconfig mysqld on
これで、完全に機能する LAMP ウェブサーバーを設定しました。/var/www/html
の Apache ドキュメントルートにコンテンツを追加する場合、そのコンテンツはインスタンスのパブリック DNS アドレスで表示できます。
ステップ 4: (オプション) phpMyAdmin をインストールする
pMyAdmin をインストールするには
phpMyAdmin
重要
Apache で SSL/TLS を有効にしていない場合、LAMP サーバーへのアクセスに phpMyAdmin を使用することは推奨されません。そのようにすると、データベース管理者のパスワードや他のデータは、インターネット上を安全ではない状態で送信されます。開発者によるセキュリティ関連の推奨事項については、「Securing your phpMyAdmin installation
注記
Amazon Linux パッケージの管理システムは、現在のところ PHP 7 環境における phpMyAdmin の自動インストールをサポートしていません。このチュートリアルでは、phpMyAdmin を手動でインストールする方法を説明します。
-
SSH を使用して EC2 インスタンスにログインします。
-
必要な依存ファイルをインストールします。
[ec2-user ~]$
sudo yum install php72-mbstring.x86_64 -y
-
Apache を再起動します。
[ec2-user ~]$
sudo service httpd restart
Stopping httpd: [ OK ] Starting httpd: [ OK ]
-
/var/www/html
で Apache ドキュメントルートに移動します。[ec2-user ~]$
cd /var/www/html
[ec2-user html]$
-
https://www.phpmyadmin.net/downloads
で最新の phpMyAdmin リリース用のソースパッケージを選択します。ファイルディレクトリをインスタンスにダウンロードするには、次の例のようにリンクをコピーして wget コマンドに貼り付けます。 [ec2-user html]$
wget
https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
-
phpMyAdmin フォルダを作成し、次のコマンドを使用してパッケージを展開します。
[ec2-user html]$
mkdir phpMyAdmin && tar -xvzf
phpMyAdmin-latest-all-languages.tar.gz
-C phpMyAdmin --strip-components 1 -
phpMyAdmin-latest-all-languages.tar.gz
Tarball を削除します。[ec2-user html]$
rmphpMyAdmin-latest-all-languages.tar.gz
-
(オプション) MySQL サーバーが実行中ではない場合は、今すぐ起動します。
[ec2-user ~]$
sudo service mysqld start
Starting mysqld: [ OK ]
-
ウェブブラウザで、phpMyAdmin のインストール URL を入力します。この URL は、インスタンスのパブリック DNS アドレス (または、パブリック IP アドレス) にスラッシュとインストールディレクトリを追加してものです。次に例を示します。
http://
my.public.dns.amazonaws.com
/phpMyAdminphpMyAdmin ログインページが表示されます。
-
前に作成した
root
ユーザー名と MySQL のルートパスワードを使って、phpMyAdmin インストールにログインします。インストールは、サービス開始前に設定する必要があります。phpMyAdmin を設定するには、手動で設定ファイルを作成する
、設定コンソールを使用する 、またはその両方の方法を組み合わせることができます。 phpMyAdmin の使用に関する情報は、「phpMyAdmin ユーザーガイド
」を参照してください。
トラブルシューティング
このセクションでは、新しい LAMP サーバーの設定時に発生する可能性がある一般的な問題の解決案を提供します。
ウェブブラウザを使用してサーバーに接続できません。
以下のチェックを行って、Apache ウェブサーバーが実行されていて、アクセス可能であるかどうかを確認します。
-
ウェブサーバーが実行されていますか?
httpd が有効であることは、次のコマンドを実行して確認できます。
[ec2-user ~]$
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ここ,httpd、
on
ランレベル 2、3、4、5 (見たいものです)。httpd プロセスが実行されていない場合は、ステップ 1: LAMP サーバーを準備する に記載されているステップを繰り返します。
-
ファイアウォールは正しく設定されていますか?
インスタンスのセキュリティグループに、ポート 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
このチュートリアルの始まりの推奨に従って最新のパッケージをインストールした場合は、まずこのパッケージとその他の依存ファイルを次のようにアンインストールする必要があります。
[ec2-user ~]$
sudo yum remove -y httpd24 php72 mysql57-server php72-mysqlnd perl-DBD-MySQL57
次に、代替環境をインストールします。
[ec2-user ~]$
sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
後で推奨環境にアップグレードすることを決定した場合は、まずカスタマイズされたパッケージと依存関係を削除する必要があります。
[ec2-user ~]$
sudo yum remove -y httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL56
これで、前に説明した最新のパッケージをインストールできます。
関連トピック
インスタンスへのファイルの転送、またはウェブサーバーへの WordPress ブログのインストールの詳細については、次のドキュメントを参照してください。
このチュートリアルで使用されているコマンドおよびソフトウェアの詳細については、次のウェブページを参照してください。
-
Apache ウェブサーバー: http://httpd.apache.org/
-
MySQL データベースサーバー: http://www.mysql.com/
-
PHP プログラミング言語: http://php.net/
-
chmod
コマンド: https://en.wikipedia.org/wiki/Chmod -
chown
コマンド: https://en.wikipedia.org/wiki/Chown
ウェブサーバーのドメイン名の登録、または、既存のドメイン名をこのホストに移す方法についての詳細は、『Amazon Route 53 デベロッパーガイド』の「Amazon Route 53 のドメインとサブドメインの作成と移行」を参照してください。