EC2 Webサーバー構築

# EC2サーバー構築共通
## 概要
AWSのEC2を利用して、Webサーバーを構築したときの手順をご紹介します。

## 環境
- nginx 1.16.1
- PHP 7.4.3
- git 2.23.1

## 手順
### 1. システム
```bash
# yumのパッケージ更新
$ sudo yum update

# タイムゾーン確認
$ timedatectl status

# タイムゾーンを日本時間に設定
$ sudo timedatectl set-timezone Asia/Tokyo

# ロケール確認
$ localectl status

# ロケール変更
$ sudo localectl set-locale LANG=ja_JP.UTF-8
```

### 2. ニックネーム設定

ホスト名に影響を与えずにシェルプロンプトを変更する
[参考](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/set-hostname.html#set-hostname-shell)

1. 環境変数定義

```bash: 
$ sudo sh -c 'echo "export NICKNAME={ニックネーム}" > /etc/profile.d/prompt.sh'
```

```bash:例
$ sudo sh -c 'echo "export NICKNAME=staging" > /etc/profile.d/prompt.sh'
```
2. シェルプロンプトの設定編集
3. 
```bash
$ sudo vi /etc/bashrc
```
\h (hostname を表す記号) を NICKNAME 変数の値に変更
```bash:/etc/bashrc
 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
                                                                  ↓
 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\$NICKNAME \W]\\$ "
```

3. シェルウィンドウのタイトルを新しいニックネームに設定

```bash
# ファイル作成
sudo touch /etc/sysconfig/bash-prompt-xterm

#  実行権限付与
$ sudo chmod +x /etc/sysconfig/bash-prompt-xterm

# ファイル編集
$ sudo vi /etc/sysconfig/bash-prompt-xterm
```

```bash:/etc/sysconfig/bash-prompt-xterm
echo -ne "\033]0;${USER}@${NICKNAME}:${PWD/#$HOME/~}\007"
```

### 3. Nginx
#### インストール
```bash
# nginxのトピックを確認
$ amazon-linux-extras list | grep nginx
38  nginx1                   available    [ =stable ]

$ amazon-linux-extras info nginx1
nginx1 recommends nginx                      # yum install nginx

$ sudo amazon-linux-extras install nginx1.12

$ nginx -v
nginx version: nginx/1.16.1
```

#### 起動設定
```bash
#起動
$ sudo systemctl start nginx.service

#自動起動
$ sudo systemctl enable nginx.service

#自動起動確認
$ sudo systemctl is-enabled nginx.service
enabled

#状態確認
$ sudo systemctl status nginx.service
Active: active (running)
```

### 権限付与
```
$ sudo chmod 777 -R /var/log/nginx
```

### nginx.conf
```bash
sudo vi /etc/nginx/nginx.conf
```
以下を追加
#### サーバー名の長さ調整
```nginx
server_names_hash_bucket_size 128;
```

#### タイムアウト設定
```bash
keepalive_timeout   300;
```

### 独自の設定ファイル作成
```bash
sudo vi /etc/nginx/conf.d/web.conf
```

```nginx
server {
    listen       80;
    server_name  {サーバー名};
    index        index.php;
    root         {ドキュメントルート};
    charset      utf-8;
    etag         off;
    add_header   X-Content-Type-Options nosniff;
    add_header   X-XSS-Protection "1; mode=block";

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        index  index.html index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass  unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}
```

サーバー名の例:
- `test.com`
- `123.11.111.11`

ドキュメントルートの例:
`/srv/public`

### チェックと再起動
```bash
$ sudo nginx -t
$ sudo systemctl restart nginx.service
```

### 4. PHP
#### インストール
```bash
# nginxのトピックを確認
$ amazon-linux-extras list | grep php
 15  php7.2                   available    \
 17  lamp-mariadb10.2-php7.2  available    \
 31  php7.3                   available    \
 42  php7.4                   available    [ =stable ]

$ amazon-linux-extras info php7.4

$ sudo amazon-linux-extras install php7.4

$ php -v
PHP 7.4.3 (cli) (built: Mar  2 2020 21:05:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

$ php-fpm -v
PHP 7.4.3 (fpm-fcgi) (built: Mar  2 2020 21:06:23)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
```

#### php設定
##### php.ini
```bash
$ sudo vi /etc/php.ini
````

```php.ini:/etc/php.ini
expose_php = Off
memory_limit = 256M
date.timezone = Asia/Tokyo
mbstring.language = Japanese
```

##### userとgroupの値をnginxに変更
```bash
sudo vi /etc/php-fpm.d/www.conf
```

```:/etc/php-fpm.d/www.conf
user = apache
group = apache
↓
user = nginx
group = nginx
```

##### PHP拡張
```bash
$ sudo yum install php-mbstring php-pecl-memcached php-gd php-apcu php-xml php-cli php-json php-process php-common php-fpm php-zip php-mysqlnd
```

##### php-fpmとnginxを再起動
```
$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart nginx.service
```

##### composer インストール
```bash
$ cd /home/ec2-user
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -v
Composer version 1.10.5 2020-04-10 11:44:22
```

### 5. git
#### インストール
```bash
$ sudo yum install git

$ git version
git version 2.23.1
```

#### 秘密鍵の登録
```
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096
$ cat ~/.ssh/id_rsa.pub
コピーしてgithubに公開鍵を登録する
$ ssh -T git@github.com
```

```
$ cd ~/.ssh
$ vi id_rsa
$ chmod 600 id_rsa
```

#### clone
```
$ cd /home/ec2-user
$ git init
$ git clone git@github.com:{リポジトリ名}
```