Как настроить SVN‑сервер на CentOS

В этой статье шаг за шагом описано, как установить и настроить Subversion (SVN) на CentOS, развернуть репозиторий, подключить Apache (mod_dav_svn), задать пользователей и права доступа, протестировать подключение из Linux и Windows (TortoiseSVN). Включены контрольные списки, советы по безопасности и типовые сценарии устранения проблем.
Введение
SVN (Subversion) — централизованная система контроля версий от Apache. Она позволяет хранить историю изменений файлов и управлять доступом пользователей. Подходит для командной разработки, версионного контроля документов и простых CI/репозиторных рабочих процессов.
Кратко о терминах:
- Репозиторий — хранилище версий проекта.
- Коммит — сохранение изменений в репозитории.
- Checkout — копирование рабочей копии из репозитория.
1. Предварительная заметка
В примерах использован CentOS 6.4 (32‑бит). Команды и конфигурации подходят и для похожих версий RHEL/CentOS, но пакеты и пути могут отличаться в более новых релизах. Адрес сервера в примерах — 192.168.43.101.
Важно: если вы используете более новый CentOS или другой дистрибутив, проверьте совместимость версий пакетов subversion и модулей Apache.
2. Установка SVN и необходимых пакетов
Нам потребуются пакеты: httpd, mod_dav_svn и subversion. В CentOS их удобно ставить через yum. Можно использовать и другой веб‑сервер (nginx + svn over HTTP через proxy), но ниже рассматривается связка Apache + mod_dav_svn.
Проверка сетевого интерфейса (пример):
ifconfig
Пример вывода (сервера):
[root@SVNSVR641 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:192.168.43.101 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4640 errors:0 dropped:0 overruns:0 frame:0
TX packets:6845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:444461 (434.0 KiB) TX bytes:549473 (536.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2125 errors:0 dropped:0 overruns:0 frame:0
TX packets:2125 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:186888 (182.5 KiB) TX bytes:186888 (182.5 KiB)
Установка Apache, Subversion и модуля:
yum install -y httpd
yum install -y subversion
yum install -y mod_dav_svn
Примеры вывода установки опущены здесь — в реальной среде yum покажет прогресс и зависимости. После установки убедитесь, что службы установлены корректно:
service httpd status
svn --version
Important
Если вы используете современный дистрибутив, замените yum на dnf и проверьте версии пакетов. На новых системах модуль модуль mod_dav_svn может называться по‑другому.
3. Создание репозитория и базовая конфигурация
Разделим данные и сервисы по каталогам. Хорошая практика — вынести репозитории в отдельную директорию.
Создаём корневой каталог для репозиториев:
mkdir -p /data/svn
Создаём репозиторий repo1 и назначаем владельца apache (в CentOS Apache работает под пользователем apache):
svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1
Структура репозитория после создания:
cd /data/svn/repo1
ls
Ожидаемый набор директорий и файлов: conf db format hooks locks README.txt
Файлы конфигурации
Перейдите в каталог conf:
cd /data/svn/repo1/conf
ls
Вы увидите: authz passwd svnserve.conf
Отредактируйте svnserve.conf (если планируете запускать svnserve; в нашем случае основная аутентификация — через Apache):
vi svnserve.conf
Пример содержимого:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
Затем создаём файл passwd для списка пользователей. Команда htpasswd из пакета httpd позволяет удобно управлять паролями в формате Apache:
htpasswd -c /data/svn/repo1/conf/passwd jay
htpasswd /data/svn/repo1/conf/passwd fikri
htpasswd /data/svn/repo1/conf/passwd farid
Пример вывода команды cat passwd после создания трёх пользователей:
[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo
Note Пароли в файле passwd хранятся в виде хешей. Не храните этот файл в доступных местах и контролируйте права доступа.
Разграничение прав доступа
Файл authz определяет, какие пользователи и группы имеют доступ к репозиториям. Пример конфигурации для repo1:
vi /data/svn/repo1/conf/authz
[repo1:/]
farid = r
fikri = rw
* =
Здесь:
- farid — только чтение (r)
- fikri — чтение и запись (rw)
- остальные — без доступа
Настройка Apache для доступа к репозиторию через HTTP
Откройте основной конфиг Apache и убедитесь, что в httpd.conf есть включение каталога conf.d:
vi /etc/httpd/conf/httpd.conf
Проверьте наличие строки:
Include conf.d/*.conf
Далее в /etc/httpd/conf.d/ обычно уже есть файл subversion.conf. Отредактируйте или создайте его со следующим содержимым:
vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user
Объяснение ключевых директив:
- SVNPath — путь к локальному репозиторию.
- AuthzSVNAccessFile — файл, где описаны права доступа.
- AuthUserFile — файл с пользователями/хешами паролей.
- Require valid-user — разрешает доступ только аутентифицированным пользователям.
Перезапустите Apache, чтобы применить изменения:
service httpd restart
Проверка статуса:
service httpd status
Если Apache не стартует, проверьте журналы /var/log/httpd/error_log.
4. Тестирование репозитория из Linux
На клиенте Linux (CentOS Desktop) установите пакет subversion:
yum install -y subversion
Клонируем (checkout) репозиторий по HTTP:
mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client
При первичном входе Subversion запросит учётные данные пользователя (в примере — fikri). Subversion может предложить сохранить пароль в открытом виде. Для продакшена рекомендуется настроить шифрование хранения паролей.
После checkout вы увидите пустую рабочую копию (ревизия 0). Чтобы проверить права rw, создайте папку и закоммитьте её:
cd repo_client
svn mkdir first_dir
svn commit -m "My first folder"
Успешная фиксация покажет “Committed revision 1.” — значит права пользователя работают.
5. Тестирование из Windows с TortoiseSVN
- Установите TortoiseSVN.
- Создайте папку testSVN.
- Правый клик → SVN Checkout и укажите URL: http://192.168.43.101/repo1
- Авторизуйтесь под пользователем farid.
Из‑за настроенных прав вы увидите каталог, созданный fikri, но при попытке добавить и закоммитить папку farid получит ошибку доступа (read‑only).
ALT изображения выше описывают шаги аутентификации, ошибку доступа, и интерфейс TortoiseSVN.
Практические дополнения и рекомендации
Роль‑ориентированные чек‑листы
Администратор
- Установить httpd, subversion, mod_dav_svn.
- Создать /data/svn и репозитории.
- Настроить файл authz и passwd.
- Проверить права владельца (apache).
- Перезапустить Apache и проверить журналы.
Разработчик
- Установить svn‑клиент (Linux) или TortoiseSVN (Windows).
- Выполнить svn checkout и настроить хранение пароля.
- Следовать правилам структуры веток и признаков коммитов.
Оператор CI
- Проверить права чтения для сервисного пользователя CI.
- Использовать checkout/commit в автоматических скриптах с защищёнными ключами.
Мини‑методология развертывания
- Подготовить сервер: обновить пакеты, настроить сетевой доступ.
- Установить Apache и Subversion.
- Создать репозиторий(и) и задать владельца.
- Настроить аутентификацию и авторизацию (passwd + authz).
- Подключить репозиторий к Apache (mod_dav_svn).
- Тестировать из разных ОС, проверить права.
- Произвести hardening (SSL, бэкапы, мониторинг).
Технологические альтернативы
- Если вам нужна распределённость репозиториев и современный рабочий процесс — рассмотрите Git.
- Для простого http доступа можно поставить nginx и проксировать запросы к Apache или использовать svnserve.
- Для интеграции с LDAP/Active Directory — настроить модуль authnz_ldap в Apache и использовать LDAP‑авторизацию вместо файла passwd.
Безопасность и защита данных
- Перенесите службу под TLS (HTTPS). Настройте сертификат и измените URL на https://.
- Не храните файл с паролями (passwd) в копируемых архивах.
- Ограничьте доступ по IP в конфигурации Apache, если нужно.
- Регулярно делайте бэкап каталога /data/svn и файлов конфигурации.
Короткое руководство по включению HTTPS:
- Получите сертификат (Let’s Encrypt или внутренний CA).
- Включите SSL модуль и настройте виртуальный хост 443.
- Включите Redirect с 80 на 443.
Миграция и совместимость
- При переносе репозитория используйте svnadmin dump/load:
svnadmin dump /data/svn/repo1 > repo1.dump
svnadmin load /data/svn/newrepo < repo1.dump
- При переходе на новые версии Subversion проверьте поддержку формата репозитория и совместимость клиент‑сервер.
Отладка и наиболее частые проблемы
Проблема: Apache не стартует после добавления subversion.conf
- Проверьте /var/log/httpd/error_log на ошибки загрузки модулей.
- Убедитесь, что пути к модулям верны и что mod_dav_svn установлен.
Проблема: 403 Forbidden при доступе к репозиторию
- Проверьте файл authz — возможно, пользователь не имеет прав.
- Убедитесь, что AuthUserFile и AuthzSVNAccessFile указывают на существующие файлы и что Apache имеет права чтения.
- Проверьте SELinux (если включён): временно отключите его для проверки или настройте контексты (restorecon/ chcon).
Проблема: Ошибка аутентификации при TortoiseSVN, хотя пароль верный
- Убедитесь в кодировке пользователя и отсутствии пробелов.
- Проверьте, что файл passwd был создан корректно и что пароли не перенесены вручную без хеширования.
Проблема: Предупреждение о хранении пароля в открытом виде в Subversion
- Настройте шифрование хранения паролей в клиенте Subversion или используйте системный менеджер ключей.
Mermaid диаграмма для выбора способа подключения
flowchart TD
A[Нужно развернуть SVN] --> B{Есть ли Apache?}
B -- Да --> C[Использовать mod_dav_svn]
B -- Нет --> D{Можно ли поставить Apache?}
D -- Да --> C
D -- Нет --> E[Использовать svnserve 'TCP']
C --> F[Настроить Authz и AuthUserFile]
E --> F
F --> G[Тестирование клиентов]
Критерии приёмки
- Репозиторий доступен по URL (HTTP/HTTPS).
- Права доступа (r/rw/none) применяются согласно authz.
- Apache стартует без ошибок. Логи ошибок пусты по критическим записям.
- Клиенты Windows и Linux могут выполнить checkout.
- README и процессы бэкапа задокументированы.
Однострочный глоссарий
- SVN — централизованная VCS; Apache + mod_dav_svn — способ раздачи репозитория по HTTP; authz — файл авторизации; passwd — файл пользователей.
Резюме
Вы установили Subversion и интегрировали его с Apache. Создали репозиторий, настроили пользователей и права доступа. Протестировали подключение из Linux и Windows. Дальше рекомендуется включить HTTPS, настроить регулярные бэкапы и, при необходимости, интегрировать аутентификацию с LDAP.
Important
Перед использованием в продакшен‑окружении обязательно настроьте HTTPS и политику бэкапов. Ограничьте доступ и следите за логами.
Короткая инструкция для быстрого старта (чек‑лист):
- Установить пакеты: httpd, subversion, mod_dav_svn.
- Создать /data/svn и svnadmin create repo.
- Настроить passwd и authz.
- Настроить /etc/httpd/conf.d/subversion.conf с правильными путями.
- Перезапустить httpd и протестировать checkout.
Похожие материалы

Как выбрать поставщика SaaS-приложения

Google сохраняет скриншоты поиска на Android

Android как клавиатура и мышь для ПК

Как сохранить резервную копию WhatsApp перед удалением

360° фото на Facebook: загрузка и просмотр
