Развёртывание Rails-приложения при помощи Passenger и Nginx в Ubuntu 14.04

Для развёртывания приложений Ruby on Rails необходим надёжный веб-сервер. Данное руководство поможет установить Passenger и Nginx для поддержки Rails-приложения в Ubuntu 14.04. Сервер Passenger прост в установке, поддержке и управлении и легко взаимодействует с Nginx или Apache.

Примечание: Также для развёртывания Rails-приложения можно использовать связку Nginx+Unicorn.

Требования

Для начала понадобится свежий сервер Ubuntu 14.04. Для небольшого сайта вполне достаточно 512 MB.

Также нужно создать пользователя с доступом к sudo. В этом руководстве такой пользователь называется rails; если вы используете аккаунт с другим именем, пожалуйста, откорректируйте команды.

Все необходимые инструкции можно найти в этом руководстве.

Кроме того, для развёртывания сайта необходим домен (хотя в данном случае это требование опционально, поскольку сайт также моно найти по IP-адресу). Чтобы сайт был доступен в сети, нужно создать DNS-запись и привязать доменное имя к серверу.

1: Установка 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). Посетите эту страницу и найдите последнюю версию 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

Запустите утилиту make, которая использует Makefile для сборки программы. Это займёт некоторое время.

make

Затем запустите следующую команду, чтобы установить программу. Команда скопирует скомпилированные двоичные файлы в папку /usr/local/bin. Это действие требует root-доступа.

sudo make install

Теперь установка Ruby завершена. Чтобы убедиться, что она прошла должным образом, запустите следующую команду:

ruby -v

Команда должна вернуть версию установленной программы.

После этого удалите временный каталог:

rm -rf ~/ruby

2: Установка Passenger и Nginx

Установить Passenger можно через RubyGems (passenger-install-nginx-module) или при помощи стандартного пакетного менеджера системы APT. Последний вариант удобнее, так как он позволяет управлять установкой и – что ещё более важно – процессом обновления Passenger и Nginx.

Итак, для начала установите PGP-ключ:

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

Создайте исходный файл APT:

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

Установите Passenger и Nginx:

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

3: Настройка веб-сервера

Откройте конфигурационный файл 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;

Сохраните и закройте файл.

4: Развёртывание

Теперь можно приступать к развёртыванию Rails-приложения. Если у вас есть готовое приложение, можете загрузить его на сервер и перейти к настройке /etc/nginx/sites-available/default.

Можно также создать новое приложение на сервере. Для этого нужно установить 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

Запустите установку:

bundle install

Отключите стандартную конфигурацию 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-каталог проекта. Строка root должна содержать расположение установки приложения Rails.

Если вы не хотите настраивать домен приложения, пропустите строку server_name или укажите в ней IP сервера.

Теперь можно протестировать работу приложения, открыв страницу 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

Теперь можно получить доступ к вебсайту. В браузере кажите домен или IP:

http://ip_address

На экране должна появиться страница приложения Rails

5: Обновление программ

Чтобы обновить Ruby, нужно будет собрать последнюю доступную версию из исходного кода (как показано в разделе 2 данного руководства).

Чтобы обновить Passenger и Nginx, запустите стандартное обновление системы:

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

Однако при этом Ruby может обновиться до последней версии, а это приведёт к ошибке в путях. Поэтому следует проверить пути и указать правильный путь на Ruby, создав символьную ссылку на бинарный файл (см. раздел 3).

После обновления нужно перезапустить веб-сервер:

sudo service nginx restart

Tags: , , , ,

Добавить комментарий