RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Установка и настройка SVN сервера с доступом к репозиториям по http протоколу [2008]
Понадобился мне как-то svn сервер, да ещё и с возможностью просматривать содержимое репозиториев в самом обыкновенном браузере, Без каких-то там ssl и прочей приблуды. "Прогуглив" тонну статей таки поставил сервер... После 2х дней колупаний, решил накатать статью, может кому пригодится :)
Итак, имеем: FreeBSD 6.3-RELEASE
Задачи: Система контроля версий ( Subversion ) Доступ к репозиториям по http протоколу ( Apache ) Красивая "web морда" для репозиториев. ( Я использую Trac, о чём и тут напишу, а так "морд" полно :) )
Установка: Ставим mysql Для хранения правил, груп, и логов Trac`a будем использовать базы mysql. Всё-таки рекомендую устанавливать mysql самым первым из списка, ибо он есть в зависимостях у Апача, А моло ли что вам захочется установить из опций у индейца :)))
Очень не плохую статью по mysql`у написал Lissyara, ознакомиться с ней можно тут: http://www.lissyara.su/?id=1189 Единственное отличее - я юзаю старенькую 4.1 )) Ну не люблю я 5ю версию :) Посему мои 5 копеек: Всё это делать не обязательно и, если mysql уже есть в системе, вполне можно использовать имеющуюся версию. Проверяем, есть ли mysql в системе, $ pkg_info | grep mysql и если есть, то сносим его $ cd /usr/ports/databases/mysqlXX-client && make deinstall $ cd /usr/ports/databases/mysqlXX-server && make deinstall $ cd /usr/ports/databases/mysql41-server (Т.к. я не помню, с чем ставил mysql (давно было), я взял все параметры из статьи Лиса) $ make WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin \ WITH_LINUXTHREADS=yes BUILD_OPTIMIZED=yes \ BUILD_STATIC=yes WITHOUT_INNODB=yes \ && make install clean
Ставим Apache 2.2.8 Я ставил индейца 2.2, но думаю что это не принципиально :) на момент установки, в портах была версия 2.2.8 $ cd /usr/ports/www/apache22 $ make config
Собираем python 2.5 Python нужен для работы Trac системы. Проверяем, установлен ли уже питон: $ pkg_info | grep python Если ответ положительный, что более чем вероятно (в списке появится что-то типа: pythonХХ-х.х.х), То просто пропускаем этот шаг, если же питон не установлен, то: $ cd /usr/ports/lang/python25 $ make config
Убираем пункты:
[ ] THREADS Enable thread support
[ ] IPV6 Enable IPv6 support
$ make install clean
Ставим Subversion 1.4.6 Ставилась версия 1.4.6_1 $ cd /usr/ports/devel/subversion $ make config
Установка Trac 0.10 На момент установки в портах была версия 0.10.4_1 $ cd /usr/ports/www/trac $ make config
[X] SUBVERSION Support for subversion RCS
$ make install clean
Ставим mod_python Для корректной работы Trac, нужна поддержка индейцем языка python. $ cd /usr/ports/www/mod_python3 $ make install clean
Ставим mysql-python Нужен для того, чтобы mysql научился понимать то, что толкает ему питон, а в нашем случае это делает Trac :) $ cd /usr/ports/databases/py-MySQLdb $ make install clean
Итак, с установкой закончили. Я не стал расписывать какая опция для каких целей указывалась, Но ничего лишнего здесь нет, все они необходимы для нормальной функциональности :) Если будет интересно что и для чего - можно поискать в гугле, или спросить в этой теме :)
Ну а пока - продолжим-с :)
Теперь всю эту громадину необходимо отконфигурировать...
Конфигурирование: Конфигурируем Apache 2.2 $ edit /usr/local/etc/apache22/httpd.conf Обычно, при сборке Subversion модули в конфиг добавляются сами, если вдруг этого не произошло, то добавляем:
<Directory />
AllowOverride None
Order deny,allow
Deny from all
</Directory>
и заменяем его на
<Directory />
Options Includes Indexes FollowSymLinks
AllowOverride All
Allow from all
</Directory>
Удаляем первоначальный блок управления сайтом, который без коментов выглядит так:
<Directory "/usr/local/www/apache22/data">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Он нам не понадобится.
ну и наконец убираем комментарии со следующих строк:
Include etc/apache22/extra/httpd-autoindex.conf
# Нужен для подгрузки некоторых стандартных директорий и алиасов.
Include etc/apache22/extra/httpd-vhosts.conf
# Управление виртуальными хостами :)
Include etc/apache22/extra/httpd-manual.conf
# Подгружает мануал по апачу, может пригодиться.
Include etc/apache22/extra/httpd-default.conf
# Несколько стандартных опций, которые не указаны в httpd.conf,
# но нужны для нормальной работы апача :)
Теперь самое главное - создаём свои "хосты" :) Вообще - просто мне так удобнее, когда репозиторий доступен не по domain.com/svn, а по svn.domain.com... Поэтому я пошёл путём разбивки на виртуальные хосты. Да и может позже пригодиться, когда понадобиться прикрутить на одну машину более одного сайта :)
Итак: $ edit /usr/local/etc/apache22/extra/httpd-vhosts.conf Удаляем все приведённые там примеры хостов и создаём свои:
<VirtualHost *:80>
ServerAdmin admin@domain.com
# e-mail админа сервера.
DocumentRoot "/usr/local/www/apache22/domain.com"
# Директория под страничку :)
ServerName domain.com
# имя адреса, к которому привязан данный хост.
ServerAlias www.domain.com
# Дополнительное имя, по которому будут на этот хост попадать.
ErrorLog "/usr/local/www/apache22/domain.com/error.log"
# Лог ошибок для данного хоста
CustomLog "/usr/local/www/apache22/domain.com/access.log" common
# Лог передаваемой информации для данного хоста.
</VirtualHost>
Создаём хост для нашего SVN`a
<VirtualHost *:80>
DocumentRoot "/usr/local/www/apache22/"
ServerName svn.domain.com
ErrorLog "/usr/local/www/apache22/svn-error.log"
CustomLog "/usr/local/www/apache22/svn-access.log" common
#
# Это всё как и раньше, а вот тут сам блок для работы с SVN`ом.
#
<Location />
DAV svn
# говорит апачу какой модуль использовать для обработки информации.
SVNListParentPath on
# Разрешить просматривать корневой коталог
# В принципе - бессмысленная опция, т.к. не работает при включении
# анонимного доступа :)
SVNParentPath /usr/local/www/apache22/svn
# Корень SVN сервера, где будут храниться репозитории.
AuthType Basic
# Тип авторизации. basic - использовать авторизацию по htpasswd
AuthName "My SVN Server"
# Имя SVN сервера :) Будет отображаться в окне авторизации.
AuthUserFile /usr/local/www/apache22/svn/svn-passwd
# Фаил содержащий пароли для авторизации.
AuthzSVNAccessFile /usr/local/www/apache22/svn/svn-access
# Фаил с настройками прав доступа к репозиторию.
#
# Ниже приведён блок, с доступом на чтение для всех
# Для чтения авторизация не нужна, для записи
# - будет требоваться авторизация.
# Если нужно чтобы и для чтения проходили авторизацию,
# То заменить ВЕСЬ ниже следующий блок на Require valid-user
#
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
</VirtualHost>
Теперь создаём блок для нашей "web морды" к SVN`у
<VirtualHost *:80>
DocumentRoot "/usr/local/www/apache22/trac/proj"
# Как и раньше - директория, где будет храниться трак :)
ServerName proj.domain.com
# Не забыли ещё, для чего это?)))
ErrorLog "/usr/local/www/apache22/trac/proj-error.log"
CustomLog "/usr/local/www/apache22/trac/proj-access.log" common
# Ничего нового :)
#
# А вот собственно настройка самого проекта :)
#
<Location />
SetHandler mod_python
# подключаемый модуль, для обработки информации.
PythonInterpreter main_interpreter
# Использовать основной питоновский интерпретатор.
PythonHandler trac.web.modpython_frontend
# Думаю из названия модуля понятно,
# что подрубить трак как веб страницу :)
PythonOption TracEnv /usr/local/www/apache22/trac/proj
# Путь к корню нашей мордашки :)
#
# Корневая директория
# Т.е. по запросу какой ссылки будет выдаваться морда трака.
# В нашем случае это proj.domain.com.
# Если вместо / дописать что-то типа /trac
# То трак откроется только по ссылке proj.domain.com/trac
#
PythonOption TracUriRoot /
</Location>
#
# Блок утпарвелия логинами для трака.
# В приведённом здесь примере trac будет использовать тот же фаил-базу,
# что и subversion
#
<Location /login>
AuthType Basic
# тип авторизации
AuthName "eA Rus Auth"
# заголовок окна авторизации
AuthUserFile /usr/local/www/free-source.org/svn/svn-passwd
# фаил-база, содержащий логины и пароли.
Require valid-user
# выдаёт вывод окна ввода логина и пароля.
</Location>
</VirtualHost>
Ну, думаю что Apache мы настроили :) Запускать его пока рановато, ибо будет много мата :) Но зато уже отконфигурен и можно про него на время забыть :)
Конфигурируем mysql Ну думаю, что конфигурацию mysql`а можно взять как-раз таки из статьи Лиса, едиснтвенное - нам нужно создать свою базу и юзера для неё. $ mysql -uroot -p
mysql> CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> GRANT ALL PRIVILEGES ON trac.* TO trac@localhost IDENTIFIED BY 'указать_пароль';
Ну и всё собстно :)
Создаём все необходимые директории. Ну для начала полистаем чуть выше и посмотрим, какие пути мы использовали. Вот их все необходимо создать :) А то ваш сервер вас такими словами обзывать будет :)
И так: $ mkdir -p /usr/local/www/apache22/domain.com $ mkdir -p /usr/local/www/apache22/svn $ mkdir -p /usr/local/www/apache22/trac/proj $ cd /usr/local/www/apache22/svn $ mkdir myproject
Теперь выдаём права на директории: $ chown -R www:www /usr/local/www С правами всё)
Теперь создаём фаил-базу с паролями для нашего репозитория. $ htpasswd -cm /usr/local/www/apache22/svn/svn-passwd admin
Здесь:
htpasswd - утилита Apache`a, для генерации нужных нам паролей.
-cm - ключи
ключ c - создать новый фаил, если уже есть - перезаписать.
ключ m - использовать md5.
admin - имя пользователя, для которого будет добавлена запись.
Для добавления новых пользователей используйте команду: $ htpasswd -m /usr/local/www/apache22/svn/svn-passwd user-name
Создаём фаил с привелегиями пользователей для репозитория. $ edit /usr/local/www/apache22/svn/svn-access
[groups]
# Блок, содержащий группы.
devel = FenX, Admin, Tartos
# Группа devel и перечень пользователей в неё входящих.
trans = Jarek
# Группа занимающаяся переводами.
[/]
# Корень нашего SVN сервера
* = r
# Доступ для анонимов на чтение.
[myproject:/]
# директория проекта myproject
@devel = rw
# группе devel глобально разрешено чтение\запись
[myproject:/translate]
# директория translate в репозитероии myproject
@trans = rw
# группе trans разрешено чтение\запись.
[myproject:/development]
# директория разработчиков.
* =
# запрет для всех пользователей.
@devel = rw
#разрешён доступ на чтение\запись только группе девелоперов.
Ну с этим думаю всё :)
Создаём trac проект $ trac-admin /usr/local/www/apache22/trac/proj initenv !!! Комментариями указаны опции, которые необходимо указывать !!!
Project Name [My Project]> # Указываем имя проекта.
# mysql://trac:ваш_пароль@localhost/trac
Database connection string [sqlite:db/trac.db]>
Repository type [svn]> # Оставить как есть :)
Path to repository [/path/to/repos]> # /usr/local/www/apache22/svn/myproject
Добавляем нашего админа: $ trac-admin /usr/local/www/apache22/trac/proj permission add admin TRAC_ADMIN
После того, как репозиторий будет создан, можно отредактировать его фаил конфигов. $ edit /usr/local/www/apache22/trac/proj/conf/trac.ini редактировать можно по своему вкусу :) Там в основном мелочные настройки, основные мы уже сделали при создании проекта trac`a.
Ну вот в принципе и всё. Проект полностью настроен.
Теперь запускаем: $ /usr/local/etc/rc.d/apache22 start Если всё ок, то проверяем работает ли :) Заходим по ссылкам: _http://svn.domain.com/myproject Сверху должно быть что-то типа