Запуск Rails приложений

Вариантов запуска Rails приложений существует несколько. Я выбрал такую схему:

  • все входящие запросы поступают на сервер nginx - это frontend;
  • статические файлы (графика, видео, css) nginx отдаёт сразу клиенту;
  • динамические запросы проксируются на кластер mongrel серверов - это backend;

Зачем нужен nginx можно прочитать здесь, сравнение производительности для разных способов запуска здесь.

Приступим к реализации этой схемы.

Для начала нужно установить весь необходимый софт:

1. Установка nginx, mongrel, ruby, rail в redhat 9

1.1. ставим ruby
#wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.6.tar.gz
#tar xvzf ruby-1.8.6.tar.gz
#cd ruby-1.8.6
#./configure --prefix=/usr
#make
#make install

1.2. ставим rubygems
#wget http://rubyforge.org/frs/download.php/20989/
rubygems-0.9.4.tgz
#tar zxf rubygems-0.9.4.tgz
#cd rubygems-0.9.4
#ruby setup.rb

1.3. ставим rails
#gem update
#gem install rails --include-dependencies

1.4. установка mongrel
#gem install mongrel
#gem install mongrel_cluster

1.5. установка nginx
#wget http://sysoev.ru/nginx/nginx-0.5.27.tar.gz
#tar zxf nginx-0.5.27.tar.gz
#cd nginx-0.5.27
#./configure
#make
#make install

Весь необходимый софт установлен приступаем к его настройке.

2. Настройка

Создаём тестовое rails приложение
#cd /www/mydomain.ru/
#rails demo

создаём пользователя и группу mongrel, настраиваем права доступа к файлам
#groupadd mongrel
#adduser -r -g mongrel mongrel
#chown -R mongrel:mongrel /www

Генерируем конфигурационный файл для mongrel-а
#mongrel_rails cluster::configure -e production -p 8001 -N 2 -c /www/demo -a 127.0.0.1 -l log/mongrel.log -P log/mongrel.pid --user mongrel --group mongrel

Запускаем mongrel из под пользователя apache, кластер из 2-ух процессов, порты соответственно 8001-8002. После этого будет создан файл config/mongrel_cluster.yml

настраиваем автозапуск mongrel-а
#mkdir /etc/mongrel_cluster
#ln -s /www/demo/config/mongrel_cluster.yml
/etc/mongrel_cluster/demo.yml
#cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/
resources/mongrel_cluster /etc/init.d/
#chmod +x /etc/init.d/mongrel_cluster
#chkconfig --level 345 mongrel_cluster on
#chkconfig --list | grep mongrel_cluster

пробуем запустить mongrel и проверяем
#/etc/init.d/mongrel_cluster start
#lynx http://127.0.0.1:8001/

при таком запуске будут стартовать все кластеры у которых файл настроек лежит в каталоге /etc/mongrel_cluster/

Итак mongrel стартует, теперь настраиваем фронтэнд nginx.
Настройки nginx лежат в файле /usr/local/nginx/conf/nginx.conf, изменяем настройки таким образом:


http {
 upstream mongrel {
  server 127.0.0.1:8001;
  server 127.0.0.1:8002;
 }
 server {
  listen 80;
  server_name mydomain.ru;
  location / {
  root /www/demo;
  index index.html index.htm;
 }
 location ~ ^/$ {
  if (-f /index.html) {
   rewrite (.*) /index.html last;
  }
  proxy_pass http://mongrel;
 }
 location / {
  if (!-f $request_filename.html) {
   proxy_pass http://mongrel;
  }
  rewrite (.*) $1.html last;
 }
 location ~ .html {
  root /www/demo/public;
 }
 location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|
gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|
midi|wav|bmp|rtf|js|mov)$ {
  root /www/demo/public;
 }
 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;
 }
}

запускаем nginx
#/usr/local/nginx/sbin/nginx

3. Ссылки

Настройка nginx+rails

Документация по nginx.

Зачем нужен nginx.
Тестирование производительности для разных вариантов запуска rails приложения.

Один комментарий на запись

  1. Блог о сети » Nginx production Пингбек:

    […] PuTTY Connection Manager (февраля 1, 2008) […]

Оставить комментарий »