Гид по технологиям

Как настроить веб‑доступ к репозиториям Subversion через Apache

• 5 min read • Серверы • Обновлено 21 Nov 2025
Веб‑доступ к Subversion через Apache
Веб‑доступ к Subversion через Apache

Важно: инструкция ориентирована на FreeBSD и исходный пример использует Berkeley DB для хранения репозиториев. Если вы предпочитаете механизмы хранения без BDB (FSFS), смотрите раздел «Альтернативные подходы».

Требования и термины

  • Система: FreeBSD (описанные пути соответствуют стандартной портовой установке).
  • Права: root или эквивалент для установки пакетов и редактирования конфигурации.
  • Короткие определения:
    • Subversion (SVN) — система контроля версий.
    • Apache — веб‑сервер, обеспечивающий доступ к репозиториям через HTTP(S).
    • mod_dav_svn — модуль Apache, реализующий DAV-интерфейс для Subversion.
    • Berkeley DB (BDB) — хранилище данных, может использоваться Subversion для репозиториев.

Шаги установки (пошагово)

1. Установка Apache с поддержкой Berkeley DB

Перейдите в каталог портов и соберите Apache 2.0.x с опцией BDB:

box# cd /usr/ports/www/apache20/  
box# make -DWITH_BDB4 install clean  
some installation steps... 

Добавьте запуск Apache при загрузке системы:

box# echo 'apache2_enable="YES"' >> /etc/rc.conf 

2. Установка Subversion с поддержкой mod_dav_svn

box# cd /usr/ports/devel/subversion  
box# make -DWITH_MOD_DAV_SVN install clean  
some installation steps...

Примечание: если у вас уже установлен Subversion без mod_dav_svn, см. раздел “Подключение модуля к существующей установке”.

3. Проверка установки модуля в Apache

Проверьте, что модуль mod_dav_svn и authz модуль загружены в конфигурации Apache:

box# cat /usr/local/etc/apache2/httpd.conf | grep svn

Ожидаемый вывод:

LoadModule dav_svn_module     libexec/apache2/mod_dav_svn.so  
LoadModule authz_svn_module   libexec/apache2/mod_authz_svn.so 

4. Создание тестового репозитория

box# mkdir /usr/home/svn  
box# mkdir /usr/home/svn/repos  
box# svnadmin create /usr/home/svn/repos/test

5. Создание файлов аутентификации и контроля доступа

box# mkdir /usr/home/svn/access  
box# cd /usr/home/svn/access  
box# htpasswd -cm users root  
password:**  
box# htpasswd -m users viewer  
password:***

Файл контроля доступа (пример):

box# vi control

Содержимое файла control:

[test:/]
root = rw
viewer = r

6. Конфигурация Apache для чтения репозиториев

Создайте файл конфигурации в Includes:

box# cd /usr/local/etc/apache2/Includes/  
box# cat svn.conf

Содержимое svn.conf:

  
DAV svn  
SVNParentPath /usr/home/svn/repos  
SVNIndexXSLT "http://svn.example.com/svnindex.xsl"  
AuthzSVNAccessFile /usr/home/svn/access/control  
# anonymous first  
Satisfy Any  
Require valid-user  
# authenticating them valid ones  
AuthType Basic  
AuthName "Subversion Repositories at example.com"  
AuthUserFile /usr/home/svn/access/users  

Apache автоматически читает все файлы из Includes при старте, поэтому svn.conf будет подхвачен. Файлы XSLT для индексирования находятся по шаблону в /usr/local/share/subversion/xslt/ — скопируйте them.xsl и another.css в ваш DocumentRoot при необходимости оформления.

7. Виртуальный хост и документ‑рут

Пример виртуального хоста:

NameVirtualHost *:80  
  
        ServerAdmin [email protected]  
        ServerName svn.example.com  
        DocumentRoot /usr/local/www/pages/svn.example.com  
    CustomLog /var/log/svn.example.com-access_log common  

8. Перезапуск Apache и тест

/usr/local/etc/rc.d/apache2.sh restart

Откройте в браузере http://svn.example.com/svn/repos/test — система должна запросить логин/пароль и показать репозиторий в ревизии 0.

Настройка уведомления о коммите (post-commit hook)

Создайте исполняемый файл в hooks:

box# cd /usr/home/svn/repos/test/hooks/  
box# cat post-commit
[code]  
#!/usr/local/bin/php  
  
[/code]

Убедитесь, что скрипт исполняемый (chmod +x post-commit) и корректно установлен путь к PHP/инструментам svnlook/svnlog.

Подключение модуля к существующей установке Subversion

Если Subversion уже установлен, но без mod_dav_svn, можно переустановить пакет портов с нужными опциями:

box# cd /usr/ports/devel/subversion   
box# make deinstall  
box# make -DWITH_MOD_DAV_SVN -DWITHOUT_BDB4 install clean

Этот пример показывает, как переустановить с отключённым BDB, если вы предпочитаете FSFS или иные механизмы хранения.

Альтернативные подходы

  • Использовать svnserve для доступа по протоколу svn:// — легче настраивать, но без HTTP(S)‑функционала веб‑просмотра.
  • Хранение репозиториев в FSFS вместо Berkeley DB — более устойчивый вариант при аварийных перезагрузках и проще в резервировании.
  • Интеграция аутентификации через LDAP/Active Directory с помощью mod_authnz_ldap — удобна для корпоративных сред.
  • Использовать обратный прокси (например, nginx) перед Apache для SSL‑терминации и rate‑limiting.

Мини‑методология (быстрая проверка)

  1. Установить Apache с нужными опциями.
  2. Установить Subversion с mod_dav_svn.
  3. Создать репозиторий и файлы authz/htpasswd.
  4. Добавить конфигурацию в Includes и перезапустить Apache.
  5. Протестировать доступ и права.
  6. Добавить хук post-commit, настроить мониторинг.

Списки задач по ролям

Администратор сервера:

  • Установить пакеты и зависимости.
  • Настроить запуск Apache при старте.
  • Настроить права доступа к файловой системе для репозиториев.

Разработчик/пользователь:

  • Проверить доступ через браузер и через SVN‑клиент (например, TortoiseSVN).
  • Проверить возможности чтения/записи согласно учётной записи.

Аудитор/безопасник:

  • Проверить конфигурацию AuthType/AuthzSVNAccessFile.
  • Проверить передачу логинов через HTTPS.

Критерии приёмки

  • При обращении к http://svn.example.com/svn/repos/test браузер запрашивает учётные данные.
  • Пользователь с правами rw может зафиксировать изменения, пользователь с r — только читать.
  • Скрипт post-commit корректно запускается и отправляет уведомления.

Тесты и проверочные сценарии

  • Попытка перехода к URL без логина → запрос аутентификации.
  • Логин viewer (read only) → доступ к просмотру, попытка commit → отклонено.
  • Логин root (rw) → успешный commit и наличие изменений в репозитории.
  • Повторный запуск apache2.sh restart без ошибок в логах (/var/log/error_log).

Рекомендации по безопасности

  • Используйте HTTPS (TLS) для защиты учётных данных при передаче.
  • Держите файлы репозиториев в отдельном каталоге с ограничениями доступа (только нужные uid/gid).
  • Не храните учётные данные в открытом виде — используйте htpasswd или интеграцию с LDAP.
  • Ограничьте список пользователей в AuthzSVNAccessFile и регулярно ревизируйте права.
  • Резервное копирование: делайте регулярные дампы репозиториев и копии конфигураций.

Краткий глоссарий (в одну строку)

  • SVNParentPath — директива Apache, указывающая родительский каталог для нескольких репозиториев.

Когда этот метод не подходит

  • Если нужен только быстрый приватный доступ без HTTP, проще использовать svnserve.
  • Для больших корпоративных инсталляций может быть удобнее использовать готовые платформы (GitLab, Bitbucket) с расширенными UI и интеграциями.

Итог и дальнейшие шаги

  • После успешной базовой настройки: включите HTTPS, интегрируйте аутентификацию с корпоративным каталогом при необходимости и настройте мониторинг хостинга и бэкапов.

Коротко: вы установили Apache с поддержкой BDB, добавили Subversion с mod_dav_svn, создали репозиторий и настроили доступ через Apache. При необходимости переключайтесь на FSFS, добавляйте SSL и внешнюю аутентификацию.

С уважением, ждём ваши улучшения и вопросы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро