🦦

デプロイを完了させよ〜[完]

2024/08/13に公開

前提として、今更だけど。

今回は、WebサーバーNginxの設定

Nginx(webサーバー)の設定ファイルを編集

-/etc/nginx/nginx.conf/etc/nginx/conf.d/アプリケーション名.confの2つのファイルを編集する。

nginx.conf編集

[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ sudo vi /etc/nginx/nginx.conf
viの基本操作手順

編集モードとコマンドモード

  • 編集モード
    文字を入力するモード

  • コマンドモード
    vi起動時の初期モード。
    文字入力以外の操作はコマンドモード。
    例)文字間の移動、文字の検索、置換、ファイルの保存、viの終了

  • このコマンド切り替えは、[escキー]を押すと切り替わる。
    自分がどっちにいるかわからない場合は、とりあえず[escキー]を押す。

  • 文字入力を開始するときは、[iキー]

  • 文字を削除する場合は、[xキー]

ファイルの保存/終了

  • 保存/終了は、[:wq]で出来る。
  • 内容保存のみの場合は[:w]
  • 保存せずに終了は[:q!]
/etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

#user nginx;
user ec2-user;

worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    #index   index.html index.htm;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

:
:
  1. user nginx;の行をコメントアウト。
  2. user ec2-user;を追記する

.confの編集

  1. /etc/nginx/conf.d/アプリケーション名.confを作成する。
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ sudo vi /etc/nginx/conf.d/アプリケーション名.conf
  • viエディタが開いたら、
    :set pasteを入力してエンター。
    これを記述してから、コピー&ペーストすると、インデントが崩れなくて済む。
    コピー&ペーストしたら、:set paste消さないと、後で、構文チェックの時にエラーが出てしまう。注意⚠️
/etc/nginx/conf.d/アプリケーション名.conf
upstream puma {
  server unix:///home/ec2-user/アプリケーション名/tmp/sockets/puma.sock;
}
server {
  listen       80;
  server_name  EC2のパブリックIPv4アドレスもしくはドメイン取得している方はドメイン名を設定;
  root /home/ec2-user/アプリケーション名/public;
  access_log  /var/log/nginx/access.log  main;
  error_log /var/log/nginx/error.log;
  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on; 
  keepalive_timeout   65;
  types_hash_max_size 2048;
  client_max_body_size 100M;
  include             /etc/nginx/mime.types;

  location / {
    proxy_pass http://puma;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_connect_timeout 30;
  }

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
    root /home/ec2-user/アプリケーション名/public;
  }

  location ^~ /packs/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
    root /home/ec2-user/アプリケーション名/public;
  }
}

設定ファイル構文チェック

[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ sudo nginx -t

結果が↓なら、問題ない。(test is successful)

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

/var/lib/nginxの権限をnginxの実行ユーザーにする。

[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ sudo chown -R ec2-user /var/lib/nginx
  • nginx.confで実行ユーザーをec2-userに変更しているため、
    権限には、ec2-userを指定する。

Nginxの設定完。

ウェブサーバー(Nginx)を再起動

  • Nginxの設定を変更した時は、ウェブサーバーを再起動して、設定を反映させる。
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ sudo systemctl restart nginx

アプリケーションサーバー(Puma)を起動する

[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ rails s -e production

これで、パブリックIPv4アドレスをブラウザで入力したら、見れるはず。
エラー画面が表示された場合は対処してください。

  • nginxのエラーの場合
$ sudo tail /var/log/nginx/error.log
  • Railsのエラーの場合
    赤い看板みたいなやつ。
$ sudo tail -f log/production.log

Discussion