AWSのEC2インスタンスにWebサーバーを作成する方法


はじめに

AWSはAmazon Web Servisesの略で、Amazonが提供しているクラウドサーバーのサービスです。
AWSへの理解度を高めるために、学んだことをアウトプットします。

今回の流れ

  • アプリケーションにNginxをインストール
  • Nginxの設定

「AWSのEC2インスタンスにアプリケーションサーバーを作成する方法」(https://qiita.com/daisuke30x/items/4292f96d817805f93d62)
の続きからの説明となります。
つまり、インスタンスにアプリケーションがインストールされていることが前提です。

EC2インスタンスにNginxをインストール

Nginxとは

代表的なWebサーバーです。

①自身のアプリケーションにNginxのインストール

ターミナル
インスタンスにログイン
% ssh -i キーペア名.pem ec2-user@<パブリックIP>

Nginxのインストール
[インスタンス]$ sudo amazon-linux-extras install nginx1
=> Is this ok [y/d/N]: y

Nginxの設定
[インスタンス]$ sudo vim /etc/nginx/conf.d/rails.conf

「i」を押し、以下を入力(2箇所の<アプリケーション名>と1箇所の<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の権限の変更
[インスタンス]$ cd /var/lib
[インスタンス lib]$ sudo chmod -R 775 nginx  
(-R:ディレクトリ内の全ての権限を変更するためのオプション)

Nginxの起動
[インスタンス lib]]$ cd ~
[インスタンス]$ sudo systemctl start nginx
[インスタンス]$ sudo systemctl reload nginx

②アプリケーションの設定変更

今回はUnicornを使用していることを想定して、説明します。

  • アプリケーションのconfig内のunicorn.rbファイルの編集
    config/unicorn.rb
    listen 3000 を修正 => listen "#{app_path}/tmp/sockets/unicorn.sock"

  • インスタンスにアプリケーションの設定変更を反映

インスタンス内のアプリケーションディレクトリに移動
[インスタンス]$ cd /var/www/<アプリケーション名>

[インスタンス<アプリケーション名>]$ git pull origin master
  • アプリケーションの再起動
ターミナル
プロセスの確認
[インスタンス<アプリケーション名>]$ ps aux | grep unicorn
=> 左から2つ目の数字がプロセスID

プロセスの停止
[インスタンス<アプリケーション名>]$ kill <unicorn_rails masterのプロセスID>

再度アプリケーションの起動
[インスタンス<アプリケーション名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

「RAILS_SERVE_STATIC_FILES=1」はコンパイルしたアセットファイルを見つけられるように指定する役割

ブラウザに<Elastic IP>を入力し、アプリケーションが表示されれば成功です。

※Elastic IPのような数字の羅列が嫌な場合はAWSマネジメントコンソールのVPCでDNSの設定をしてください。

最後に

本投稿が初学者の復習の一助となればと幸いです。