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

Rhodecode + Redmine — недорогая и функциональная замена хостингу программных проектов на стороне

Введение

Встречаются предприятия, на которых доступ к интернету сильно ограничен или не постоянен, не завидую этим ребятам. Иногда, как в моём случае, политика безопасности предприятия не позволяет хранить исходный код разрабатываемых продуктов на чужом оборудовании. Кроме того, смею предположить, что не каждой группе разработчиков хватает возможностей, предоставляемых например bitbucket [1]. Эти проблемы можно решить, к примеру, связкой RhodeCode [2] и Redmine [3].

Цели

  • Создание, изменение, удаление репозиториев Mercurial, используя web интерфейс.
  • Добавление и удаление пользователей, разграничение доступа, смена паролей, используя web интерфейс.
  • Отслеживание ошибок и распределение задач, используя web интерфейс.
  • https повсеместно.

Используемые продукты

После недолгих размышлений и на основании некоторого опыта был определен набор средств для достижения поставленных целей:

  1. Контроль версий — Mercurial [4]
  2. Управление проектами — Redmine [3]
  3. Управления репозиториями системы контроля версий — RhodeCode [2]
  4. Ну а заведется все это на Debian [5]

Шаг 0: установим debian(или ubuntu)

Все нижеописанное проделывалось на debian squezee в базовой установке.
На ubuntu (10.04 LTS) должно быть без изменений, так как пакетная база у них схожа.

Шаг 1: установим RhodeCode

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

aptitude install python-setuptools python-dev python-virtualenv

Используя virtualenv, создадим новую виртуальную среду:

virtualenv --no-site-packages /var/www/rhodecode-venv

В каталоге /var/www/rhodecode-venv будет создано новое виртуальное окружение.
Активируем виртуальное окружение командой:

source /var/www/rhodecode-venv/bin/activate

Создадим каталог для rhodecode, например:

mkdir /var/www/rhodecode; cd /var/www/rhodecode

Чтобы установить RhodeCode, выполним следующую команду:

easy_install rhodecode

На этом этапе скрипт easy_install установит все необходимые зависимости для RhodeCode в виртуальное окружение, в их числе последняя стабильная версия mercurial.

Шаг 2: настройка RhodeCode

Создадим файл конфигурации RhodeCode:

paster make-config RhodeCode production.ini

Этот файл конфигурации содержит различные настройки для RhodeCode, например, порт прокси-сервера, электронную почту, использование статических файлов, кэша, настройки celery и логгирования. По умолчанию используется SQLite в качестве базы данных.

Создадим базу данных, выполнив следующую команду:

paster setup-app production.ini

На запрос скрипта введем путь до каталога, где RhodeCode разместит базу данных:

/var/www/rhodecode/

Далее введем имя пользователя, пароль и электронную почту учетной записи администратора приложения. Команда создания базы данных создаст все необходимые таблицы и учетную запись администратора.

Для нашей конфигурации необходимо добавить следующие строки в production.ini:

1) в секцию [app:main]:

filter-with = proxy-prefix
force_https = true

2) в конец файла:

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /hg

Покинем виртуальное окружение:

deactivate

Создадим скрипт запуска /etc/init.d/rhodecode-daemon:

#!/bin/sh -e
########################################
#### THIS IS A DEBIAN INIT.D SCRIPT ####
########################################
### BEGIN INIT INFO
# Provides:          rhodecode          
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of rhodecode
# Description:       starts instance of rhodecode using start-stop-daemon
### END INIT INFO
APP_NAME="rhodecode"
APP_HOMEDIR="/var/www"
APP_PATH="$APP_HOMEDIR/$APP_NAME"
CONF_NAME="production.ini"
PID_PATH="$APP_PATH/$APP_NAME.pid"
LOG_PATH="$APP_PATH/$APP_NAME.log"
PYTHON_PATH="/var/www/rhodecode-venv"
RUN_AS="www-data"
DAEMON="$PYTHON_PATH/bin/paster"
DAEMON_OPTS="serve --daemon 
  --user=$RUN_AS 
  --group=$RUN_AS 
  --pid-file=$PID_PATH 
  --log-file=$LOG_PATH  $APP_PATH/$CONF_NAME"
start() {
  echo "Starting $APP_NAME"
  PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH 
      --start --quiet 
      --pidfile $PID_PATH 
      --user $RUN_AS 
      --exec $DAEMON -- $DAEMON_OPTS
}
stop() {
  echo "Stopping $APP_NAME"
  start-stop-daemon -d $APP_PATH 
      --stop --quiet 
      --pidfile $PID_PATH || echo "$APP_NAME - Not running!"
  if [ -f $PID_PATH ]; then
    rm $PID_PATH
  fi
}
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    echo "Restarting $APP_NAME"
    ### stop ###
    stop
    wait
    ### start ###
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

Назначим необходимые права доступа:

chmod a+x /etc/init.d/rhodecode-daemon 
chown www-data:www-data -R /var/www/rhodecode

Для автоматического запуска скрипта выполним:

insserv rhodecode-daemon

Шаг 3: установка redmine

В squeeze-backports версия redmine поновее, установим её.

Включим в /etc/apt/sources.list:

deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free


Выполним в консоли:

aptitude update
aptitude -t squeeze-backports install redmine

В процессе установки отобразится диалог выбора базы данных. Я предпочел sqlite, сделайте свой выбор.

Создадим ссылку в директории /var/www:

ln -s /usr/share/redmine/public /var/www/redmine
chown -R www-data:www-data /var/www/redmine

Шаг 4: настройка apache

Установим apache mod passenger для запуска redmine:

aptitude install libapache2-mod-passenger

Создадим закрытый ключ и сертификат:

openssl req -new -x509 -days 355 -keyout your.domain.ru.key -out your.domain.ru.pem

Common Name следует указать в точности такой, как и доменное имя Вашего сервера.

Удалим пароль:

cp your.domain.ru.key your.domain.ru.key.orig
openssl rsa -in your.domain.ru.key.orig -out your.domain.ru.key
rm your.domain.ru.key.orig

Скопируем в /etc/ssl:

cp your.domain.ru.pem /etc/ssl/certs/; cp your.domain.ru.key /etc/ssl/private/

Включим необходимые модули:

a2enmod ssl
a2enmod proxy
a2enmod proxy_http

В файле /etc/apache2/sites-available/default-ssl заменим:

SSLCertificateFile    /etc/ssl/certs/your.domain.ru.pem
SSLCertificateKeyFile /etc/ssl/private/your.domain.ru.key

Впишем в основную секцию этого же файла строки:

1) для redmine:

RailsBaseURI /redmine

2) для rhodecode:

<Location /hg >
  ProxyPass http://127.0.0.1:5000/hg
  ProxyPassReverse http://127.0.0.1:5000/hg
  SetEnvIf X-Url-Scheme https HTTPS=1
</Location>


Заменим содержимое файла /etc/apache2/sites-available/default на:

<VirtualHost *:80>
    ServerName your.domain.ru
    Redirect permanent / https://your.domain.ru/ 
</VirtualHost>


Подключим конфигурацию default-ssl:

a2ensite default-ssl

Перезапустим apache:

/etc/init.d/apache2 restart

Результат

RhodeCode доступен по адресу:

https://your.domain.ru/hg пароль установлен на 2 шаге

Redmine доступен по адресу:

https://your.domain.ru/redmine администратор admin, пароль admin

Принудительный https везде.

Список используемой литературы

  1. HowTo Install Redmine using Debian package. [6]
  2. RhodeCode 1.3.3 documentation. Installation. [7]
  3. RhodeCode 1.3.3 documentation. Setup. [8]
  4. Простой способ настроить Apache для работы по HTTPS в Debian. [9]

Автор: VasiliyRylov


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

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

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

[1] bitbucket: http://bitbucket.org

[2] RhodeCode: http://www.rhodecode.org/

[3] Redmine: http://www.redmine.org/

[4] Mercurial: http://mercurial.selenic.com/

[5] Debian: http://www.debian.org/

[6] HowTo Install Redmine using Debian package.: http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_using_Debian_package

[7] RhodeCode 1.3.3 documentation. Installation.: http://packages.python.org/RhodeCode/installation.html

[8] RhodeCode 1.3.3 documentation. Setup.: http://packages.python.org/RhodeCode/setup.html#setup

[9] Простой способ настроить Apache для работы по HTTPS в Debian.: http://plashc.livejournal.com/630.html