LoginSignup
0

More than 3 years have passed since last update.

Webサーバーを設定する

Last updated at Posted at 2020-08-29

はじめに

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

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

EC2の初期設定
本番環境でデータベースを作成する
EC2のRailsを起動する
Webサーバーを設定する ← イマココ
デプロイを自動化する

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>/」なので注意


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

続きは → こちら

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0