IT & CODE 이야기

AWS Ubuntu 16.04 에 Rails Project를 nginx로 Deploy 하기 본문

CODE/Server

AWS Ubuntu 16.04 에 Rails Project를 nginx로 Deploy 하기

웃는아이 Karoid 2017. 1. 12. 04:42

AWS Ubuntu 16.04 에 Rails Project를 nginx로 Deploy 하기

1단계: RVM으로 Rails 설치

먼저 AWS에 Ubuntu instance를 받아서 SSH 접속을 합니다

우선 스무스한 진행을 위해 기본 파일을 받습니다.

sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev

다음 명령어를 연속으로 입력합니다.
이 과정은 RVM을 설치하여 rails를 받는 과정입니다.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 2.3.3
rvm use 2.3.3 --default

루비가 제대로 설치 되었는지 확인해 봅니다.

ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

이제 rails 를 설치합니다

gem install bundler
sudo apt-get install nodejs
gem install rails -v 5.0.0.1

2단계: Deploy할 Rails Project 설치

이제 알아서 Deploy할 프로젝트를 받습니다.
git을 이용하여 클론 하면 되겠죠?

다운을 받으셨다면 이제 프로젝트의 Gem을 깔도록 합니다

#디렉토리를 프로젝트 파일 안에 들어갑니다!
bundle install --deployment --without development test

이제 프로덕션 모드를 위해 secret key base 환경변수를 추가합니다

nano config/secrets.yml

이 명령어를 치면

production:
  secret_key_base: <%=ENV["SECRET_KEY_BASE"]%>

저기서 <%=ENV["SECRET_KEY_BASE"]%> 자리에 암호를 집어넣습니다.
Control + X, Y, Enter로 빠져나옵니다.

precompile 명령을 실행합니다

rake assets:precompile RAILS_ENV=production

3단계: Nginx 설치 및 설정

이제 Nginx를 설치하도록 하죠

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates

# Add Passenger APT repository
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

# Install Passenger & Nginx
sudo apt-get install -y nginx-extras passenger

한줄 한줄 명령어를 입력해서 nginx-extras 와 passenger 두 프로그램을 우분투에 받습니다.

sudo service nginx start

이 명령을 통해 서버에 접속하면 Nginx가 작동된다는 페이지가 나타나게 됩니다.

(이 페이지가 뜨지 않는다면 AWS Security groups에서 http경로가 inbound 규칙에 포함되지 않은 것입니다.)

이제 설정만 좀 만지면 거의 다 끝납니다! 힘내세요

sudo nano /etc/nginx/nginx.conf

다음 명령어로 문서 파일을 열어서,

##
# Phusion Passenger config
##
# Uncomment it if you installed passenger or passenger-enterprise
##

include /etc/nginx/passenger.conf;

#include /etc/nginx/passenger.conf; 앞에 붙어있는 #를 지워서 주석처리를 풀어주세요! 

(Control + X, Y, Enter로 빠져 나옵니다)

마지막 파일 설정만 하면 이제 Rails Project를 볼 수 있습니다.

$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/local/rvm/gems/ruby-2.3.3/wrappers/ruby
  Version: ruby 2.3.3p85 (2015-02-26 revision 49769) [x86_64-linux]
  ...

passenger-config about ruby-command라는 명령어를 치면 위와같이 밑에 주저리 주저리 말이 달리게 됩니다. 여기서 Command: 다음에 오는 경로를 기억해주세요 -REMEMBER

sudo nano /etc/nginx/sites-enabled/default

이 명령어로 안에있는 파일을 열면, 다음과 같이 바꿔주세요

server {
    listen 0.0.0.0:80 default_server;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /당신의_프로젝트_경로/public;

    # Turn on Passenger
    passenger_enabled on;
    rails_env    production;
    passenger_ruby 기억해 놓은 경로 넣는 위치;
}

당신의_프로젝트 경로 위치에는 프로젝트 폴더에서(아까 bundle install한 위치 있잖아요) 거기서 pwd라는 명령어로 경로를 얻어서 넣으시거나 잘 알고 계시다면 그냥 넣으시면 됩니다.
(저의 경우 /home/ubuntu/huhs.net 이었습니다)

기억해 놓은 경로 넣는 위치에는 제가 전단계에서 기억하라고 했던 경로를 넣으시면 됩니다.


자 이제 환경변수를 이 파일에 또 적어 넣어야 합니다.

Control + X, Y, Enter로 빠져 나오고,  rake secret 이라는 명령을 쳐서 비밀 키 값을 만들어냅니다. 이후 이 값을 복사해놓고

sudo nano /etc/nginx/sites-enabled/default

명령어로 다시 파일에 들어가서 비밀 키를 밑에 passenger_env_var 이라는 명령어로 SECRET_KEY_BASE 라는 환경변수의 값을 지정합니다.

또 다른 환경변수를 설정해야 한다면 밑에줄에 추가하시면 됩니다.

server {
    listen 0.0.0.0:80 default_server;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /당신의_프로젝트_경로/public;

    # Turn on Passenger
    passenger_enabled on;
    rails_env    production;
    passenger_ruby 기억해 놓은 경로 넣는 위치;

    passenger_env_var SECRET_KEY_BASE 비밀 키 입력!;
    passenger_env_var 다른 환경변수 환경변수의 값 입력;
}

Control + X, Y, Enter로 빠져 나옵니다.

sudo service nginx restart

이로써 Deploy 작업이 완료됩니다.


0 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 8 Next