GrabDuck

Размещение Rails приложения на Ubuntu 14.04 и серверах Apache и Passenger / DEVACADEMY

:

Требования

Думаю, что стоит взять образ 32 битной Ubuntu, так как эта система потребляет гораздо меньше памяти чем её 64 битный аналог (примерно в два раза). Тем не менее, если вам нужна более мощная станция или вы планируете добавлять память размером болльше 4 ГБ, то тогда следует рассмотреть Ubuntu 64.

Используйте только Ubuntu 14.04, так как на момент написания этой статьи Ubuntu 14.10 не имеет в своих хранилищах Passenger APT репозиторий. Так же Ubuntu 14.04 это LTS релиз, что означает, что её поддержка будет осуществляться куда дольше, чем у 14.10. Такие релизы изначально задуманы таким образом, чтобы люди могли дольше его использовать без переустановок. Ubuntu гарантирует выпуск обновлений для этих версий в течение пяти лет.

Шаг 1 – добавляем sudo пользователя

После создания сервера следует позаботиться о системном пользователе и безопасности сервера в целом. Если вы планируете создавать сервер с нуля, то вам определенно понадобится пользователь с sudo правами. Мы назовем его rails. Если ваш пользователь назван другим именем, то не забывайте изменять последующие команды в соответствии с ним.

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

Для того, чтобы ваш сайт был доступен из вне, вам понадобится создать соответствующие DNS записи, чтобы те указывали на ваш новый сервер. Тем не менее, вы все ровно будете иметь доступ к своему сайту по IP адресу.

Шаг 3 — установка 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 libsqlite3-dev sqlite3

Создадим временный каталог для хранения исходных файлов Ruby.

mkdir ~/ruby

Перейдем в только что созданный каталог

cd ~/ruby

Загрузим последнюю стабильную версию Ruby. На момент публикация это — 2.1.4. Текущую версию вы всегда найдете на официальном сайте Ruby. Если будет доступна более свежая версия, то измените ссылку в следующей команде.

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

Разархивируем

tar -xzf ruby-2.1.4.tar.gz

Перейдем в разархивированный каталог:

cd ruby-2.1.4

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

./configure

Теперь запустим утилиту make, которая в свою очередь при помощи Makefile создаст исполняемый файл. Её выполнение займет определенное время.

make

Теперь еще раз выполним предыдущую команду, но на этот раз передадим ей параметр install. Она попытается скопировать скомпилированные бинарные файлы в каталог /usr/local/bin/. При выполнении этой команды вам понадобятся администраторские права.

sudo make install

Теперь на вашей системе должна находится установленная версия Ruby. Проверить правильность установки можно следующим образом:

ruby -v

В ответ вы должны увидеть примерно следующее

ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]

Теперь можно удалить наш временный каталог:

rm -rf ~/ruby

Шаг 4 — установка Apache

Для установки Apache достаточно выполнить следующую команду:

sudo apt-get install apache2

Вот и всё.

Шаг 5 — установка Passenger

Сначала установим PGP ключ для репозитория

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

Теперь создадим файл c APT записями"

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

Разместите в нем следующую строку, чтобы добавить репозиторий Passenger:

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

Нажмите CTRL+X чтобы выйти из программы, затем Y для сохранения файла и ENTER. Измените владельца и права файла, ограничив к нему доступ только для пользователя root.

Обновляем APT кеш:

sudo apt-get update

Наконец, устанавливаем Passenger:

sudo apt-get install libapache2-mod-passenger

Включите Passenger модуль для Apache, если он еще не активирован:

sudo a2enmod passenger

Перезапустите Apache:

sudo service apache2 restart

После этого шага путь к новому Ruby будет изменен на более старую версию. Для решения этой проблемы просто замените неправильную ссылку на верную:

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

Шаг 6 — размещение приложения

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

Мы с вами создадим тестовое приложение прямо на сервере. Для этого нам понадобится rails gem.

Перейдите в свой домашний каталог

cd ~

Установите rails gem, опустив документацию, что ускорит процесс установки.

/etc/apache2/sites-available/default

Теперь приступим к созданию приложения. Давайте назовем его testapp. Если вы хотите использовать другое имя, то не забывайте изменять его в последующих командах. Пока пропустим установку Bundler, так как мы её осуществим позднее вручную.

rails new testapp --skip-bundle

Перейдем в созданный каталог

cd testapp

Теперь установим среду исполнения для JavaScript. Её можно установить посредством therubyracer gem. Для этого откроем файл Gemfile.

nano Gemfile

Найдите строку

# gem 'therubyracer',  platforms: :ruby

Расскоментируйте её

gem 'therubyracer',  platforms: :ruby

Сохраните файл и запустите Bunbler

bundle install

Теперь создадим файл виртуального хоста для нашего проекта. Скопируйте файл настройки дефолтного хоста Apache.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/testapp.conf

Откройте файл настройки:

sudo nano /etc/apache2/sites-available/testapp.conf

Внесите нужные изменения, чтобы, в итоге, ваш файл выглядел следующим образом. Требуемые изменения выделены красным. Не забывайте использовать ваше доменное имя и правильный путь к вашему Rails приложению.

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@localhost
    DocumentRoot /home/rails/testapp/public
    RailsEnv development
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory "/home/rails/testapp/public">
        Options FollowSymLinks
        Require all granted
    </Directory>
</VirtualHost>

Теперь сервер отслеживает запросы к вашему доменному имени на 80 порту. В файле настройки указан синоним доменного имени с www, установлен адрес почты администратора, корневой каталог доступной части приложения и открыт доступ к сайту.

Для проверки настройки, мы проверим наличие приветственной страницы Rails. Но такой подход работает только в случае, если приложение запущено в среде разработки. Passenger по-умолчанию запускает приложения в полноценном рабочем режиме, изменим это при помощи опции RailsEnv. Если ваше приложение готово к рабочему запуску, то не используйте эту опцию.

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

Сохрание файл (CTRL+X, Y, ENTER).

Отключите сайт 000-default, активируйте свой сайт и перезапустите Apache:

sudo a2dissite 000-default
sudo a2ensite testapp
sudo service apache2 restart

Теперь ваша страница должна быть доступна. Перейдите в браузере на адрес вашего сервере

http://server_ip_address

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

Теперь ваше приложение полностью размещено на сервере.

Шаг 7 — всегда обновляйтесь

Для обновления Ruby вам потребуется скомпилировать новую версию как показано в шаге 4. Для обновления Passenger или Apache, просто выполните стандартную процедуру обновления пакетов вашей ОС.

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

Не забывайте, что если будет доступна более свежая системная версия Ruby, то она перепишет установленную вами. В таком случае просто повторите шаги по корректировке символической ссылки на нужную вам версию. Этот процесс описан в шаге 6.

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

sudo service apache2 restart