Статьи

Развертывание Rails с Phusion Passenger и Nginx за 5 минут

Когда я только начинал с RoR, я удивлялся, как разработчики так легко развернули свое приложение. Вот руководство, которое может пригодиться, если вы хотите развернуть приложение Rails с Nginx, не делая весь процесс утомительным. Я мог бы сделать это за 5 минут, а вы?

Phusion Passenger / mod_rails

Phusion Passenger — это надежный модуль для серверов Apache и Nginx, который предпочтительнее любого другого модуля для развертывания веб-приложений, разработанных с использованием инфраструктуры Rails. Но если вы используете платформу Microsoft Windows, вам, возможно, придется искать другие альтернативы, поскольку Phusion Passenger совместим с чем угодно, кроме Windows. В этом уроке я буду использовать Ubuntu, но вы можете использовать все что угодно в стиле Unix.

Выбирай между nginx и Apache

Apache и Nginx являются широко распространенными веб-серверами. Хотя Apache является наиболее известным веб-сервером, основанным на процессах, Nginx наиболее подходит, если вам нужен быстрый и быстро реагирующий сервер. Он совершает чудеса, когда сервер находится под большой нагрузкой.

В этом посте я буду полагаться на сервер Nginx, но если в вашем стеке есть Apache, метод подключения не сильно отличается от Nginx.

Развертывание приложения Rails с Phusion Passenger и Nginx

Сначала загрузите последнюю стабильную версию Nginx с nginx.org. Вам понадобится его исходный код, чтобы установить модуль Nginx позже. Я буду использовать nginx-1.0.15, который является последней стабильной версией на момент написания этого руководства.

cd /tmp
wget http://nginx.org/download/nginx-1.0.15.tar.gz
tar -xvzf nginx-1.0.15.tar.gz

Предполагая, что у вас установлены Ruby, Rails и RubyGems, введите следующий код для установки Gem для пассажиров Phusion.

gem install passenger

Теперь вам нужно настроить Nginx для работы с Passenger. Запустите следующую команду в вашей любимой оболочке.

 passenger-install-nginx-module

Интерактивный установщик проведет вас через все, и вы получите полностью функциональный сервер Nginx всего за несколько минут. Я нашел установщик довольно забавным в использовании. Если что-то пойдет не так, вы получите уведомление об этом, и установщик покажет вероятную причину, а также решение для ее устранения. Чего еще ожидать?

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

При появлении запроса укажите расположение исходного кода nginx, который мы скачали ранее. В нашем случае это /tmp/nginx-1.0.15. Следующие несколько шагов говорят сами за себя.

Если все идет хорошо, вы должны увидеть что-то вроде «Nginx с поддержкой Passenger был успешно установлен». Установщик может отредактировать ваш файл конфигурации Nginx, чтобы добавить фрагмент кода, или вам, возможно, придется сделать это вручную. В любом случае, вы будете уведомлены об этом.

Меня попросили настроить это сам, и вот что это побудило меня сделать. (Код, приведенный ниже, может варьироваться от пользователя к пользователю).

 Please edit your Nginx configuration file (probably /opt/nginx/conf/nginx.conf),
http {
...
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.11;
passenger_ruby /usr/lib/ruby1.8;
...
}
server {
listen 80;
server_name www.yourhost.com;
root /somewhere/public; #
passenger_enabled on;
}

Скопируйте вышеуказанный контент в ваш файл nginx.config и замените «где-нибудь» (упомянуто выше) абсолютным путем к вашему приложению.

Вот как выглядит (моя) финальная конфигурация;

 worker_processes 1;
events {
worker_connections 1024;
}
http {
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.11;
passenger_ruby /usr/bin/ruby1.8;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name myapplication.com;
root /home/root/application/public;
passenger_use_global_queue on;
passenger_enabled on;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

Установите среду базы данных и перезапустите сервер nginx, используя следующую

 sudo /etc/init.d/nginx restart


Вуаля! На этом все и поздравляю. Вы успешно развернули свое приложение rails.

Введя URL своего приложения в браузер, и, надеюсь, вы обнаружите, что он работает. Если вы не видите его работающим или попадаете на страницу с ошибкой, проверьте файл error.log Nginx (можно найти в файле nginx.log) или файл журнала приложения для получения дополнительной информации. Это может быть потому, что вы пропустили определенный драгоценный камень или определенные зависимости не были удовлетворены.