Как установить SVN с Apache dav_svn на CentOS 7
Коротко: пошаговая инструкция по установке Subversion (SVN) и модуля mod_dav_svn на CentOS 7, настройке Apache с базовой аутентификацией, созданию репозитория и основным операциям (import, checkout, commit). Включены рекомендации по SELinux, firewall, чек-листы для администратора и список альтернатив.
Version: 1.0
Последнее редактирование: 22 июля 2014
Follow howtoforge on Twitter
Обзор SVN
Apache Subversion (SVN) — система контроля версий и управления изменениями файлов. Кратко: она хранит текущие и исторические версии файлов (код, документация, веб-страницы) и часто применяется как преемник CVS. В этой статье описаны установка и базовая эксплуатация SVN с модулем Apache mod_dav_svn на CentOS 7.
Важно: Subversion — это централизованная система контроля версий. Если нужна распределённая модель, рассмотрите Git.
Что будет сделано
- Установка httpd, subversion, mod_dav_svn
- Настройка Apache для доступа к репозиториям по URL
- Создание файла с пользователями (htpasswd)
- Создание репозитория svnadmin и настройка прав/SELinux
- Открытие портов в firewall
- Проверка через браузер и основные команды SVN: import, checkout, commit, log
Требования и предпосылки
- Сервер под CentOS 7 с правами root или sudo
- Доступ в репозиторий пакетов (CentOS updates)
- Базовые навыки работы с командной строкой
Установка пакетов
Установите Apache, Subversion и модуль для Apache:
yum install httpd subversion mod_dav_svnЭти пакеты обычно доступны в репозитории CentOS. После установки можно переходить к конфигурации.
Настройка Subversion в Apache
Откройте конфигурационный файл модуля Subversion для Apache:
vi /etc/httpd/conf.modules.d/10-subversion.confДобавьте (или отредактируйте) следующие строки. Это заставит Apache загрузить модуль dav_svn и настроит алиас /svn => /var/www/svn:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
Alias /svn /var/www/svn
DAV svn
SVNParentPath /var/www/svn/
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /etc/svn-auth-users
Require valid-user
Пояснение важных параметров:
- SVNParentPath указывает каталог, в котором находятся отдельные репозитории.
- AuthUserFile — файл для базовой аутентификации Apache (htpasswd).
- Require valid-user — разрешает доступ только аутентифицированным пользователям.
Важно: сохраняйте файл с правильными правами и убедитесь, что модуль mod_dav_svn установлен и загружается.
Создание файла с пользователями (htpasswd)
Для первого пользователя используйте ключ -c (создать файл):
htpasswd -cm /etc/svn-auth-users john- -c — создать новый файл. Используйте только при первом создании, иначе файл перезапишется.
- -m — использовать MD5 для хранения паролей (пример ниже).
Добавление следующего пользователя:
htpasswd -m /etc/svn-auth-users janeПримечание: файл /etc/svn-auth-users должен быть защищён: chmod 600 /etc/svn-auth-users.
Создание и настройка репозитория
Создайте каталог для репозиториев и создайте репозиторий с помощью svnadmin:
mkdir -p /var/www/svn
cd /var/www/svn/
svnadmin create repo
chown -R apache.apache repo/Если включён SELinux, назначьте правильные контексты:
chcon -R -t httpd_sys_content_t /var/www/svn/repo
chcon -R -t httpd_sys_rw_content_t /var/www/svn/repoОткройте HTTP(S) в firewall и перезапустите сервисы:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
systemctl enable httpd.service
systemctl restart httpd.serviceПримечание: при проблемах с доступом проверьте /var/log/httpd/error_log и /var/log/messages.
Проверка через браузер
Перейдите в браузере по адресу:
http://localhost/svn/repoДолжно появиться окно ввода логина/пароля. После успешной аутентификации вы увидите пустой репозиторий.
Управление репозиториями — базовые операции
Создание тестовой директории и файлов (локально)
cd /tmp
mkdir firstproject
cd firstproject
# создаём тестовые файлы
touch testfile1 testfile2Импорт содержимого в репозиторий
svn import -m "Initial repository" /tmp/firstproject file:///var/www/svn/repo/firstprojectОжидаемый вывод:
Adding /tmp/firstproject/file1
Adding /tmp/firstproject/file2Просмотр информации о проекте
svn info http://localhost/svn/repo/firstproject --username johnCheckout (получить рабочую копию)
mkdir /tmp/myfirstproject
svn co http://localhost/svn/repo/firstproject /tmp/myfirstproject --username janeВнесение изменений и commit
cd /tmp/myfirstproject
touch file3
svn add file3 --username bob
svn commit -m "Added a new file" --username johnОбратите внимание: для добавления файла рекомендовано выполнять svn add под тем пользователем, который выполняет изменения локально; а commit — от того пользователя, под которым хотите зарегистрировать изменение в журнале.
Просмотр журнала изменений
svn log http://localhost/svn/repo/firstproject --username johnДиагностика и часто встречаемые проблемы
- 401/403 ошибки: проверьте файл AuthUserFile и права доступа к нему, убедитесь, что Require настроен корректно.
- 500/серверная ошибка при открытии репозитория: смотрите логи /var/log/httpd/error_log и логи SELinux (ausearch/audit.log).
- SELinux блокирует запись: используйте chcon (см. выше) или добавьте постоянные контексты через semanage fcontext.
- Ошибки с модулем mod_dav_svn: проверьте, что файлы modules/mod_dav_svn.so и mod_authz_svn.so существуют и соответствуют версии httpd.
Важно: перед изменениями на рабочем сервере сделайте резервную копию /etc/httpd/conf.modules.d/10-subversion.conf и каталога /var/www/svn.
Когда такой подход не подходит
- Нужна распределённая модель ветвления и слияния в масштабе (Git чаще лучше для открытого распределённого рабочего процесса).
- Требуется интеграция со специфичными CI/CD, где предпочитают Git-подходы и облачные репозитории.
Альтернативы
- Git (распределённая модель) — высокая популярность, широкая экосистема.
- Mercurial — распределённая система с простой моделью.
- Использование хостингов (GitHub, GitLab, Bitbucket) избавляет от управления собственным сервером.
Чек-лист администратора (быстрый)
- Установлены пакеты: httpd, subversion, mod_dav_svn
- Настроен /etc/httpd/conf.modules.d/10-subversion.conf
- Создан /etc/svn-auth-users, права 600
- Создан репозиторий в /var/www/svn
- SELinux контексты назначены при необходимости
- Firewall открыт для http/https
- Apache запущен и включён в автозагрузку
- Протестирован доступ через браузер и svn cli
Чек-лист разработчика (быстрый)
- Проверен доступ к репозиторию
- Установлен svn client
- Выполнен svn checkout и commit тестового изменения
- Настроен правильный username/password
Критерии приёмки
- Apache отвечает на http://localhost/svn/repo и требует аутентификацию.
- Пользователь может выполнить svn import и увидеть файлы в браузере/через svn list.
- Пользователь может выполнить checkout, изменить файлы и сделать commit.
- Журналы показывают корректные записи об операциях.
Полезные подсказки и сокращённая шпаргалка (cheat sheet)
- Установка пакетов: yum install httpd subversion mod_dav_svn
- Создание пользователя: htpasswd -cm /etc/svn-auth-users user
- Создание репозитория: svnadmin create /var/www/svn/repo
- Импорт: svn import -m “msg” /path file:///var/www/svn/repo/project
- Checkout: svn co http://server/svn/repo/project /local/path
- Commit: svn commit -m “msg”
Простая методология развёртывания
- Установите пакеты и проверьте зависимости.
- Настройте конфигурацию Apache и файл аутентификации.
- Создайте репозиторий и проверьте права/SELinux.
- Откройте порты и запустите Apache.
- Протестируйте клиентскими командами и через браузер.
- Настройте резервное копирование репозиториев и политики доступа.
Decision flow (базовое дерево принятия решений)
graph TD
A[Есть requirement: централизованный VCS?] -->|Да| B[Использовать SVN]
A -->|Нет| C[Рассмотреть Git]
B --> D[На CentOS7?]
D -->|Да| E[Установить httpd, subversion, mod_dav_svn]
D -->|Нет| F[Подготовить пакетный менеджер/репозиторий]Короткий глоссарий
- SVN: Subversion — система контроля версий
- mod_dav_svn: модуль Apache для обслуживания SVN через HTTP
- svnadmin: утилита для администрирования репозиториев
- htpasswd: утилита для создания файлов аутентификации Apache
- SELinux: механизм усиленной безопасности ядра Linux
Безопасность и резервное копирование
- Храните /etc/svn-auth-users вне публичного доступа и с правами 600.
- Делайте регулярные бэкапы каталога /var/www/svn (например, с помощью tar или инструментов репликации).
- Для чувствительных данных рассмотрите HTTPS и сертификаты вместо чистого HTTP.
Когда нужно масштабировать
- Если количество пользователей и операций увеличивается — подумайте о репликации, фоновых бэкапах и мониторинге I/O.
- Для высоких нагрузок — перенос репозиториев на отдельный диск, настройка бэкапов и план обслуживания.
Сводка
Установка и базовая настройка SVN с Apache на CentOS 7 — прямая задача: установить пакеты, настроить модуль dav_svn и файл пользователей, создать репозиторий, назначить контексты SELinux и открыть порты. В статье описаны основные команды, рекомендации по диагностике и чек-листы для администратора и разработчика.
Ссылки
- Apache
- Subversion
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента