Ключевые слова:ruby, rails, linux, web, mongrel, nginx, (найти похожие документы)
From: Алексей Васильев <leopard_ne[at]inbox.ru>
Date: Mon, 09 Feb 2009 17:02:14 +0000 (UTC)
Subject: Поднимаем продакшн сервер для ROR на Линукс (Debian, Ubuntu)
Оригинал: leopard.in.ua
Итак, разработали мы сайт на Ruby on Rails. Пора запустить его в свободное плаванье (в
продакшан). Для этого будем использовать: Debian (Ubuntu) - Линукс система на сервере,
nginx это HTTP-сервер и IMAP/POP3-прокси сервер. Отлично справляется с высокими
нагрузками.
Mongrel - это быстрая HTTP-библиотека и сервер для Ruby, предназначенные для хостинга
Ruby веб-приложений и использующая HTTP вместо FastCGI или SGI.
Mongrel_cluster - Gem плагин, предназначенный для упрощения развертывания веб
приложений, использующих кластер Mongrel серверов.
Понятное дело надо установить ruby, rails, mongrel, mongrel-cluster:
apt-get install ruby ruby-dev rails rubygems mongrel mongrel-cluster
После установки gem ставим mongrel
#gem install mongrel
#gem install mongrel_cluster
Для хранения рельсовых приложений я предпочел использовать централизованное место, поэтому
создал директорию /var/www/rails.
Переходим в эту директорию и создаем тестовое RoR приложение:
#rails demo
Генерируем конфигурационный файл для нашего приложения, используя команду mongrel_rails:
#cd /var/www/rails/demo
#mongrel_rails cluster::configure -e production -p 3000 -N 2 \
-c /var/www/rails/demo -a 127.0.0.1 \
-l log/mongrel.log -P /tmp/demo.pid \
-user www-data -group www-data
Опции:
* -e - Rails environment (в данном случае указываем production)
* -p - Mongrel будет слушать порты начиная с указанного порта до +(N-1) (т.е. в нашем
случае порты 3000 и 3001)
* -N - количестов Mongrel серверов
* -c - директория в которую перейдет Mongrel сервер перед запуском
* -a - IP адресс для прослушивания Mongrel сервером
* -l - лог файл
* -P - файл в который будет записан PID процесса (с версии mongrel_cluster 1.0.x должен
находится в каталоге /var/run/mongrel_cluster/)
* -user и -group - имя пользователя и группа от имени которых будут запущены Mongrel
серверы (я использую www-data, т.к. под этим пользователям работает nginx. Перед
запуском необходимо убедится, что данный пользователь имеет права записи в директорию с
приложением)
Для получения полной справки можно выполнить команду
mongrel_rails cluster::configure -h
После выполнения этой команды будет создан файл config/mongrel_cluster.yml
Настраиваем nginx.
Допустим мы хотим, чтобы наше RoR приложение было доступно по адресу demo.xxx.com.
Для этого изменяем nginx.conf следующим образом (или же создайте отдельный файл
конфигурации):
В основную конфигурацию сервера добавляем:
И добавляем виртуальный хост demo.xxx.com:
upstream mongrel {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name demo.xxx.com;
charset off;
location / {
root /var/www/rails/demo;
index index.html index.htm;
}
# / -> first search for local index.html then go to mongrel
location ~ ^/$ {
if (-f /index.html) {
rewrite (.*) /index.html last;
}
proxy_pass http://mongrel;
}
# rails caching: searching first for $action.html local pages
location / {
if (!-f $request_filename.html) {
proxy_pass http://mongrel;
}
rewrite (.*) $1.html last;
}
# serve static files directly
location ~ .html {
root /var/www/rails/demo/public;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ {
root /var/www/rails/demo/public;
}
# resend everything else to mongrel
location / {
proxy_pass http://mongrel;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Меняем
proxy_set_header Host $host;
на
proxy_set_header Host $http_host;
если $server_port != 80
Перезапускаем сервер:
#/etc/init.d/nginx restart
и запускаем mongrel_cluster
cd /var/www/rails/demo/
mongrel_cluster_ctl start -v -c config/
Для запуска монгрела можно создать скрипт отдельный, что бы он стартовал автоматом при
запуске системы. Думаю с этим уже разберетесь :)
Все, теперь мы видим по адресу demo.xxx.com стартовую страничку нашего RoR приложения