понедельник, 5 октября 2009 г.

Установка Redmine

Начну повествование с того, что более ужасного и непонятного для моего понимания языка чем ruby я не встречал. :) Между тем возникла задача проинсталировать данную платформу в нескольких экземплярах и обеспечить ее полноценную работу в Denian. Допустим это будут сайты project1.example.com и project2.example.com
Для начала весьма рекомендую бегло ознакомиться с официальной документацией.


Реализация

Установка необходимых пакетов

Если вы используете версию Debian 5.0 lenny, то для установки необходимый пакетов требуется подключить репозитарий backports. Далее устанавливаем следующие пакеты:
  • mongrel
  • redmine
  • mysql-server
  • nginx

Настройка

Redmine

Сам Redmine поддерживает такую фичу, как многодоменность. Но к сожалению упоминания об этом в документации я не нашел сразу, потому пришлось все познавать самостоятельно.
Все конфигурации каждого домена хранятся в директории /etc/redmine. С нуля там существует лишь директория /etc/redmine/default. При более детальном изучении системы я выяснил, что "default" - это значение переменной X_DEBIAN_SITEID, с помощью которой и вводится многодоменность.
  1. Cкопируйте директорию default в /etc/redmine/project1 и /etc/redmine/project2.
  2. Отредактируйте файлы session.yml для каждого проекта. Обязательно сгенерируйте индивидуальные значения ключей secret и и измените значения session_key с _redmine_default на _redmine_project1 и _redmine_project2 для каждого проекта соответственно.
  3. Отредактируйте файлы database.yml для каждого проекта. Требуется предварительно создать отдельные БД для каждого проекта и дать права на создание таблиц.
  4. Опционально создаем email.yml . Он необходим для отправки e-mail системой.
    # Outgoing email settings
     
    production:
      delivery_method: :smtp
      smtp_settings:
        address: 127.0.0.1
        port: 25
        domain: example.com
     
    development:
      delivery_method: :smtp
      smtp_settings:
        address: 127.0.0.1
        port: 25
        domain: example.com
  5. Структура БД создается командой:
# cd /usr/share/redmine
# rake db:migrate X_DEBIAN_SITEID="project1"
# rake db:migrate X_DEBIAN_SITEID="project2"
     6. Также требуется создать отдельные директории для хранения файлов проектов:
# mkdir -p /var/lib/redmine/project1/files
# mkdir -p /var/lib/redmine/project2/files
# chown -R www-data /var/lib/redmine/

Запуск

По умолчанию в тех источниках, которые я встречал, рекомендуется запускать Redmine с помощью Apache и модуля mod_fcgid.  Но это решение нам не подходит, .т.к. этот модуль не обрабатывает виртуальные домены, а подерживает только один запущенный процесс. Хотя возможно я просто не понял как его готовить. В связи с этим я запускаю необходимое количество процессов с нужными параметрами запуска с помощью сервера mongrel.
Запускаем процесс следующей коммандой:
# su - www-data -c "/usr/local/bin/redmine_sites.sh"
где redmine_sites.sh представляет собой следующий скрипт:
#!/bin/bash

sites="project1 project2"
port=3000

for cs in ${sites}
do
    X_DEBIAN_SITEID="${cs}" mongrel_rails start -d -e production -a 127.0.0.1 -p ${port} \
        --chdir /usr/share/redmine/ \
        --log /var/log/redmine/${cs}.log \
        --pid /var/run/redmine/${cs}.pid
    let "port = $port + 1"
done
Для обеспечения запуска сервиса при старте системы следует добавить строку запуска в /etc/rc.local

nginx

Как вы уже заметили сам процесс слушает на локальном адресе. Фронтэндом к нему я выбрал nginx.
Создадим конфигурации для каждого проекта в /etc/nginx/sites-available/. К примеру /etc/nginx/sites-available/project1 выглядит так:
server {
        listen          111.222.333.444:80;
        server_name     project1.example.com;
        location / {
                proxy_pass          http://127.0.0.1:3000;
                proxy_set_header    Host            $host;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        }
И включаем наши хосты:
# cd /etc/nginx/sites-enabled/
# ln -s ../sites-available/project1
# ln -s ../sites-available/project2
# /etc/init.d/nginx restart

Post scriptum

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

Фокусы

Сбросить пароль юзера:
# X_DEBIAN_SITEID="project1" RAILS_ENV=production script/runner 'user = User.find(:first, :conditions => {:login => "AnViar"}) ; user.password, user.password_confirmation = "1234"; user.save!'

Комментариев нет:

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