Введение
Встречаются предприятия, на которых доступ к интернету сильно ограничен или не постоянен, не завидую этим ребятам. Иногда, как в моём случае, политика безопасности предприятия не позволяет хранить исходный код разрабатываемых продуктов на чужом оборудовании. Кроме того, смею предположить, что не каждой группе разработчиков хватает возможностей, предоставляемых например 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
В процессе установки отобразится диалог выбора базы данных. Я предпочел 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 везде.
Список используемой литературы
- HowTo Install Redmine using Debian package.
- RhodeCode 1.3.3 documentation. Installation.
- RhodeCode 1.3.3 documentation. Setup.
- Простой способ настроить Apache для работы по HTTPS в Debian.
Автор: VasiliyRylov