Webサーバーを設定する

##はじめに
「AWSのサーバーを利用する」ための手順を5つに分けて書いています。

記事は以下にまとめておりますのでご確認ください。

①[EC2の初期設定](https://qiita.com/maca12vel/items/902dde37a267ceca1c53)
②[本番環境でデータベースを作成する](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d) 
③[EC2のRailsを起動する](https://qiita.com/maca12vel/items/2a04d39f958b53d687e2)
④[Webサーバーを設定する](https://qiita.com/maca12vel/items/35f9fb73bb21cb4869fb) ← イマココ 
⑤[デプロイを自動化する](https://qiita.com/maca12vel/items/7b33dd6ea1ad556e3fec)

##Webサーバーの役割
Webサーバーの役割は以下の3つ
・静的なコンテンツをレスポンスとしてクライアントに返す処理
・動的なコンテンツ生成をアプリケーション本体に依頼する処理
・アプリケーションサーバから返ってくる処理結果をレスポンスとしてクライアントに返す処理

##Nginxを導入
**``Nginx``**：Webサーバーの一種。
ユーザーのリクエストに対して静的コンテンツのみ取り出し処理を行い、
動的コンテンツの生成はアプリケーションサーバに依頼する。

今回は、Nginxの中でも「Nginx1」というバージョンを導入
ターミナル（EC2内)で以下を実行

```
[ec2-user@ip-***-**-**-*** ~]$ sudo amazon-linux-extras install nginx1
```

Is this ok [y/d/N]:と出てきたら、yを選択して決定。
無事に完了すれば、Nginxのインストール完了。

###Nginxの設定ファイルを編集
Nginxが正しく動くように設定しましょう。
Nginxの設定は「設定項目X 設定値x;」という形式で入力する。

ターミナル（EC2内)で以下を実行

```
[ec2-user@ip-***-**-**-*** ~]$ sudo vim /etc/nginx/conf.d/rails.conf
```

ターミナル上でファイルを開けたら次のように編集
※注意する箇所は「アプリケーション名」と「Elastic IP」

```/etc/nginx/conf.d/rails.conf
upstream app_server {
  # Unicornと連携させるための設定
  server unix:/var/www/アプリケーション名/tmp/sockets/unicorn.sock;
}

# {}で囲った部分をブロックと呼ぶ。サーバの設定ができる
server {
  # このプログラムが接続を受け付けるポート番号
  listen 80;
  # 接続を受け付けるリクエストURL ここに書いていないURLではアクセスできない
  server_name Elastic IP;

  # クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなので大きめにしておく
  client_max_body_size 2g;

# 接続が来た際のrootディレクトリ
  root /var/www/アプリケーション名/public;

# assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  error_page 500 502 503 504 /500.html;
}
```

入力を終えたら「escキー」→「:wq」の順で実行し、保存する。
次に、Nginxの権限を変更する。

ターミナル（EC2内)で以下を実行

```
[ec2-user@ip-***-**-**-*** ~]$ cd /var/lib
[ec2-user@ip-***-**-**-*** ~]$ sudo chmod -R 775 nginx  
```

これで、Nginxの設定が完了
以下のコマンドを実行してNginx設定ファイルを再読み込みして起動する。

ターミナル（EC2内)で以下を実行

```
[ec2-user@ip-***-**-**-*** lib]$ cd ~
[ec2-user@ip-***-**-**-*** ~]$ sudo systemctl start nginx
[ec2-user@ip-***-**-**-*** ~]$ sudo systemctl reload nginx
```

##Unicornの設定を変更

```config/unicorn.rb
listen 3000 ←修正前
```

```config/unicorn.rb
listen "#{app_path}/tmp/sockets/unicorn.sock" ←修正後
```

編集したら、リモートリポジトリへ「commit→push」
※ 別にブランチを切っている場合は、masterブランチにmergeしてから次に進む

###GitHubの変更点を本番環境へ反映
ターミナル（EC2内)で以下を実行

```
# 開発中のアプリケーションに移動
[ec2-user@ip-***-**-**-*** ~]$ cd /var/www/開発中のアプリケーション

# GitHubの内容をEC2に反映させる
[ec2-user@ip-***-**-**-*** <レポジトリ名>]$ git pull origin master
```

###Unicornを再起動
再起動の手順は、
①プロセスを確認
②プロセスをkill
③unicorn_railsコマンドを実行

ターミナル（EC2内)で以下を実行

①

```
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ ps aux | grep unicorn

ec2-user 17877  0.4 18.1 588472 182840 ?       Sl   01:55   0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881  0.0 17.3 589088 175164 ?       Sl   01:55   0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911  0.0  0.2 110532  2180 pts/0    S+   02:05   0:00 grep --color=auto unicorn
```

②

```
# 開発中のアプリケーションに移動
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ kill プロセス番号
```

③

```
# 開発中のアプリケーションに移動
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

```

ブラウザからElastic IPでアクセスする。
※ 「http://＜Elastic IP＞:3000/」ではなく 「http://＜Elastic IP＞/」なので注意

---

以上です。お疲れ様でした。

続きは → [こちら](https://qiita.com/maca12vel/items/7b33dd6ea1ad556e3fec)