웹사이트 검색

Ubuntu 14.04에서 Passenger 및 Nginx와 함께 Rails 앱을 배포하는 방법


소개

Ruby on Rails 개발자라면 웹 앱을 호스팅할 웹 서버가 필요할 것입니다. 이 튜토리얼은 Phusion Passenger를 Rails 친화적인 웹 서버로 사용하는 방법을 보여줍니다. Passenger는 설치, 구성 및 유지 관리가 쉽고 Nginx 또는 Apache와 함께 사용할 수 있습니다. 이 튜토리얼에서는 Ubuntu 14.04에 Passenger with Nginx를 설치합니다.

Rails 앱을 배포하는 다른 방법은 여러 요청을 동시에 처리할 수 있는 HTTP 서버인 이 Unicorn을 사용하는 것입니다.

이 튜토리얼을 마치면 Passenger/Nginx 웹 서버에 배포되고 도메인 또는 IP 주소를 통해 액세스할 수 있는 테스트 Rails 애플리케이션을 갖게 됩니다.

1단계 — 물방울 만들기

새 Ubuntu 14.04 Droplet을 만듭니다. 소규모 사이트의 경우 512MB 계획으로 충분합니다.

메모리 사용량이 적기 때문에 32비트 Ubuntu 이미지를 선택하는 것이 좋습니다(64비트 프로그램은 32비트 프로그램보다 약 50% 더 많은 메모리를 사용함). 그러나 더 큰 시스템이 필요하거나 4GB 이상의 RAM으로 업그레이드할 가능성이 있는 경우 64비트 버전을 선택해야 합니다.

2단계 - Sudo 사용자 추가

Droplet이 생성된 후에는 추가적인 시스템 관리 작업이 필요합니다. 시스템 사용자를 만들고 서버를 보호해야 합니다.

초기 서버 설정 문서를 따르십시오.

이 자습서에서는 sudo 권한이 있는 기본 사용자를 생성해야 합니다. 이 예에서는 rails 사용자를 사용합니다. 사용자 이름이 다른 경우 다음 단계에서 올바른 경로를 사용해야 합니다.

3단계(선택 사항) - 도메인 설정

사이트가 제대로 작동하고 표시되도록 하려면 도메인 이름이 새 서버를 가리키도록 DNS 레코드를 설정해야 합니다. 링크를 따라 호스트 이름 설정에 대한 자세한 정보를 찾을 수 있습니다.

그러나 IP 주소를 통해 사이트에 액세스할 수 있으므로 이 단계는 선택 사항입니다.

4단계 — Ruby 설치

소스에서 Ruby를 수동으로 설치합니다.

다른 작업을 수행하기 전에 업데이트를 실행하여 설치하려는 모든 패키지가 최신 상태인지 확인해야 합니다.

sudo apt-get update

다음으로 일부 종속 항목을 설치합니다. 이렇게 하면 설치가 최대한 순조롭게 진행됩니다.

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3

Ruby 소스 파일을 위한 임시 폴더를 만듭니다.

mkdir ~/ruby

새 폴더로 이동:

cd ~/ruby

안정적인 최신 Ruby 소스 코드를 다운로드합니다. 이 글을 쓰는 시점에서 이것은 버전 2.1.3입니다. Download Ruby 웹사이트에서 현재 최신 버전을 받을 수 있습니다. 최신 버전을 사용할 수 있는 경우 다음 명령에서 링크를 바꿔야 합니다.

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz

다운로드한 파일의 압축을 풉니다.

tar -xzf ruby-2.1.3.tar.gz

추출된 디렉터리를 선택합니다.

cd ruby-2.1.3

configure 스크립트를 실행합니다. 종속성을 확인하고 코드를 컴파일하는 데 필요한 단계가 포함된 새 Makefile을 생성하므로 시간이 다소 걸립니다.

./configure

Makefile을 사용하여 실행 가능한 프로그램을 빌드할 make 유틸리티를 실행합니다. 이 단계는 조금 더 오래 걸릴 수 있습니다.

make

이제 install 매개변수를 사용하여 동일한 명령을 실행합니다. 컴파일된 바이너리를 /usr/local/bin 폴더에 복사하려고 시도합니다. 이 단계에서는 이 디렉터리에 쓰기 위해 루트 액세스 권한이 필요합니다. 또한 약간의 시간이 걸립니다.

sudo make install

이제 Ruby가 시스템에 설치되어야 합니다. Ruby 버전을 인쇄하는 다음 명령으로 확인할 수 있습니다.

ruby -v

마지막으로 임시 폴더를 삭제할 수 있습니다.

rm -rf ~/ruby

5단계 - Passenger 및 Nginx 설치

과거에 Passenger를 설치하는 데 선호되는 방법은 RubyGems(passenger-install-nginx-module)를 통한 일반 설치를 사용하는 것이었습니다.

그러나 이제 우리가 사용할 고급 패키징 도구(APT)를 사용하여 Ubuntu에 Passenger를 설치할 수 있습니다. 이러한 방식으로 Passenger with Nginx의 설치와 더욱 중요한 업데이트 프로세스는 정말 간단합니다.

먼저 PGP 키를 설치합니다.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

APT 소스 파일을 생성합니다(sudo 권한이 필요함).

sudo nano /etc/apt/sources.list.d/passenger.list

그리고 파일에 다음 줄을 삽입합니다.

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

Ctrl+x를 눌러 종료하고 y를 입력하여 파일을 저장한 다음 Enter 키를 눌러 파일 위치를 확인합니다.

이 파일의 소유자 및 권한을 변경하십시오.

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

APT 캐시 업데이트:

sudo apt-get update

마지막으로 Nginx와 함께 Passenger를 설치합니다.

sudo apt-get install nginx-extras passenger

이 단계는 Ruby 버전을 이전 버전으로 덮어씁니다. 이 문제를 해결하려면 잘못된 Ruby 위치를 제거하고 올바른 Ruby 바이너리 파일에 대한 새 심볼릭 링크를 만드십시오.

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

6단계 - 웹 서버 설정

Nginx 구성 파일을 엽니다.

sudo nano /etc/nginx/nginx.conf

http 블록에서 다음 줄을 찾습니다.

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

둘 다 주석을 해제합니다. passenger_ruby 줄에서 경로를 업데이트합니다. 다음과 같아야 합니다.

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;

파일을 저장하고 종료합니다.

7단계 - 배포

이 시점에서 자체 Rails 애플리케이션이 준비되어 있으면 배포할 수 있습니다. 기존 앱을 배포하려는 경우 프로젝트를 서버에 업로드하고 /etc/nginx/sites-available/default 단계로 건너뛸 수 있습니다.

이 자습서에서는 Droplet에서 직접 새 Rails 앱을 만듭니다. 새 앱을 만들려면 rails gem이 필요합니다.

사용자의 홈 디렉터리로 이동합니다(그렇지 않으면 No such file or directory - getcwd 오류가 표시됨) –

cd ~

rails gem을 설치합니다(빠른 설치를 위해 추가 문서 없이). 여전히 몇 분 정도 걸립니다.

sudo gem install --no-rdoc --no-ri rails

이제 새 앱을 만들 수 있습니다. 이 예에서는 testapp라는 이름을 사용합니다. 다른 이름을 사용하려면 올바른 경로를 사용해야 합니다. 나중에 수동으로 실행하고 싶기 때문에 Bundler 설치를 건너뜁니다.

rails new testapp --skip-bundle

디렉토리를 입력하십시오:

cd testapp

이제 JavaScript 실행 환경을 설치해야 합니다. therubyracer gem으로 설치할 수 있습니다. 설치하려면 Gemfile을 엽니다.

nano Gemfile

다음 줄을 찾으십시오.

# gem 'therubyracer',  platforms: :ruby

그리고 주석을 해제하십시오.

gem 'therubyracer',  platforms: :ruby

파일을 저장하고 Bundler를 실행합니다.

bundle install

기본 Nginx 구성을 비활성화해야 합니다. Nginx 구성 파일을 엽니다.

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

줄 찾기:

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

다음과 같이 주석 처리하십시오.

# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

파일을 저장합니다.

이제 앱에 대한 Nginx 구성 파일을 만듭니다.

sudo nano /etc/nginx/sites-available/testapp

다음 server 블록을 추가합니다. 설정은 아래에 설명되어 있습니다.

server {
  listen 80 default_server;
  server_name www.mydomain.com;
  passenger_enabled on;
  passenger_app_env development;
  root /home/rails/testapp/public;
}

이 파일에서 포트 80에서 수신 대기를 활성화하고, 도메인 이름을 설정하고, Passenger를 활성화하고, 루트를 새 프로젝트의 public 디렉토리로 설정합니다. root 줄은 Rails 앱의 업로드 위치와 일치하도록 편집하려는 줄입니다.

이 앱에 도메인을 할당하지 않으려면 server_name 행을 건너뛰거나 IP 주소를 사용할 수 있습니다.

설정을 테스트하기 위해 Rails Welcome aboard 페이지를 보고 싶습니다. 그러나 이는 응용 프로그램이 개발 환경에서 시작된 경우에만 작동합니다. Passenger는 기본적으로 프로덕션 환경에서 애플리케이션을 시작하므로 passenger_app_env 옵션으로 이를 변경해야 합니다. 앱이 프로덕션 준비가 된 경우 이 설정을 그대로 두는 것이 좋습니다.

파일을 저장합니다(CTRL+x, y, ENTER).

심볼릭 링크를 만듭니다.

sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp

Nginx를 다시 시작합니다.

sudo nginx -s reload

이제 앱의 웹사이트에 액세스할 수 있어야 합니다. Droplet의 도메인 또는 IP 주소로 이동합니다.

http://droplet_ip_address

결과를 확인합니다.

Rails 테스트 앱이 서버에 라이브로 표시되어야 합니다.

8단계 — 정기적으로 업데이트

Ruby를 업데이트하려면 이 튜토리얼의 4단계에 표시된 대로 최신 버전을 컴파일해야 합니다.

Nginx로 Passenger를 업데이트하려면 기본 시스템 업데이트를 실행해야 합니다.

sudo apt-get update && sudo apt-get upgrade

그러나 사용 가능한 새로운 시스템 Ruby 버전이 있는 경우 Ruby(소스에서 설치됨)를 덮어쓸 것입니다. 이러한 이유로 기존 버전의 Ruby를 제거하고 Ruby 바이너리 파일에 대한 새 심볼릭 링크를 생성하기 위한 명령을 다시 실행해야 할 수 있습니다. 이 자습서의 5단계 끝에 나열되어 있습니다.

업데이트 프로세스 후 웹 서버를 다시 시작해야 합니다.

sudo service nginx restart