AWS EC2 インスタンス作成、Webサーバ構築

## はじめに

AWS EC2を使ってWEBサーバを構築しましたので、備忘録としてまとめます。

### 目標

仮想サーバを構築しWordPrssを設置する。(WordPrssの設定は省略する。)

### 構築の流れ
- EC2 インスタンスを作成する
- セキュリティグループを作成してアクセス制限をかける
- サーバにログインする
- SSHのポートを変更する
- ユーザーを追加する（鍵を登録する）
- ミドルウェアをインストールする（Apache PHP MySQL FTP)
- ミドルウェアを設定する
- 【おまけ】 WordPressをインストール

## アカウント作成、ログイン

こちらにまとめてるのでどうぞ。
[AWSアカウント作成後の初期設定(セキュリティ設定)](http://qiita.com/0084ken/items/0a49b24bc89ce01842b5)

## EC2 インスタンスを作成
インスタンスとは AWS クラウドにある仮想サーバのこと。
詳しくは[こちら](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/f0fab1a3-c2a3-15f8-fdc6-ad91bf213c77.jpeg)

「EC2」をクリック。

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/1eb16758-9166-64c5-8c9a-29962f58cc5b.jpeg)

「Launch Instance」をクリック。


### Step 1: Choose an Amazon Machine Image (AMI)

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/4a2fb899-f34c-693e-aa9e-6b0c15abd2d9.jpeg)

EC2インスタンスのOSを選択。
今回は「Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type - ami-374db956」を選択。

### Step 2: Choose an Instance Type
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/faf8fe56-957d-0540-e57a-4685990cd7c2.jpeg)

無料枠のt2.microを選択し、「Next: Configure Instance Details」をクリック。

### Step 3: Configure Instance Details
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/b148c098-d2ec-6c1b-3985-35cf33b9f0f1.jpeg)

「Protect against accidental termination」にチェックを入れ、「Next: Add Storage」をクリック。
※こちらにチェックを入れておくと、意図せぬ削除から保護してくれるようになる。

### Step 4: Add Storage
![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/aa7f1fe7-d85e-7003-2579-c95f630acb73.jpeg)

用途に合わせてストレージを追加する。今回はデフォルトのままで、「Next: Tag Instance」をクリック。

### Step 5: Tag Instance
![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/fae591f2-2a18-26ca-e466-f284f550e9ca.jpeg)

任意のタグを追加し、 「Next: Configure Security Group」をクリック。


### Step 6: Configure Security Group
![8.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/c1c4b757-54dc-2ddc-086e-822987c54cc1.jpeg)

セキュリティグループを設定し、「Review and Launch」をクリック。
※今回は、sshをhttpを設定。

### Step 7: Review Instance Launch

今までの設定を確認し、「Launch」をクリック。
キーペアの作成画面が表示される。

![9.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/147ddc68-ff46-5161-71f0-994133965ed1.jpeg)

今回は、新規作成するので、「Create a new key pair」を選択し、Create a new key pairに任意の名前を入力し、「Create a new key pair」をクリックし、ダウンロードする。
サーバに接続するのに後ほど必要になるので、任意の場所に置いておく。

ダウンロードが完了したら、「Launch Instances」をクリック。

![10.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/4e9d2a84-c853-0ac3-735e-f3454d69ccdb.jpeg)

インスタンスが作成中なので、「View Instances」をクリック。

![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/c197403f-704f-1025-717a-f503aa2fef75.jpeg)

少し時間がかかるが作成が完了すると、インスタンスの状態が「running」と「2/2 checks passed」になっていれば、インスタンスの作成が完了。

## 仮想サーバにログイン
ここから、ターミナルでの作業になります。
PuTTYを使用したWindowsからLinuxインスタンスへの接続は[こちら](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html?icmpid=docs_ec2_console)

![12.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/56188660-9cbf-a2b8-372d-2ed2fff364a7.jpeg)

接続するインスタンスを選択し、「Connect」をクリック。

![dfee6a99-8489-b647-c6cd-3f0a2c794e8d.jpeg](https://qiita-image-store.s3.amazonaws.com/0/55848/d7971c46-ce32-b976-803a-f3843fe54782.jpeg)


先ほどダウンロードした鍵のパーミションを変更する。

```
chmod 400 gehogeho.pem
```

パーミッションを変更しないとログイン時に怒られます。

```
...

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

...
```

### SSHでアクセス

ec2-userでログインする。

```
$ ssh ec2-user@{instance IP} -i {秘密鍵保存ディレクトリ}/gehogeho.pem

...


       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|


...
```

無事ログインできたので、次の設定へ。

### ポート番号の変更

rootでログインし、ポート番号を変更する。

```
$ sudo -s

# vi /etc/ssh/sshd_config


#Port 22
↓
Port 60530 //任意の0番～65535番までの番号に変更

# /etc/init.d/sshd restart //再起動
```

### ユーザを作成

グループとユーザーを作成。

```
# useradd -g users gehogeho
# passwd ideacd
```

パスワードを設定。

```
# passwd gehogeho
ユーザー gehogeho のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
```

追加したユーザーにもrootになれるよう設定。

```
# visudo

root    ALL=(ALL)       ALL

↓
root    ALL=(ALL)       ALL
gehogeho  ALL=(ALL)       ALL
```

### 追加ユーザーの鍵の設定

追加ユーザーでリモートログインできるようにする。

rootからユーザーへ切り替え、ユーザーのディレクトリまで移動する。

```
# su gehogeho

$ /home/gehogeho
```

鍵の格納先のディレクトリと空の鍵ファイルを作成。

```
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```

お使いのPCで鍵を生成を生成する。

```
[user@MacBook-PC] $ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/.ssh/id_rsa.
Your public key has been saved in /Users/.ssh/id_rsa.pub.
The key fingerprint is:
The key's randomart image is:
+--[ RSA 2048]----+
| .+BB.o..        |
|  o*+B. ..       |
| .o o o.E o      |
| . o o   o       |
|  . . . S        |
|     . .         |
|      .          |
|                 |
|                 |
+-----------------+
```

生成した、id_rsa.pubの中身を先ほどのauthorized_keysにコピペ。
id_rsaは、PC内に大事に保管しておく。

```
$ vi ~/.ssh/authorized_keys
```

一旦、ログアウトし、追加したユーザーでログインする。


```
$ ssh gehogeho@{instance IP} -i {秘密鍵保存ディレクトリ}/gehogeho.pem
```

## 必要なミドルウェアをインストール

### yumアップデート

まず、yumアップデートをする。
※今回は、カーネルのアップデートを除外し、アップデートする。

```
# yum --exclude=kernel* update
```

### 必要なミドルウェアをインストール

今回は、WordPrssに必要なミドルウェアをインストールする。

- Apache
- MySQL
- PHP
- phpMyAdmin

```
# yum install httpd mysql mysql-server php php-mysql php-mbstring
```

phpMyAdminはCentOSの標準のリポジトリに無いようなのでepelからインストール

```
# yum install --enablerepo=epel phpMyAdmin
```

### Apacheを起動

```
# /etc/init.d/httpd start
```

Apachewo自動起動にする

```
# chkconfig httpd on
```

### MySQLを起動

```
# /etc/init.d/mysqld start
```

MySQLを自動起動にする

```
# chkconfig mysqld on
```

### 起動状態の確認

```
# chkconfig --list httpd
# chkconfig --list mysqld
```

ブラウザで確認。

![15.png](https://qiita-image-store.s3.amazonaws.com/0/55848/2ff4eb06-48e3-57c8-c045-62604f5f2448.png)

Apacheの画面が出ていれば、とりあえずOK。



### MySQLの設定

```
# vi /etc/my.cnf

// [mysqld] に以下を追記
character-set-server = utf8
skip-character-set-client-handshake

// 下を追記
[mysqldump]
default-character-set=binary

[client]
default-character-set = utf8
```

MySQL再起動

```
# /etc/init.d/mysqld restart
```

パスワードの設定をする。

```
# mysql mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1866163
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> //こちらにコマンドを入力。('パスワード') SET PASSWORD FOR root@localhost=PASSWORD('パスワードを入力');

mysql> SET PASSWORD FOR root@localhost=PASSWORD('gehogeho');
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye
```

### phpMyAdminの設定

デフォルトではアクセス制限があるので設定を変更する。

```
# vi /etc/httpd/conf.d/phpMyAdmin.conf

// 21行目らへんを変更
<IfModule !mod_authz_core.c>
  # Apache 2.2
  Order Deny,Allow
  Deny from All
  Allow from 127.0.0.1
  Allow from ::1
</IfModule>

↓

<IfModule !mod_authz_core.c>
  # Apache 2.2
  Order Allow,Deny
  Allow from All
</IfModule>
```

Apacheを再起動

```
# /etc/init.d/httpd restart
```

アクセスして確認。
http://IP/phpMyAdmin/

- ユーザー：root
- パスワード：gehogeo

### ドキュメントルートの設定

Apacheの設定を変更する

```
# vi /etc/httpd/conf/httpd.conf

// 293行目くらいを変更

DocumentRoot "/var/www/html"

↓

DocumentRoot "/home/gehogeho/html"


// 318行目くらいを変更

<Directory "/var/www/html">

↓

<Directory "/home/gehogeho/html">
```

htmlディレクトリを作成

```
# cd /home/gehogeho/
# mkdir html
# chmod 755 /home/gehogeho
```

Apacheを再起動

```
# /etc/init.d/httpd restart
```

## WordPressインストール

日本語版を取得する。

```
# cd /home/gehogeho/www/
# mkdir wp
# cd wp
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar zxvf latest-ja.tar.gz
# chown -R apache.apache
```

アクセスして確認。
http://IP/phpMyAdmin/wp/wp-admin/setup-config.php


## まとめ

ユーザー権限やパーミッションの変更を忘れていたりなど、すんなりいかないところもありましたが、なんとかインスタンスを立ち上げて仮想環境は作れました。
セキュリティグループなど、まだまだ疎いので、今後の課題にしていきたいと思います。