Для развёртывания приложений 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