Введение
Встречаются предприятия, на которых доступ к интернету сильно ограничен или не постоянен, не завидую этим ребятам. Иногда, как в моём случае, политика безопасности предприятия не позволяет хранить исходный код разрабатываемых продуктов на чужом оборудовании. Кроме того, смею предположить, что не каждой группе разработчиков хватает возможностей, предоставляемых например bitbucket. Эти проблемы можно решить, к примеру, связкой RhodeCode и Redmine.
Цели
- Создание, изменение, удаление репозиториев Mercurial, используя web интерфейс.
- Добавление и удаление пользователей, разграничение доступа, смена паролей, используя web интерфейс.
- Отслеживание ошибок и распределение задач, используя web интерфейс.
- https повсеместно.
Используемые продукты
После недолгих размышлений и на основании некоторого опыта был определен набор средств для достижения поставленных целей:
- Контроль версий — Mercurial
- Управление проектами — Redmine
- Управления репозиториями системы контроля версий — RhodeCode
- Ну а заведется все это на Debian
Шаг 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 mercurial
В процессе установки отобразится диалог выбора базы данных. Я предпочел 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.pemCommon 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
Впишем в основную секцию(VirtualHost) этого же файла строки:
1) для redmine:
RailsBaseURI /redmine2) для 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Запустим rhodecode:
service rhodecode-daemon startПерезапустим apache:
service apache2 restartРезультат
RhodeCode доступен по адресу:
https://your.domain.ru/hg пароль установлен на 2 шаге
Redmine доступен по адресу:
https://your.domain.ru/redmine администратор admin, пароль admin
Принудительный https везде.
Список используемой литературы
- HowTo Install Redmine using Debian package.
- RhodeCode 1.3.3 documentation. Installation.
- RhodeCode 1.3.3 documentation. Setup.
- Простой способ настроить Apache для работы по HTTPS в Debian.
UPD: Для исправления ошибки интеграции Redmine с созданным в Rhodecode репозиторием установите версию mercurial(2.0.1) из squezee-backports:
aptitude -t squeeze-backports install mercurial
