【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 접속할 수 있었다! !
※올레올레 증명서는 어디까지나 개발용이나 공부용으로 사용하는 것
Reference
이 문제에 관하여(【AWS】nginx + puma에서 rails 앱 공개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t_n1005/items/c642bef37d68b49fba4d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)