【AWS】nginx + puma에서 rails 앱 공개

소개



rails로 뭐라고 LINEbot을 만들었으므로,
nginx + puma로 rails 앱 공개하는 설정을 해본다.

EC2 인스턴스 구축



여기를 참조하여 EC2 인스턴스를 설정합니다.

참고: AWS EC2로 웹 서버를 구축해 보기
htps : // 코 m / 줄거리 / ms / 629 굳 d33401b8f2265c

git이나 rails 등 개발에 필요한 것은 먼저 설정해 둔다



Rails 앱의 위치 확인



홈 디렉토리 아래에 Rails 앱이 있다면
"/opt"아래로 이동하거나 복사합니다.
공개하는 앱을 두는 장소로서 홈 디렉토리는 적절하지 않기 때문에 주의.
※ 홈 디렉토리를 유지하면 권한 오류로 빠지기 쉽습니다.

Rails 앱 복사
# コピーする場合
$ sudo cp -arf ~/rails/rails_app/opt/
# ファイルを確認
$ ls -al /opt/
drwxr-xr-x  5 root     root     4096  7 15 13:59 .
dr-xr-xr-x 25 root     root     4096  7 16 06:02 ..
drwxrwxr-x 13 ec2-user ec2-user 4096  7 15 13:57 rails_app

Nginx 설정



우선 설치

Nginx 설치
$ sudo yum install -y nginx

버전 확인
$ nginx -v
nginx version: nginx/1.16.1

설정 파일에 설정 쓰기

/etc/nginx/conf.d/rails.conf
server {
    listen       80;
    server_name  localhost;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    root /opt/rails_app/public;

    # ドキュメントルート配下を以下の先頭から順番に辿る
    try_files $uri @rails_app;

    # 上記の@rails_appが呼び出された場合のみ以下の設定を読み込む
    location @rails_app {
        proxy_pass http://rails_app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
    }
}

일단 움직여 보자.

시작
$ sudo nginx

정지
$ sudo nginx -s stop

오! ! 움직였다! !



Puma의 소켓 통신 설정



Rails (Puma)와 Nginx를 함께 작동시키기 위해 Puma 구성 파일을 수정합니다.
※홈 아래에 Rails 앱이 있으면 Nginx는 Puma와 소켓 통신할 수 없으므로 주의

/opt/rails_app/config/puma.rb
#ここをコメントアウトする
#port        ENV.fetch("PORT") { 3000 }

#この行を追加
bind "unix:///opt/rails_app/tmp/sockets/puma.sock"

rails.conf에도 연계 부분을 추가

/etc/nginx/conf.d/rails.conf
#下記コード追加
upstream rails_app {
    # UNIXドメインソケット通信の設定
    server unix:///opt/rails_app/tmp/sockets/puma.sock fail_timeout=0;
}


rails를 실행하면 연계된다・・・.

오류
Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

왓! ! 어쨌든 화가났다.

Ruby on Rails 6에서 SQLite를 사용하는 경우 SQLite3.8 이상이 필요할 것 같습니다.
SQLite의 패키지는 3.7이 들어 있다···.
SQLite의 최신 버전을 설치하고 해결합니다.
# 3.29をダウンロード
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz

$ tar xzvf sqlite-autoconf-3290000.tar.gz

$ cd sqlite-autoconf-3290000

# もとから入っているsqliteと競合しないように /opt/sqlite/sqlite3 にインストールします
$ ./configure --prefix=/opt/sqlite/sqlite3

$ make

$ sudo make install

# バージョン確認
$ /opt/sqlite/sqlite3/bin/sqlite3 --version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6

# sqlite3のgemを入れ直し
$ gem uninstall sqlite3

# 上記でいれたlibとincludeのパスを指定してinstall
$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \
   --with-sqlite3-lib=/opt/sqlite/sqlite3/lib

다시 rails를 움직여 보자・・・.

오! ! 움직였다! !



SSL 설정! 올레올레 인증서 만들기



그런 다음 SSL도 설정합시다.

OpenSSL 설치



OpenSSL 확인 및 설치
# opensslのバージョンを確認
$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

# バージョンが表示されなければインストール
$ sudo yum install -y openssl

디렉토리 작성
$ sudo mkdir /etc/nginx/ssl

개인 키 만들기


$ sudo openssl genrsa -out /etc/nginx/ssl/server.key 2048

CSR(인증서 서명 요청) 만들기



개인 키에서 "CSR(인증서 서명 요청)"만들기

국가 코드나 주소, 회사명 등을 입력하라는 메시지가 표시되지만, 자체 서명 증명서라면 불필요하므로 아무것도 입력하지 않고 Enter로 건너뜁니다.

CSR 만들기
$ sudo openssl req -new -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.csr

CRT(SSL 서버 인증서) 만들기



본래라면, 방금전의 CSR을 인증국에 등록해, 「CRT(SSL 서버 증명서)」를 발행해 주겠습니다만, 이번은 「올레올레(자기 서명) 증명서」를 만들어 이 머신 내에서 완결

CRT 만들기
# CRT(有効期限10年)を作成
$ sudo openssl x509 -days 3650 -req -signkey /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr -out /etc/nginx/ssl/server.crt

# CRTが生成されたことを確認
$ ls -l /etc/nginx/ssl/
合計 12
-rw-r--r-- 1 root root 1103  7 14 11:52 server.crt
-rw-r--r-- 1 root root  952  7 14 11:52 server.csr
-rw-r--r-- 1 root root 1675  7 14 11:51 server.key

Nginx에 인증서 설정



/etc/nginx/conf.d/rails.conf
server {
    # 443番ポートを許可し、SSL機能をON
    # listen 80;
    listen 443 ssl;
    server_name  {#server_name};

    # 証明書を設定
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
         
         
}


재부팅
$ sudo restart nginx

SSL 접속할 수 있었다! !
※올레올레 증명서는 어디까지나 개발용이나 공부용으로 사용하는 것

좋은 웹페이지 즐겨찾기