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

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

7 min read DevOps Обновлено 19 Oct 2025
Настройка SVN‑сервера на CentOS
Настройка 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

  1. Установите TortoiseSVN.
  2. Создайте папку testSVN.
  3. Правый клик → SVN Checkout и укажите URL: http://192.168.43.101/repo1
  4. Авторизуйтесь под пользователем farid.

Из‑за настроенных прав вы увидите каталог, созданный fikri, но при попытке добавить и закоммитить папку farid получит ошибку доступа (read‑only).

SVN HTTP auth

Access Forbidden

Enter the SVN repository URL.

Login with TortoiseSVN

SVN checkout completed

Directory List

Create the directory in Windows

Chose Add in the menu

Select the directory

The directory has been added to SVN

Select commit in the menu

Commit the directory to SVN

SVN authentication request

Write access has been denied to the read-only user.

ALT изображения выше описывают шаги аутентификации, ошибку доступа, и интерфейс TortoiseSVN.

Практические дополнения и рекомендации

Роль‑ориентированные чек‑листы

Администратор

  • Установить httpd, subversion, mod_dav_svn.
  • Создать /data/svn и репозитории.
  • Настроить файл authz и passwd.
  • Проверить права владельца (apache).
  • Перезапустить Apache и проверить журналы.

Разработчик

  • Установить svn‑клиент (Linux) или TortoiseSVN (Windows).
  • Выполнить svn checkout и настроить хранение пароля.
  • Следовать правилам структуры веток и признаков коммитов.

Оператор CI

  • Проверить права чтения для сервисного пользователя CI.
  • Использовать checkout/commit в автоматических скриптах с защищёнными ключами.

Мини‑методология развертывания

  1. Подготовить сервер: обновить пакеты, настроить сетевой доступ.
  2. Установить Apache и Subversion.
  3. Создать репозиторий(и) и задать владельца.
  4. Настроить аутентификацию и авторизацию (passwd + authz).
  5. Подключить репозиторий к Apache (mod_dav_svn).
  6. Тестировать из разных ОС, проверить права.
  7. Произвести 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:

  1. Получите сертификат (Let’s Encrypt или внутренний CA).
  2. Включите SSL модуль и настройте виртуальный хост 443.
  3. Включите 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.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

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

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

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

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

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

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

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

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

360° фото на Facebook: загрузка и просмотр
Социальные сети

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

Конвертация видео и аудио в VLC — руководство
Мультимедиа

Конвертация видео и аудио в VLC — руководство