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

Вступление

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

Альтернативный способ развертывания вашего Rails-приложения - это https://www.digitalocean.com/community/tutorials/how-to-use-the-1-click-ruby-on-rails-on-ubuntu-14-04. -image [1-Click Rails Installation], который использует Nginx с Unicorn, HTTP-сервер, который может обрабатывать несколько запросов одновременно.

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

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

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

изображение: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/1.png [размер капли]

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

изображение: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/2.png [изображение капли]

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

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

Следуйте статье Initial Server Setup.

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

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

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

Однако этот шаг не является обязательным, поскольку вы можете получить доступ к своему сайту через 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

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

./configure

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

make

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

sudo make install

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

ruby -v

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

rm -rf ~/ruby

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

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

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

Найдите следующие строки в блоке:

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/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 прямо в Droplet. Нам понадобится драгоценный камень * rails * для создания нового приложения.

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

cd ~

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

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

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

rails new testapp --skip-bundle

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

cd testapp

Теперь нам нужно установить среду исполнения JavaScript. Это может быть установлено как драгоценный камень. Чтобы установить его, откройте * 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 ;
 passenger_enabled on;
 passenger_app_env development;
 root ;
}

В этом файле мы включаем прослушивание через порт 80, задаем имя вашего домена, включаем Passenger и устанавливаем в качестве корня каталог public нашего нового проекта. Это строка, которую вы хотите отредактировать, чтобы она соответствовала местоположению загрузки вашего приложения Rails.

Если вы не хотите назначать свой домен этому приложению, вы можете пропустить строку или использовать свой IP-адрес.

Чтобы проверить наши настройки, мы хотим увидеть страницу Rails * Welcome onoard *. Однако это работает, только если приложение запущено в среде разработки. Пассажир по умолчанию запускает приложение в производственной среде, поэтому нам нужно изменить это с помощью опции + 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

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

изображение: https: //assets.digitalocean.com/articles/Rails_Passenger_Nginx/3.png [тестовая страница]

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

Шаг восьмой - Обновление регулярно

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

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

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

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

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

sudo service nginx restart
Related