Главная Облако тегов     Подписка на ленту обновлений (RSS) XMPP (Jabber) совместимые службы мгновенных сообщений. К примеру Google Talk, Gizmo, jabber.org Пишите письма О сайте

Установка 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

Дискуссия

GQ, 2007/04/24 09:27
Подключим модуль ssl. Для этого в каталоге /etc/apache2/mods-enabled выполним команды

#a2enmod ssl %)

Ivan A-R, 2007/04/24 12:13

Спасибо, учту =) А то я как-то привык, в лоб линки делать =) Маны же начинаешь читать только когда ничего другое не помогает =)

GQ, 2007/04/24 09:29

А для управления сертификатами (особенно когда у тебя есть и https и imaps и smtps и еще куча сервисов) лучше использовать инфраструктуру вроде TinyCA

Ivan A-R, 2007/04/24 12:17

Стоит задуматься. Но пока задача стояла быстренько поднять это всё добро, что бы заработало =) Тем более статья в глубоком черновике =)

Offtop: Странно, что она попала в ленту. Причём два раза =( Я же ставил галку, что изменения небольшие =)

GQ, 2007/04/24 14:10

Не знаю - у меня в ленте опять штук 20 твоих изменений, правда я гугл-ридером читаю, а он иногда глючит (особенно если список старых итемов в ленте сильно меняется).

Ivan A-R, 2007/04/24 14:24

Да.. У меня с ГР то же. А в опере нормально

Avatar, 2007/04/25 11:40

А без Debian, с такой статьей, будем “курить бамбук”, поскольку “граблей” со сборкой svn+dav ой как много!

Ivan A-R, 2007/04/25 16:31

Так ведь цель howto стоит не в разгребании граблей svn+dav под сферическим конём в вакууме, а в том что бы быстренько получить маленький баг-трэкер под проект ;-)

Mentat, 2007/06/05 14:24

Огромнейший респект, мастер ! Ты сэкономил мне кучу времени - будешь в Ростове - с меня пиво ;)

Ivan A-R, 2007/06/05 15:58

Ну разве что проездом. На вокзал выбежать успеешь? ;-)

BaBL, 2007/10/21 02:01

Нашел ошибку.

При запуске 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/.»

Ivan A-R, 2007/10/21 02:13

Да, конечно, указывать надо каталог с репозиторием. Поправил, спасибо.

BaBL, 2007/10/21 03:37

Еще пару моментов добавлю. Вышеописанный фикс - это только для последних строк. А все ошибки пайтона, что идут до нее - это, видимо, бага в самом траке, если при его конфигурировании Вы указали использовать 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 появится наполнение, с которым можно будет работать.

Ivan A-R, 2007/10/21 12:52

Нет.. Ошибка одна, с репозиторием. Просто python выкидывает в лог ошибки содержимое стека вызовов.

Sqlite3 ставится вместе с trac в зависимостях, если конечно его через apt ставить.

Про кодировку я действительно забыл.

Если у меня есть старый проект в svn я просто перемещаю/копируют/делаю симлинк его на новое место.

Статья предполагала продолжение, но как обычно не дошли руки, да и задача актуальность потеряла.

BaBL, 2007/10/21 13:06
Нет.. Ошибка одна, с репозиторием. Просто python выкидывает в лог ошибки содержимое стека вызовов.

Нет, кроме репозитория есть еще одна. Она описана в их багзилле и решается именно добавлением строчки в ДБ.

Sqlite3 ставится вместе с trac в зависимостях, если конечно его через apt ставить.

Я на SID, ставил аптом, но sqlite3 он поставить забыл… да и просто пакет sqlite не стоял.

Ivan A-R, 2007/10/21 14:01

Ага… Ну я не проверял что делается в sid'е. В stable и testing всё нормально. Сюда команда дебиана не пускает откровенных ляпов. ;-) Всё же решение подобрых проблем тема для отдельной статьи, где рассматривается установка именно from scratch. Здесь же быстрое не запарное решение.

Enter your comment (wiki syntax is allowed):
Краткая справка
  • **полужирный**
  • //курсив//
  • > цитата
  • [[http://link | Заголовок ссылки]]
Больше о синтаксисе...
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
apache2-ssl-subversion-trac.txt · Последние изменения: 2007/10/21 02:11 От plumbum