- PVSM.RU - https://www.pvsm.ru -

Система управления проектами Redmine + Mercurial на Ubuntu 16.04

По мере увеличения числа вовлечённых в проект людей возникает необходимость как-то более эффективно организовывать и управлять их деятельностью. На начальном этапе для этой цели использовались Google-таблицы, но их возможности ограничены, и появилось желание перейти на новый уровень. Изучение доступных систем управления проектами показало, что из систем с открытым кодом Redmine наиболее продвинутая и по некоторым показателям обгоняет даже проприентарные системы.

Redmine, действительно, обладает большими возможностями: управление несколькими проектами, отслеживание ошибок, интеграция с репозиториями, перекрёстные ссылки на исправленные баги в коммитах и на коммиты в баг-репортах, назначение разных ролей пользователей в каждом проекте и т.д. Однако процедура установки довольна сложна, а для некоторых очень полезных функций требуется небольшая доработка или использование плагинов. Надеюсь, что предлагаемое ниже руководство поможет желающим использовать Redmine в своих проектах.

Компоненты

Система управления проектами Redmine

Официальный сайт [1]

Основные возможности:

  • ведение нескольких проектов
  • система отслеживания событий (bug, feature)
  • разные роли пользователей (менеджер, разработчик, репортер) по каждому проекту
  • поддержка новостей, документов, файлов, wiki, форумов для каждого проекта
  • интеграция с системами управления версиями (SVN, Git, Mercurial)
  • уведомления о событиях по электронной почте
  • возможность учёта времени работы

Система контроля версий Mercurial

Официальный сайт [2]

Кросс-платформенная распределённая система управления версиями.

Также понадобится

Web-сервер и система управления базами данных. Использованы Mysql и Apache.

Установка

Инструкция составлена на основе полезной, но сильно устаревшей инструкции
HowTo Install Redmine 1.2.x with Mercurial and Subversion on Ubuntu Server 10.04 [3].

Также использовалась официальная инструкция по установке
Redmine Installation Guide [4].

Предполагаем что у нас уже есть сервер с предустановленным на нём Ubuntu Server 16.04. Дальнейшие инструкции описывают установку системы управления и вспомогательного ПО.

Итак, начнём. Сначала устанавливаем LAMP server:

$ sudo tasksel install lamp-server

Во время установки понадобится ввести пароль root-пользователя базы данных MySQL (не путать с паролем root операционной системы).

Создаём базу данных MySQL и пользователя redmine для работы с ней. Вместо [password] вставляем желаемый пароль пользователя.

$ mysql -u root -p
(вводим пароль root базы данных MySQL)
> create database redmine character set utf8;
> create user 'redmine'@'localhost' identified by '[password]';
> grant all privileges on redmine.* to 'redmine'@'localhost';
> exit

Скачиваем Redmine со страницы www.redmine.org/projects/redmine/wiki/Download [5] или командой

$ wget http://www.redmine.org/releases/redmine-3.3.3.tar.gz

Распаковываем Redmine в каталог /usr/share/redmine. Находим подкаталог config и копируем config/database.yml.example в config/database.yml. После этого редактируем файл, для того чтобы установить «production» режим базы данных:

$ sudo cp /usr/share/redmine/config/database.yml.example /usr/share/redmine/config/database.yml
$ sudo nano /usr/share/redmine/config/database.yml

Вводим текст и сохраняем файл (ctrl+x):

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "[password]"
  encoding: utf8

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

$ sudo apt install ruby ruby-dev build-essential libmysqlclient-dev

Устанавливаем Bundler:

$ gem install bundler

Теперь можно установить gems, необходимые для Redmine:

$ cd /usr/share/redmine
$ bundle install --without development test rmagick

Создаём случайный ключа, который Rails будет использовать для шифрования данных в cookie:

$ cd /usr/share/redmine
$ bundle exec rake generate_secret_token

Дальше создаём структуру базы данных (выполняем в /usr/share/redmine):

$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake redmine:load_default_data

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

$ cd /usr/share/redmine
$ sudo chown -R www-data:www-data files log tmp public/plugin_assets
$ sudo chmod -R 755 files log tmp public/plugin_assets

При желании можно протестировать установку Redmine с помощью веб-сервера WEBrick:

$ sudo -u www-data bundle exec rails server webrick -e production

После запуска WEBrick стартовая страница Redmine должна быть доступна в браузере по адресу http://localhost:3000/

Интеграция с Apache

Установить Passenger:

$ sudo apt-get install libapache2-mod-passenger

Добавить символьную ссылку на public каталог Redmine:

$ sudo ln -s /usr/share/redmine/public /var/www/redmine

Необходимо настроить пользователя Passenger по умолчанию, для этого редактируем файл:

$ sudo nano /etc/apache2/mods-available/passenger.conf

Нужно добавить следующую строчку и сохранить (ctrl+x):

PassengerDefaultUser www-data

В итоге файл должен выглядеть так:

<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby
  PassengerDefaultUser www-data
</IfModule>

Далее создать конфигурационный файл redmine.conf для apache:

$ sudo nano /etc/apache2/sites-available/redmine.conf 

Добавить следующий текст и сохранить (ctrl+x):

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        ServerName myservername

        RewriteEngine on
        RewriteRule   ^/$  /redmine  [R]

        <Directory /var/www/redmine>
                RailsBaseURI /redmine
                PassengerResolveSymlinksInDocumentRoot on
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Подключить модули Passenger и Rewite:

$ sudo a2enmod passenger
$ sudo a2enmod rewrite

Отключить default вебсайт и подключить redmine:

$ sudo a2dissite 000-default
$ sudo a2ensite redmine

Установить права доступа на /tmp/cache Redmine:

sudo chmod 777 /usr/share/redmine/tmp/cache

Перезапустить Apache:

$ sudo service apache2 reload

Теперь можно открыть любимый браузер и зайти на http://[my site or ip]/redmine или просто http://[my site or ip]. Должна появиться стартовая страничка системы Redmine.

Установка Mercurial

Необходимо установить пакеты:

$ sudo apt-get install mercurial libapache2-mod-perl2 libapache-dbi-perl libdbd-mysql-perl

Создать директорию, в которой будут храниться репозитории проектов:

$ sudo mkdir -p /var/hg/

Теперь мы хотим сделать репозитории доступными по http протоколу. Для этого необходимо создать cgi-скрипт:

$ sudo nano /var/hg/hgwebdir.cgi

Добавить следующий текст и сохранить:

#!/usr/bin/python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

Теперь нужно создать файл hgweb.config:

$ sudo nano /var/hg/hgweb.config

Добавить следующее содержимое и сохранить:

[paths]
/=/var/hg/**
[web]
allow_push = *
push_ssl = false
allowbz2 = yes
allowgz = yes
allowzip = yes

Установить разрешения для файлов:

$ sudo chown -R www-data:www-data /var/hg/*
$ sudo chmod gu+x /var/hg/hgwebdir.cgi

Теперь надо создать conf файл для Apache:

$ sudo nano /etc/apache2/conf-available/hg.conf

Добавить следующее содержимое и сохранить:

PerlLoadModule Apache2::Redmine
 ScriptAliasMatch ^/hg/(.*)  /var/hg/hgwebdir.cgi/$1

    <Directory /var/hg>
      Options +ExecCGI
    </Directory>

    <Location /hg>
        AuthType Basic
        AuthName "Mercurial" 
        Require valid-user
        AuthUserFile /dev/null

        #Redmine auth
        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
        RedmineDSN "DBI:mysql:database=redmine;host=127.0.0.1" 
        RedmineDbUser "redmine" 
        RedmineDbPass "red325" 
    </Location>

Ещё необходимо создать ссылки:

$ sudo ln -s /etc/apache2/conf-available/hg.conf /etc/apache2/conf-enabled/
$ sudo ln -s /usr/share/redmine/extra/svn/Redmine.pm /usr/lib/x86_64-linux-gnu/perl5/5.22/Apache2/

Включить CGI модуль и перезапустить Apache:

$ sudo a2enmod cgi
$ sudo service apache2 reload

Репозитории будут доступны по адресам http://[my site or ip]/hg/*. Например, для проекта project адрес будет таким http://[my site or ip]/hg/project. Если у проекта project будет подпроект subproject1, то его репозиторий будет доступен по адресу http://[my site or ip]/hg/project/subproject1.

Чтобы клонировать репозиторий надо будет выполнить:

$ hg clone http://[my site or ip]/hg/project

Если клонируемый проект не публичный (устанавливается в настройках проекта через веб-интерфейс системы Redmine), то потребуется ввести имя пользователя и пароль.

Авторизация осуществлятся по проектам, т.е. доступ будет возможен только для участников проекта (менеджеры и разработчики).

Для того чтобы всё корректно работало, каталоги репозиториев в /var/hg/ должны совпадать с Identifier репозиториев, которые задаются в настройках репозитория Redmine при его создании (через веб-интерфейс). Также при создании реопзитория в Redmine необходимо указать путь к нему, например /var/hg/project. Репозитории в /var/hg необходимо создать вручную для каждого проекта и инициализировать командой (hg init).

После создания нового репозитория надо убедиться, что у него установлены нужные права доступа:

$ sudo chown -R www-data:www-data /var/hg/[repository name]

В принципе, есть возможность автоматизировать создание репозиториев. Информация об этом есть в руководстве по ссылке HowTo Install Redmine 1.2.x with Mercurial and Subversion on Ubuntu Server 10.04 [3]

Уведомления о фиксации изменений по email

Redmine поддерживает уведомления о разных событиях (изменениях в жизни баг/фич и т.п.). Для того чтобы пользоваться этим функционалом достаточно настроить способ отправки email-сообщений. Делается это в файле /usr/share/redmine/config/configuration.yml В файле имеются шаблоны для разных конфигураций. Нужно разкомментировать и отредактировать нужный.

Например, так:

  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "10.11.12.13"
      port: 25
      authentification: :none
      enable_starttls_auto: false
      openssl_verify_mode: 'none'

Обратите внимание, что каждая секция в файле configuration.yml сдвинута на два пробела. Это важно.

Базовые уведомления должны быть доступны после указания способа рассылки электронных писем. Однако для уведомлений об изменениях в репозитории необходимо использовать внешний плагин. Скачать его можно с сайта github.com/lpirl/redmine_diff_email [6].

Установим этот плагин. Для этого скопируем содержимое плагина в каталог /usr/share/redmine/plugins/redmine_diff_email. В соответствии с инструкцией по установке плагина изменяем файл /usr/share/redmine/app/views/repositories/_form.html.erb:

--- OLD
 +++ NEW
 @@ -23,6 +23,7 @@
    <%  button_disabled = ! @repository.class.scm_available %>
    <%= repository_field_tags(f, @repository) %>
  <% end %>
 +<%= call_hook(:view_repository_form) %>
  </div>
  <p>

Оригинальный плагин работает с устаревшей версией redmine. Для redmine-3.3 нужно внести изменения в файл
/usr/share/redmine/plugins/redmine_diff_email/db/migrate/002_add_repositories_is_diff_email_attached.rb. Содержимое файла должно быть таким:

class AddRepositoriesIsDiffEmailAttached < ActiveRecord::Migration
  def self.up
    add_column :repositories, :is_diff_email_attached, :boolean, :default => false, :null => false
    Repository.update_all(["is_diff_email_attached = ?", true])
    Repository.update_all(["is_diff_email = ?", true])
  end

  def self.down
    remove_column :repositories, :is_diff_email_attached
  end
end

После этого в каталоге /usr/share/redmine выполнить команду для обновления базы данных:

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Перезапускаем Redmine:

$ sudo service apache2 reload

Если плагин установлен правильно, то в списке плагинов Administration → Plugins появится Redmine Diff Email Plugin, а также в веб-интерфейсе Redmine SomeProject → «Settings» Tab → «Repositories» Tab → «Edit» появятся настройки уведомлений.

Кроме того, чтобы информация об изменениях в репозиториях автоматически отслеживалась Redmine, необходимо выполнить дополнительные действия. Сначала нужно включить WS для управления репозиториями и сгенерировать API key. Как это делается:

* В web-интерфейсе Redmine в меню Administration выбрать Settings
* Перейти на вкладку Repositories
* Включить 'Enable WS for repository management'
* Кликнуть на ссылку 'Generate a key'
* Сохранить изменения кнопкой 'Save'

Далее создаём скрипт:

$ sudo nano /var/hg/fetch_changes

Добавляем следующий текст и сохраняем: (необходимо заменить [your API key] сгенерированным в API-ключом)

#!/bin/sh
curl "http://localhost/redmine/sys/fetch_changesets?key=[your API key]"  > /dev/null 2>&1

Устанавливаем права доступа для созданного файла:

$ sudo chown www-data:www-data /var/hg/fetch_changes
$ sudo chmod ug+x /var/hg/fetch_changes

Остаётся добавить в /var/hg/hgweb.config секцию [hooks], чтобы скрипт fetch_changes выполнялся после каждого коммита:

[hooks]
changegroup = /var/hg/fetch_changes

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

Автор: polytechnic

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/redmine/257973

Ссылки в тексте:

[1] Официальный сайт: http://www.redmine.org/

[2] Официальный сайт: https://www.mercurial-scm.org

[3] HowTo Install Redmine 1.2.x with Mercurial and Subversion on Ubuntu Server 10.04: http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_12x_with_Mercurial_and_Subversion_on_Ubuntu_Server_1004/

[4] Redmine Installation Guide: http://www.redmine.org/projects/redmine/wiki/RedmineInstall

[5] www.redmine.org/projects/redmine/wiki/Download: http://www.redmine.org/projects/redmine/wiki/Download

[6] github.com/lpirl/redmine_diff_email: https://github.com/lpirl/redmine_diff_email

[7] Источник: https://habrahabr.ru/post/331006/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox