Разобравшись с git сервером и GUI клиентами в
прошлой статье, я обещал рассмотреть установку
GitPlugin для
Trac (пользуюсь давно, все устраивало, когда был SVN). Но сейчас меня смутили несколько вещей:
1. Trac не поддерживает git из коробки (реализован в виде плагина, что не есть уже хорошо).
2. Trac хорош для одного крупного проекта (для запуска дополнительного надо много телодвижений), а мы хотим построить СКВ для многих проектов.
3. В trac нет русификации, а она желательна (возможен доступ пользователей программ для создания задач или сообщений о багах).
4. В trac нет удобной системы распределения прав (есть конечно дополнительные пакеты, но если все это сложить, получается уж очень громоздко).
Поэтому я решил поискать систему, которая бы меня устраивала.
И я ее нашел,
redmine. Он написан на
Ruby, поддерживает кучу баз данных, есть русский язык, лишен всех недостатков перечисленных выше, самое главное, поддерживает git "из коробки"!
Краткий обзор возможностей
отсюда:
* Поддержка нескольких проектов в одной базе данных;
* Гибкая система настройки пользовательских прав доступа;
* Гибкая система тикетов и заданий;
* Поддержка календаря и графиков Гантта
* Поддержка файлового архива, документация и новостных лент по проекту
* Сквозное логирование событий в системе и поддержка отсылки на еmail
* Встроенная система Wiki по проекту
* Встроенная система форумов по проекту
* Простая система учета времени
* Возможность добавлять произвольные пользовательские поля к проектам, заданиям и пользователям
* Интеграция с системами контроля версий (SVN, CVS, Mercurial, Bazaar and Darcs)
* Поддержка LDAP авторизации
* Поддержка регистрации пользователей
* Мультиязычность (Русский и Украинский присутствуют)
* Поддержка различных баз данных
Дополню, что git тоже поддерживается.
Начнем.Системе 3 года, но уже информации по ней много, все хвалят, соответственно в поиске можно найти много мануалов по установке прямо под вашу систему.
Но мы пройдем этот путь заново :)
Считаем, что apache2 и postgres 8.3 уже установлен.
Следуем
официальному руководству по установке:
1. Проверяем и устанавливаем необходимые пакеты:
- #ruby --version
- ruby 1.8.7 (2007-03-13 patchlevel 0) [i386-freebsd7]
- #cd /usr/ports/www/rubygem-rails
- #make clean install
#ruby --version
ruby 1.8.7 (2007-03-13 patchlevel 0) [i386-freebsd7]
#cd /usr/ports/www/rubygem-rails
#make clean install
Этот пакет содержит все компоненты, которые необходимы для запуска Ruby On Rails (собственно, на котором и написан redmine).
Таблицу с необходимыми версиями смотрим
здесь.
У меня с портами REALEASE-7.2 встала версия 2.3.2
- #cd /usr/ports/converters/ruby-iconv
- #make clean install
#cd /usr/ports/converters/ruby-iconv
#make clean install
2. Скачиваем стабильную ветку:
- #wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
- #tar -zxvf redmine-0.8.4.tar.gz
#wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
#tar -zxvf redmine-0.8.4.tar.gz
3. Конфигурируем базу данных.
Добавляем пользователя redmine в базу данных postgres:
- #su pgsql
- $createuser redmine -–no-superuser -–no-createdb -–no-createrole -–login –-pwprompt -–encrypted
- $createdb --owner=redmine --encoding=utf-8 redmine
- $exit
#su pgsql
$createuser redmine -–no-superuser -–no-createdb -–no-createrole -–login –-pwprompt -–encrypted
$createdb --owner=redmine --encoding=utf-8 redmine
$exit
Редактируем pg_hba.conf при необходимости.
Копируем ~/redmine-0.8.4/config/database.yml.example в ~/redmine-0.8.4/config/database.yml и редактируем:
- production:
- adapter: postgresql
- database: redmine
- host: localhost
- username: redmine
- password: password
- encoding: utf8
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: password
encoding: utf8
Заполняем базу данных схемой Redmine, выполнив команду в директории redmine-0.8.4:
- #rake db:migrate RAILS_ENV="production"
#rake db:migrate RAILS_ENV="production"
Загружаем первоначальную конфигурацию Redmine:
- #rake redmine:load_default_data RAILS_ENV="production"
#rake redmine:load_default_data RAILS_ENV="production"
4. Устанавливаем права.
Пользователь www должен иметь право писать в директории files, log, tmp.
- #cd redmine-0.8.4
- #chown -R www:www files log tmp public/plugin_assets
- #chmod -R 755 files log tmp public/plugin_assets
#cd redmine-0.8.4
#chown -R www:www files log tmp public/plugin_assets
#chmod -R 755 files log tmp public/plugin_assets
5. Пробный запуск.
- #sudo -u www ruby script/server webrick -e production
#sudo -u www ruby script/server webrick -e production
Переходим по адресу http://SERVER:3000/, все должно работать.
Можно залогиниться от admin, пароль admin.
Примеры настройки smtp сервера
здесь.
6. Связываем apache и Redmine.
Есть
официальное how to.
Мне оно не понравилось, использует CGI, в общем все кисло :)
Гораздо более интересно решение "
Настройка Redmine на работу через apache and mongrel_cluster по HTTPS", изначально подсмотренное
здесь.
Предлагается использовать mongrel в качестве бэкенда к серверу apache.
Mongrel является HTTP-сервером и библиотекой на Ruby, которая предназначена для хостинга разнообразных веб-приложений написанных на языке программирования Ruby, используя HTTP протокол, а не FastCGI или SCGI.
Вот это уже гораздо интересней. Тем более https.
Но я решил пойти немного другим путем, установкой
Phusion Passenger (aka mod_rails).
- # cd /usr/ports/www/rubygem-passenger
- # make clean install
# cd /usr/ports/www/rubygem-passenger
# make clean install
Настраиваем апач:Доступные настройки mod_rails:
* RailsEnv - задает среду выполнения приложения. Значение по умолчанию: production.
* RailsBaseURI - задает директорию, в которую размещается приложение. По этому адресу должна находиться директория public приложения.
* RailsRuby - задает интерпретатор, который будет использован для выполнения приложения. Имеет смысл, если у Вас установлено несколько интерпретаторов Руби.
* RailsMaxPoolSize - максимальное количество запущенных экземпляров приложения. Оптимально значение зависит от конфигурации системы. Значение по умолчанию: 20.
* RailsPoolIdleTime - максимальное время бездействия экземпляра приложения в секундах. По истечении этого времени экземпляр приложения будет остановлен для экономии памяти. Разработчики рекомендуют в качестве оптимального значения 2*x, где x - время, которое пользователь тратит на просмотр страницы. Значение по умолчанию: 120.
Настроен апач примерно
так.
Создаем
сертификаты.
А потом настраиваем секьюрный хост:
- SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
- SSLMutex file:/usr/local/etc/apache22/logs/ssl_mutex
- SSLSessionCache shm:/usr/local/etc/apache22/logs/ssl_cache_shm
- SSLSessionCacheTimeout 600
-
- <ifmodule mime.c="">
- AddType application/x-x509-ca-cert .crt
- AddType application/x-pkcs7-crl .crl
- </ifmodule>
-
- SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
-
- NameVirtualHost *:80
-
- LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so
- PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2
- PassengerRuby /usr/local/bin/ruby18
-
- PassengerDefaultUser www
- PassengerMaxPoolSize 1
- PassengerUseGlobalQueue on
- PassengerMaxInstancesPerApp 1
-
- <virtualhost *:80="">
- ServerName SERVER
-
- ErrorLog etc/apache22/logs/httpd-redmine.log
-
- RewriteEngine On
- Options +FollowSymlinks
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]
- </virtualhost>
-
- <virtualhost *:443="">
- RailsEnv production
- ServerName SERVER
-
- SSLEngine on
- SSLVerifyClient none
- SSLCertificateFile etc/apache22/keys/new.crt
- SSLCertificateKeyFile etc/apache22/keys/new.key
- SSLCACertificateFile etc/apache22/keys/cacert.pem
- SSLProtocol all -SSLv2
- DocumentRoot /tank/redmine/redmine-0.8.4/public
- ErrorLog etc/apache22/logs/httpsd-redmine.log
-
- <directory tank="" redmine="" redmine-0.8.4="" public="">
- Options FollowSymLinks
- AllowOverride None
- SSLOptions +StdEnvVars
- Order allow,deny
- Allow from all
- </directory>
- </virtualhost>
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
SSLMutex file:/usr/local/etc/apache22/logs/ssl_mutex
SSLSessionCache shm:/usr/local/etc/apache22/logs/ssl_cache_shm
SSLSessionCacheTimeout 600
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
NameVirtualHost *:80
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2
PassengerRuby /usr/local/bin/ruby18
PassengerDefaultUser www
PassengerMaxPoolSize 1
PassengerUseGlobalQueue on
PassengerMaxInstancesPerApp 1
ServerName SERVER
ErrorLog etc/apache22/logs/httpd-redmine.log
RewriteEngine On
Options +FollowSymlinks
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]
RailsEnv production
ServerName SERVER
SSLEngine on
SSLVerifyClient none
SSLCertificateFile etc/apache22/keys/new.crt
SSLCertificateKeyFile etc/apache22/keys/new.key
SSLCACertificateFile etc/apache22/keys/cacert.pem
SSLProtocol all -SSLv2
DocumentRoot /tank/redmine/redmine-0.8.4/public
ErrorLog etc/apache22/logs/httpsd-redmine.log
Options FollowSymLinks
AllowOverride None
SSLOptions +StdEnvVars
Order allow,deny
Allow from all
Проверяем конфигурацию apache:
- #/usr/local/etc/rc.d/apache22 configtest
#/usr/local/etc/rc.d/apache22 configtest
Стартуем и может быть получаем ошибку
- Error message:
- No such file or directory - /nonexistent
- Exception class:
- Errno::ENOENT
Error message:
No such file or directory - /nonexistent
Exception class:
Errno::ENOENT
если у нашего пользователя www нет домашней директории. Решается
это так:
Покопавшись немного обнаружил, что проблема вызвана конфликтом Passenger и gem и исправляется внесением изменений в файл rubygems.rb в метод self.set_paths.
Необходимо заменить код
# only create by matching user
next if Etc.getpwuid.uid != File::Stat.new(Gem.user_home).uid
на:
# only create by matching user
home_folder_uid = File::Stat.new(Gem.user_home).uid rescue nil
next if Etc.getpwuid.uid != home_folder_uid
Файл находится здесь /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb .
Перезапускаем апач, http://SERVER (должен выполниться редирект на https://SERVER).
Настройка самого redmine через веб-интерфейс интуитивно понятна, удачи!

PS. Кстати, напоследок линк:
Git User's Manual