Укладываем рельсы

Дата: 1.04.2009

Рубрики: *NIX, Technology, Интернет

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

Собственно все началось с просьбы клиента установить ему выше указанное приложение. Установка производилась на VDS под управлением VDSmanager c установленным ISPmanager, в котором уже имеется возможность создания сайтов для запуска Ruby on Rails. Создаем сайт, тащим с официального сайта дистрибутив, кладем на место, настраиваем, пытаемся запустить, плящем с бубном, в итоге получаем огромный тормоз при работе как FastCGI (про CGI, я вообще молчу). В общем заставить работать имеющимися в комплекте VDS средствами не получилось.

В общем для запуска я решил использовать связку Apache22 с mod_proxy + mongrel_cluster, получилось очень даже неплохо, а главное просто. В принципе никто не мешает вместо индейца с mod_proxy поставить в качестве фронтенда nginx или лайти (сегодня я этот вариант не рассматриваю).

И так, для начала ставим mongrel_cluster

# cd /usr/ports/www/rubygem-mongrel_cluster/
# make install clean

Качаем дистрибутив Redmine c официального сайта и кладем его в /home/user/data/www/domain.ru, здесь user — имя пользователя из ISPmanager, domain.ru — сайт, на который ставим.

Создаем базу, в моем примере — MySQL

mysql> create database redmine character set utf8;

Дальнейшую настройку я выполнял на уровне пользователя. Сначала конфигурируем приложение, конфиги хранятся в директории config, файл database.yml — конфигурация БД, файл email.yml — конфигурация отправки сообщений, выглядит это примерно так.

production:
adapter: mysql
database: redmine
host: localhost
username: bduser
password: bdpasswd

И вот так для email

production:
delivery_method: :smtp
smtp_settings:
address: domain.ru
port: 25
domain: domain.ru
authentication: :login
user_name: «robot@domain.ru»
password: «password»

Здесь прошу обратить внимание на параметр address: domain.ru. Redmine использует STARTTLS при подключении к серверу, поэтому тут нужно указывать домен, идентичный тому, на который выписан сертификат у sendmail'а. В случае VDS это будет его hostname.

Теперь нужно создать в базе структуру, заполнить ее, и инициализировать хранилище сессий.

% rake db:migrate RAILS_ENV="production"
% rake redmine:load_default_data RAILS_ENV="production"
% rake config/initializers/session_store.rb

С самим Redmine все. При желании можно потестить запустив

% ruby script/server webrick -e production

И сходив браузером на http://domain.ru:3000.

Возвращаемся в root'а и настраиваем связку web-серверов, которые все это будут отдавать. Для начала пишем конфиг для mongrel_cluster, лежать должен в /usr/local/etc/mongrel_cluster/.

# vi domain.ru.yml
user: user
cwd: /home/user/data/www/domain.ru
port: «9000»
environment: production
group: user
address: 0.0.0.0
pid_file: /home/user/data/logs/domain.ru.pid
servers: 2

Готово, прописываем в автозапуск и запускаем, идем браузером на порты 9000 и 9001, убеждаемся что все работает.

# echo 'mongrel_cluster_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/mongrel_cluster start

Настал черед гордого индейца, нам понадобятся модули mod_proxy.so, mod_proxy_http.so и mod_proxy_balancer.so, первые два на VDS уже есть, последнего нет и пересобирать из-за него апачу из портов не хочется поэтому

# cd /usr/ports/www/apache22
# make extract
# cd work/httpd-2.2.11/modules/proxy/
# apxs -a -i -c mod_proxy_balancer.c

В конфиге апача включаем модули

# vi /usr/local/etc/apache22/httpd.conf
LoadModule proxy_module         libexec/apache22/mod_proxy.so
LoadModule proxy_http_module    libexec/apache22/mod_proxy_http.so
LoadModule proxy_balancer_module libexec/apache22/mod_proxy_balancer.so

А в конфиг виртуального хоста domain.ru добавляем следующее

ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
ProxyPass /favicon.ico !
ProxyPass /static !
ProxyPass /holding !
ProxyPass /templates !
<Proxy balancer://domain.ru>
BalancerMember http://domain.ru:9000
BalancerMember http://domain.ru:9001
</Proxy>
ProxyPass / balancer://domain.ru/

Вот собственно и все. Перезапускаем apache и получаем рабочий Redmine.

Естественно, можно адаптировать под любое Ruby on Rails приложение.

Естественно, ни на какую полноту не претендую, читайте доки от разработчиков.

Одной фразой:

  • Переезд как известно равен трем пожарам :) . В таком случае ребята с сайта квартиный и офисный переезд — это пожарные, потому как переезды — их специализация.
  • На форуме города Уфы с 1 мая стартует Майская акция! Время твоих побед! Участвуют все пользователи форума, по результатам акции — денежные призы.
  • Что обычно делают с сайтом если хотят наростить ссылочную массу, повысить его в выдаче поисковика — регистрируют в каталогах. О том насколько это долгая и монотонная процедура думаю говорить не стоит. Однако специально для ленивых есть сервис регистрации в каталогах, который избавляет от потери времени и монотонного труда.
  • Еще один ресурс на тему поисковой оптимизации — Блог Ольги и Mr.Snake. Интересен тем, что помимо собственно SEO тема человеческих отношений, ну и, конечно, тем, что это не мысли одного человека, а своего рода коллективный разум.
  • Строят сейчас быстро. Вы тоже заметили? А знаете за счет чего? За счет широкого использования готовых металлических конструкций. И даже у нас такие фирмы есть, например, вот, монтаж металлоконструкций Иркутск, все что с данным процессом связано.

Связанные записи

Метки: , ,

4 комментария на запись "Укладываем рельсы"

Никита
22 февраля 2011

Очень интересная статья!

Сделал все как у вас в статье, но есть одна загвоздка

При обращении к domain.ru:9000 показывается redmine как и должен. Но при обращении к domain.ru показывается просто html-код заглавной страницы redmine. Почему браузер не пытается разобрать его и отобразить в обычном виде? Буду очень благодарен, если вы подскажите как решить данную проблему.

22 февраля 2011

Судя по всем он считает его обычным text/plain, а не text/html, потому и не интерпретирует.

С заголовками где-то проблемы.

Никита
23 февраля 2011

Да я тоже это понял, но так и не нашел как и в каком месте сделать так чтобы contentType ответа был text/html

24 февраля 2011

Даже не представляю где это указать.

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

Имя:
E-mail:
Сайт: