Установка Redmine + настройка и интеграция SVN хранилищ

Установка Redmine + настройка и интеграция SVN хранилищ

Redmine — это свободная (free as freedom) система для управления проектами и отслеживания ошибок. Написан на Ruby on Rails Исходный код распространяется под GNU GPL лицензией.

Мы используем Redmine для управления проектами больше двух лет. За это время в системе набралось 80ть проектов и полсотни пользователей.

Установка Redmine на Ubuntu 10.04 Server

Ставим необходимые пакеты:

aptitude install redmine redmine-mysql

Инсталяционные скрипты предлагают настроить пакет:

Установка Redmine + настройка и интеграция SVN хранилищ

Выбираем с какой СУБД будет работать Redmine:

Установка Redmine + настройка и интеграция SVN хранилищ

Вводим пароль администратора MySQL и пароль доступа к БД самого Redmine:

Установка Redmine + настройка и интеграция SVN хранилищ

Установка Redmine + настройка и интеграция SVN хранилищ

Если после этого сравнение таблиц выставляется в latin1_swedish_ci (или в любую другую кодировку отличную от utf8_general_ci) добавляем в /etc/mysql/my.cfg в секцию mysqld директиву collation-server=utf8_general_ci и character-set-server=utf8. После чего удаляем полностью БД и создаем новую базу Redmine с сравнением utf8_general_ci. Теперь разворачиваем новую базу Redmine:

# cd /usr/share/redmine/
/usr/share/redmine# rake db:migrate RAILS_ENV="production" 

После чего у нас будут все таблицы в utf8_general_ci и с кириллицей не будет никаких проблем.

Настройка mod-passenger

Mod Passenger используется для связки веб сервера Apache и приложений написанных на Ruby On Rails.
С его помощью Apache может работать как веб сервер для ROR приложений.

Установка пакетов:

aptitude install libapache2-mod-passenger

Загружаем модуль Apache:

a2enmod passenger

Настраиваем vhost для Redmine:

vim /etc/apache2/sites-enabled/redmine.example.com
<VirtualHost *:80>
  ServerName redmine.example.com
  ServerAlias redmine.example.com
  DocumentRoot /usr/share/redmine/public
  # Без PassengerDefaultUser www-data Redmine не сможет загружать файлы на сервер
  PassengerDefaultUser www-data
 
  <Directory /usr/share/redmine/public>
    Order allow,deny
    Allow from all
    RailsEnv production
  </Directory>
</VirtualHost>

После этого Redmine должен быть доступен по адресу https://redmine.example.com

Настройка SVN хранилищ и их интеграция с Redmine

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

Установим требуемые пакеты:

aptitude install subversion 
aptitude install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl

Загрузим все требуемые модули Apache:

a2enmod dav
a2enmod dav_svn
a2enmod perl

Дальше добавим одну строку в конфиг модуля:

vim /etc/apache2/mods-enabled/perl.load
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
PerlLoadModule Apache::Redmine

Для того, что б пользователи могли авторизоваться в svn под теме же учётными данными что и в Redmine создадим символическую ссылку на скрипт Redmine.pm (можно просто скопировать его, но лучше создать ссылку)

ln -s /usr/share/redmine/extra/svn/Redmine.pm /usr/lib/perl5/Apache/Redmine.pm

Настроим vhost для svn:

vim /etc/apache2/conf.d/svn.example.com
<VirtualHost *:80>
        ServerName svn.example.com
        ServerAlias svn.example.com
 
        <Location /svn>
                 # подключаем модуль dav svn
                 DAV svn
                 SVNParentPath "/var/svn" 
 
                 # настраиваем авторизацию по логину/паролю
                 AuthType Basic
                 AuthName redmine
                 Require valid-user
 
                 # подключаем скрипт Redmine.pm
                 PerlAccessHandler Apache::Authn::Redmine::access_handler
                 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
 
                 # настройки подключения к БД
                 RedmineDSN "DBI:mysql:database=redmine_default;host=localhost" 
 
                 # логин и пароль для доступа к БД Redmine
                 RedmineDbUser "redmine" 
                 RedmineDbPass "password" 
        </Location>
 
        <Location /svn-private>
                  DAV svn
                  SVNParentPath "/var/svn" 
                  Order deny,allow
                  Deny from all
                  # only allow reading orders
                  <Limit GET PROPFIND OPTIONS REPORT>
                  Allow from redmine_server_ip
                  </Limit>
        </Location>
</VirtualHost>

svn-private нужен для того, что б позволить самому Redmine получать доступ к хранилищам без авторизации. Это позволит полностью автоматизировать создание и подключения хранилища к новому проекту. Так же его можно использовать на своих серверах для обновления исходников без необходимости авторизации.

Теперь по адресу https://svn.example.com/svn должен выводиться диалог авторизации.

Автоматическое создание SVN хранилищ для проектов

Для этой задачи есть скрипт /usr/share/redmine/extra/svn/reposman.rb. Он при запуске сверяет созданные проекты в Redmine и существующие svn хранилища. И если есть проект для которого нет хранилища — он создаст его. Для того чтобы это заработало нужно прописать запуск reposman.rb в crontab:

*/5 * * * * /usr/share/redmine/extra/svn/reposman.rb --redmine redmine.example.com --key=ключ --svn-dir /var/svn --owner www-data --url https://svn.example.com/svn-private/ --verbose

Описание аргументов скрипта:

  • --key — API ключ. В Redmine Администрирование → Настройки → Хранилище → API ключ. Выбираем Сгенерировать ключ и копируем его в скрипт.
  • --redmine — хост, на котором висит redmine.
  • --svn-dir — путь к svn.
  • --owner — владелец хранилища.
  • --url — url к svn (svn-private нужен для того, что б redmine мог получать доступ к хранилищам без авторизации).

Все, настройка завершена. Теперь можно попробовать создать проект, через некоторое время для него автоматически будет создано хранилище. После следует добавить участников в проект и попробовать авторизоваться с использовании их учётных данных в хранилище.