Поиск по сайту:

Как развернуть приложение Rails с помощью Passenger и Nginx в Ubuntu 14.04


Введение

Если вы разработчик Ruby on Rails, вам, вероятно, нужен веб-сервер для размещения ваших веб-приложений. В этом руководстве показано, как использовать Phusion Passenger в качестве дружественного к Rails веб-сервера. Passenger прост в установке, настройке и обслуживании, и его можно использовать с Nginx или Apache. В этом руководстве мы установим Passenger с Nginx на Ubuntu 14.04.

Альтернативный метод развертывания вашего приложения Rails — это Unicorn, HTTP-сервер, который может обрабатывать несколько запросов одновременно.

К концу этого руководства у вас будет тестовое приложение Rails, развернутое на вашем веб-сервере Passenger/Nginx и доступное через домен или IP-адрес.

Шаг первый — создайте свою каплю

Создайте новую каплю Ubuntu 14.04. Для небольших сайтов достаточно взять план на 512 МБ.

Вы можете выбрать 32-битный образ Ubuntu из-за меньшего потребления памяти (64-битные программы используют примерно на 50% больше памяти, чем их 32-битные аналоги). Однако, если вам нужна машина большего размера или есть вероятность, что вы обновитесь до более чем 4 ГБ ОЗУ, вам следует выбрать 64-разрядную версию.

Шаг второй — добавьте пользователя Sudo

После создания дроплета требуется дополнительная работа по системному администрированию. Вы должны создать системного пользователя и защитить сервер.

Следуйте статье Начальная настройка сервера.

В этом руководстве вы должны создать обычного пользователя с привилегиями sudo. В этом примере мы будем использовать пользователя rails. Если у вашего пользователя другое имя, убедитесь, что вы используете правильные пути в следующих шагах.

Шаг третий (необязательно) — настройте свой домен

Чтобы убедиться, что ваш сайт будет работать и отображаться, вам необходимо настроить записи DNS, чтобы указать ваше доменное имя на ваш новый сервер. Вы можете найти больше информации о настройке имени хоста, перейдя по ссылке.

Однако этот шаг не является обязательным, так как вы можете получить доступ к своему сайту через IP-адрес.

Шаг четвертый — установите 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

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

make

Теперь запустите ту же команду с параметром install. Он попытается скопировать скомпилированные двоичные файлы в папку /usr/local/bin. Этот шаг требует корневого доступа для записи в этот каталог. Также потребуется немного времени:

sudo make install

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

ruby -v

Наконец, мы можем удалить временную папку:

rm -rf ~/ruby

Шаг пятый — установите Passenger и Nginx

В прошлом предпочтительным методом установки Passenger была обычная установка через RubyGems (passenger-install-nginx-module).

Однако теперь вы можете установить Passenger на Ubuntu с помощью Advanced Packaging Tool (APT), который мы и будем использовать. Таким образом, установка и, что еще более важно, процесс обновления Passenger с 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

Наконец, установите 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

Шаг шестой — настройте веб-сервер

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

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

Шаг седьмой — развертывание

На этом этапе вы можете развернуть собственное приложение Rails, если оно у вас есть. Если вы хотите развернуть существующее приложение, вы можете загрузить свой проект на сервер и перейти к шагу /etc/nginx/sites-available/default.

В этом руководстве мы создадим новое приложение Rails непосредственно в дроплете. Нам понадобится гем rails для создания нового приложения.

Перейдите в домашний каталог вашего пользователя (иначе вы получите сообщение об ошибке Нет такого файла или каталога - getcwd) –

cd ~

Установите гем рельсов (без дополнительной документации, чтобы установить его быстрее). Это все равно займет несколько минут:

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

Теперь мы можем создать новое приложение. В нашем примере мы будем использовать имя testapp. Если вы хотите использовать другое имя, убедитесь, что вы используете правильные пути. Мы пропустим установку Bundler, потому что хотим запустить ее вручную позже.

rails new testapp --skip-bundle

Войдите в каталог:

cd testapp

Теперь нам нужно установить среду выполнения JavaScript. Его можно установить как гем therubyracer. Чтобы установить его, откройте 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 на борту. Однако это работает только в том случае, если приложение запущено в среде разработки. 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://droplet_ip_address

И проверьте результат:

Вы должны увидеть тестовое приложение Rails на своем сервере.

Шаг восьмой — регулярно обновляйте

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

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

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

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

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

sudo service nginx restart