Установка Apache2 + SSL + Subversion + Trac под Debian
Ну что же. Задача обрисована в заголовке. Cтавиться всё это будет под Debian Etch, что без сомнения облегчит задачу.
Хотя это и не кошерно, предполагается, что все команды исполняются от root'а.
Настройка Apach2 и SSL
Первым делом установим апач и OpenSSL
apt-get install apache2 openssl
Подключим модуль ssl выполнив команду
a2enmod ssl
В файл /etc/apache2/ports.conf добавим строчку Listen 443, разрешив апачу прослушивать 443й порт, для приёма https запросов. Сделать это можно к примеру так:
echo "Listen 443" >> /etc/apache2/ports.conf
Создадим сертификат для нашего будущего сервера. К сожалению, в Debian Etch убрали скрипт apache2-ssl-certificate, но мы его извлечём из небытия (SSL то очень хоцца).
apache2-ssl-certificate
#!/bin/sh -e if [ "$1" != "--force" -a -f /etc/apache2/ssl/apache.pem ]; then echo "/etc/apache2/ssl/apache.pem exists! Use \"$0 --force.\"" exit 0 fi if [ "$1" = "--force" ]; then shift fi echo echo creating selfsigned certificate echo "replace it with one signed by a certification authority (CA)" echo echo enter your ServerName at the Common Name prompt echo echo If you want your certificate to expire after x days call this programm echo with "-days x" # use special .cnf, because with normal one no valid selfsigned # certificate is created export RANDFILE=/dev/random openssl req $@ -config /usr/share/apache2/ssleay.cnf \ -new -x509 -nodes -out /etc/apache2/ssl/apache.pem \ -keyout /etc/apache2/ssl/apache.pem chmod 600 /etc/apache2/ssl/apache.pem ln -sf /etc/apache2/ssl/apache.pem \ /etc/apache2/ssl/`/usr/bin/openssl \ x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0
Кроме того, потребуется ещё конфигурационный файл
/usr/share/apache2/ssleay.cnf
# # SSLeay example configuration file. # RANDFILE = $ENV::HOME/.rnd [ req ] default_bits = 1024 default_keyfile = privkey.pem distinguished_name = req_distinguished_name [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = GB countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Some-State localityName = Locality Name (eg, city) organizationName = Organization Name (eg, company; recommended) organizationName_max = 64 organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_max = 64 commonName = server name (eg. ssl.domain.tld; required!!!) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40
Теперь создадим каталог /etc/apache2/ssl и выполним скрипт:
mkdir -p /etc/apache2/ssl sh apache2-ssl-certificate
Приступим к настройке виртуального сервера.
В каталоге /usr/apache2/site-available сделаем копию файла default обозвав его к примеру project-ssl.
Отредактируем его самую малость
/usr/apache2/site-available/project-ssl
NameVirtualHost *:443 <VirtualHost *:443> SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem ... </VirtualHost>
Теперь разрешим наш новый виртуальный хост и перезапустим апач
a2ensite project-ssl /etc/init.d/apache2 restart
…и поимеем безмерное блаженство подключившись к своему компу по защищённому протоколу https://localhost/.
Установка Subversion
apt-get install libapache2-svn subversion subversion-tools
Подготовим репозиторий
cd /home mkdir -p projects/project/svn cd projects/project chown www-data svn su www-data -c "svnadmin create svn/"
Создаём его от имени пользователя www-data для того, что бы apache имел к нему доступ.
Теперь вернёмся к нашим баранам, то есть апачу.
Создадим каталоги
mkdir /home/projects/project/html mkdir /home/projects/project/logs
Каталог html на самом деле не понадобится когда мы установим trac но пусть будет.
Файл /usr/apache2/site-available/project-ssl исправим следующим образом
/usr/apache2/site-available/project-ssl
NameVirtualHost *:443 <VirtualHost *:443> SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem ServerAdmin your@email.address DocumentRoot /home/projects/project/html <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /home/projects/project> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> <Location /svn> DAV svn SVNPath /home/projects/project/svn AuthType Basic AuthName "My Subversion Repository" AuthUserFile /home/projects/project/.htpasswd Require valid-user </Location> ErrorLog /home/projects/project/logs/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /home/projects/project/logs/access.log combined ServerSignature On </VirtualHost>
Добавим авторизационный файл и пользователей в него
htpasswd -c -m /home/projects/project/.htpasswd user1 htpasswd -m /home/projects/project/.htpasswd user2 ...
и переназначим права на него
chown www-data /home/projects/project/.htpasswd chmod 600 /home/projects/project/.htpasswd
Теперь можно перезапустить апач и проверить доступность svn-репозитория https://localhost/svn/
Данная часть статьи написана на основе статьи »Configure Apache SSL and Subversion in Debian in 683 seconds»
Trac
Теперь примемся за установку Trac (в Debian Etch это версия 0.10.3-1).
apt-get install trac
Создадим каталог для trac-проекта и сам проект
su www-data -c "mkdir trac" su www-data -c "trac-admin /home/projects/project/trac initenv"
Скрипт задаст несколько вопросов. Единственный вопрос который потребует коррекции это про расположение svn-репозитория /home/projects/project/svn.
Репозиторий должен располагаться на той же машине где и trac и trac должен иметь к нему доступ и на чтение и на запись.
Теперь можно проверить, как установился наш trac-проект запустив stand alone сервер
su www-data -c "tracd --port 8000 /home/projects/project/trac"
и открыв в браузере адрес http://localhost:8000/trac
Далее установим mod_python и подключим его
apt-get install libapache2-mod-python libapache2-mod-python-doc a2enmod mod_python
Добавим в файл /etc/apache2/sites-available/project-ssl следующий блок
/etc/apache2/sites-available/project-ssl
...
<Location />
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /home/projects/project/trac
PythonOption TracUriRoot /
</Location>
...
Если необходима возможность аутентификации то добавим блок
/etc/apache2/sites-available/project-ssl
...
<Location /login>
AuthType Basic
AuthName "MyCompany Trac Server"
AuthUserFile /home/projects/project/.htpasswd
Require valid-user
</Location>
...
Перезапустим апач и проверим наш trac https://localhost/
Ссылки
При написании статьи были использованы следующие материалы:
Так же планируется статья описывающая настройку trac и его расширений.
— Ivan A-R 25.04.2007 16:18







Дискуссия
#a2enmod ssl %)
Спасибо, учту
А то я как-то привык, в лоб линки делать
Маны же начинаешь читать только когда ничего другое не помогает
А для управления сертификатами (особенно когда у тебя есть и https и imaps и smtps и еще куча сервисов) лучше использовать инфраструктуру вроде TinyCA
Стоит задуматься. Но пока задача стояла быстренько поднять это всё добро, что бы заработало
Тем более статья в глубоком черновике
Offtop: Странно, что она попала в ленту. Причём два раза =( Я же ставил галку, что изменения небольшие
Не знаю - у меня в ленте опять штук 20 твоих изменений, правда я гугл-ридером читаю, а он иногда глючит (особенно если список старых итемов в ленте сильно меняется).
Да.. У меня с ГР то же. А в опере нормально
А без Debian, с такой статьей, будем “курить бамбук”, поскольку “граблей” со сборкой svn+dav ой как много!
Так ведь цель howto стоит не в разгребании граблей svn+dav под сферическим конём в вакууме, а в том что бы быстренько получить маленький баг-трэкер под проект
Огромнейший респект, мастер ! Ты сэкономил мне кучу времени - будешь в Ростове - с меня пиво ;)
Ну разве что проездом. На вокзал выбежать успеешь?
Нашел ошибку.
При запуске trac выдает следующее:
Traceback (most recent call last):
File "/var/lib/python-support/python2.4/trac/web/main.py", line 406, in dispatch_request dispatcher.dispatch(req) File "/var/lib/python-support/python2.4/trac/web/main.py", line 191, in dispatch chosen_handler = self._pre_process_request(req, chosen_handler) File "/var/lib/python-support/python2.4/trac/web/main.py", line 263, in _pre_process_request chosen_handler = f.pre_process_request(req, chosen_handler) File "/var/lib/python-support/python2.4/trac/versioncontrol/api.py", line 73, in pre_process_request self.get_repository(req.authname).sync() File "/var/lib/python-support/python2.4/trac/versioncontrol/api.py", line 104, in get_repository repos = self._connector.get_repository(rtype, rdir, authname) File "/var/lib/python-support/python2.4/trac/versioncontrol/svn_fs.py", line 234, in get_repository repos = SubversionRepository(dir, None, self.log) File "/var/lib/python-support/python2.4/trac/versioncontrol/svn_fs.py", line 264, in __init__ raise TracError("%s does not appear to be a Subversion repository." \TracError: /home/projects/project/ does not appear to be a Subversion repository.
Вся проблема в том, что путь /home/projects/project/ НЕ ЯВЛЯЕТСЯ репозиторием. Репозиторий - это /home/projects/project/svn!
По всей видимости ошибка кроется здесь: «Скрипт задаст несколько вопросов. Единственный вопрос который потребует коррекции это про расположение svn-репозитория /home/projects/project/.»
Да, конечно, указывать надо каталог с репозиторием. Поправил, спасибо.
Еще пару моментов добавлю. Вышеописанный фикс - это только для последних строк. А все ошибки пайтона, что идут до нее - это, видимо, бага в самом траке, если при его конфигурировании Вы указали использовать sqlite. Правится она так:
sqlite3 /home/projects/project/trac/db/trac.db «insert into system values ('youngest_rev', '');»
нужно установить sqlite3, если его нету.
Далее, если в сорцах есть кирилические описания, строки, комментарии - то трак по умолчанию у меня был настроен на кодировку ISO, в итоге везде были кракозябры при просмотре сорцов через веб. Я думаю стоит добавить пунктик о донастройке в виде правки файла: /home/projects/project/trac/conf/trac.ini default_charset = utf-8 (ну или cp1251, если сорцы в нем)
Ну и на последок, в статье не сказано что же делать дальше. Если человек впервые имеет дело с сабвершном, он остается у разбитого окрыта, ибо видит «ревижн 0» и совершенно пустую страницу. В приведенной ссылоке на статью Configure Apache SSL and Subversion in Debian in 683 seconds этот момент раскрыт, но, довольно запутанно (не объяснен). Предлагаю добавить пункт в конце.
Чтобы появились исходные тексты и первая ревизия проекта, надо импортировать имеющиеся сейчас наработки. svn –username user1 import path https://localhost/svn -m «Первый импорт проекта» здесь user1 - пользователь из ранее созданного htpasswd на сервере, path - путь к папке существующего локального проекта, «Первый импорт проекта» - комментарий, который будет написан в trac. После этого в https://localhost/svn будет уже не пусто, да и в trac появится наполнение, с которым можно будет работать.
Нет.. Ошибка одна, с репозиторием. Просто python выкидывает в лог ошибки содержимое стека вызовов.
Sqlite3 ставится вместе с trac в зависимостях, если конечно его через apt ставить.
Про кодировку я действительно забыл.
Если у меня есть старый проект в svn я просто перемещаю/копируют/делаю симлинк его на новое место.
Статья предполагала продолжение, но как обычно не дошли руки, да и задача актуальность потеряла.
Нет, кроме репозитория есть еще одна. Она описана в их багзилле и решается именно добавлением строчки в ДБ.
Я на SID, ставил аптом, но sqlite3 он поставить забыл… да и просто пакет sqlite не стоял.
Ага… Ну я не проверял что делается в sid'е. В stable и testing всё нормально. Сюда команда дебиана не пускает откровенных ляпов.
Всё же решение подобрых проблем тема для отдельной статьи, где рассматривается установка именно from scratch. Здесь же быстрое не запарное решение.
- **полужирный**
- //курсив//
- > цитата
- [[http://link | Заголовок ссылки]]
Больше о синтаксисе...