AWS EC2のチュートリアルに従い、LAMPウェブサーバーを構築してみた

#はじめに
LAMPウェブサーバーとは、
L（Linuxシステム）・・・サーバーでよく利用されるOS
A（Apache）・・・・・・WEBサーバー
M（Mysql）・・・・・・データベースソフト
P（PHP）・・・・・・・・プログラミング言語
の頭文字から名付けられています。
WEBサービスを提供する際のプラットホームとして、現在よく利用されています。
今回はAWSの無料枠範囲内で、LAMPウェブサーバーを構築する手順を紹介します。

#仕様環境
OS:Windows10
ソフト:Teraterm

#前提条件
１．AWSのEC2にてインスタンスの作成済み

今回のインスタンス構成内容
OS：Amazon Linux
プラン：t2.micro
セキュリティグループ：
HTTP80、HTTPS443、SSH22を開放
キーペア作成

２．teratermで接続出来ていること

#AmazonLinuxにLAMPウェブサーバーをインストールして起動する手順

###1.ルート権限を得る
`sudo -s`
先にやっておくと毎回入力しなくて済みます

###2.ソフトウェアパッケージを最新にする
`yum update -y`

###3.Apache,Mysql,PHPのインストール
`yum install -y httpd24 php56 mysql55-server php56-mysqlnd`

###4.Apacheの起動
`service httpd start`

###5.Apache自動起動設定
`chkconfig httpd on`

###6.WEBサーバーのテスト
ブラウザでインスタンスのパブリックDNSアドレス（またはパブリックIPアドレス）を入力しテストページを表示します。
![testpage1.jpg](https://qiita-image-store.s3.amazonaws.com/0/148264/93f6228b-4bc5-2ac3-a023-3705e0fab16d.jpeg)



##グループの作成と、パーミッション設定
・ec2-userがファイルを操作できるようにする
・wwwグループを作成
・wwwグループに/var/wwwディレクトリの所有権を付与し、書き込みを許可
wwwグループの任意のメンバーはウェブサーバーに対してファイルの追加削除変更が可能となる。

###1.wwwグループをインスタンスに追加
`groupadd www`

###2.ec2-userをwwwグループに追加
`usermod -a -G www ec2-user`

###3.新しいグループ取得のため、1回ログアウトし、再ログイン
`exit`

###4.wwwグループでメンバーシップの検証
`groups`

###5./var/とそのコンテンツの所有権をwwwグループに変更
`chown -R root:www /var/www`

###6./var/wwwおよびそのサブディレクトリ許可を変更し、グループの書き込みの許可を設定し、将来のサブディレクトリにグループIDを設定する
```
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
```

###7./var/www およびそのサブディレクトリのファイル許可を繰り返し変更してグループの書き込み許可を追加します。
`find /var/www -type f -exec chmod 0664 {} \;`

補足：findコマンド・・・type fで通常ファイル指定　dでディレクトリを指定
　　-exec [コマンド] \;でコマンドを実行する。{}をつけると検索結果をそこに適応させることができる

ここで主にやってきたのは、ec2-userや将来開発に携わるメンバーも含めて、Apache ドキュメントルートでファイルを追加、削除、編集できるようにすることです。これで、静的なウェブサイトや PHP アプリケーションなどのコンテンツを追加できるようになりました。

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

###1.ApacheドキュメントルートでシンプルなPHPファイルを作成する
`echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php`

###2.ウェブブラウザで、作成したファイルの URL を入力します。この URL は、インスタンスのパブリック DNS アドレスにスラッシュとファイル名を追加したものです。
![testpagephp2.jpg](https://qiita-image-store.s3.amazonaws.com/0/148264/31880c8f-cbe3-4701-8109-8a270ea45fa2.jpeg)

###3.phpinfo.php ファイルを削除する。セキュリティ上の理由から、インターネットにブロードキャストするべきではないようです。
`rm /var/www/html/phpinfo.php`

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

###1.Mysqlの起動
`service mysqld start`

###2.mysql_secure_installation を実行する
`mysql_secure_installation`

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

現在の root パスワードを入力します。デフォルトでは、root アカウントにはパスワードが設定されていないので、Enter を押します。
`Enter current password for root (enter for none):`


####「Y」と入力してパスワードを設定し、安全なパスワードを 2 回入力します。安全なパスワード作成の詳細については、http://www.pctools.com/guides/password/ を参照してください。このパスワードは必ず安全な場所に保管します。
```
Set root password? [Y/n] Y
New password:
Re-enter new password:
```

####「Y」と入力して匿名ユーザーアカウントを削除します。
```
Remove anonymous users? [Y/n] Y
 ... Success!
```

####「Y」と入力して root ログインを無効にします。
```
Disallow root login remotely? [Y/n] Y
 ... Success!
```

####「Y」と入力してテストデータベースを削除します。
```
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
```

####「Y」と入力して権限テーブルを再ロードし、変更を保存します。
```
Reload privilege tables now? [Y/n] Y
 ... Success!
```

###3.Mysqlの自動起動設定
`chkconfig mysqld on`


#終わりに
以上で構築は終了になります。お疲れ様でした。
より詳しい解説はAWS公式のチュートリアルを参考にしてください。

「チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール」
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html

その他参考サイト
findコマンドの詳細
http://www.k4.dion.ne.jp/~mms/unix/linux_com/find.html