SVN на CentOS 7: настройка Apache и Let's Encrypt
Коротко: пошагово устанавливаем Apache и Subversion (SVN) на CentOS 7, настраиваем репозиторий в /svn, обеспечиваем доступ по HTTPS с сертификатом Let’s Encrypt и включаем Basic Authentication для пользователей. Включено: команды, конфигурация виртуального хоста, SELinux-примечания, проверка и отладка.
Введение
Apache Subversion (SVN) — свободное ПО для контроля версий и управления ревизиями, поддерживаемое Apache Software Foundation. Подходит для хранения текущих и исторических версий кода, документов и веб-страниц. В этой инструкции показана установка и настройка SVN на сервере CentOS 7 с использованием Apache httpd и бесплатного SSL от Let’s Encrypt.

Основные требования
- Сервер с CentOS 7
- root-привилегии (или эквивалент sudo)
- Домашний домен, указывающий на сервер (например, svn.hakase-labs.io)
- Открытые порты 80 и 443
Что мы сделаем
- Установим Apache httpd
- Установим Subversion (SVN)
- Создадим и настроим репозиторий
- Получим SSL от Let’s Encrypt (certbot)
- Настроим виртуальный хост Apache для SVN с Basic Auth
- Проверим импорт, клонирование и коммиты
Шаг 1 — Установка Apache httpd на CentOS 7
Установим пакеты httpd и модуль SSL через yum:
yum -y install httpd httpd-tools mod_sslДобавим HTTP в правила firewalld и перезагрузим их:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reloadЗапустим и включим автозапуск httpd:
systemctl start httpd
systemctl enable httpdApache должен работать и принимать подключения на порт 80.

Шаг 2 — Установка Apache Subversion (SVN)
Установим пакеты Subversion из стандартного репозитория CentOS 7:
yum -y install subversion subversion-tools mod_dav_svnПосле установки проверьте версию:
svn --version
Шаг 3 — Конфигурация репозитория Subversion
Создадим мастер-директорию для всех репозиториев и сам репозиторий проекта:
mkdir /svn
svnadmin create /svn/hakase-project
sudo chown -R apache:apache /svn/hakase-projectРепозиторий создан и принадлежит пользователю/группе apache.
Важно: если на системе включён SELinux, нужны специальные контексты для доступа Apache к каталогу репозитория.
chcon -R -t httpd_sys_content_t /svn/hakase-project
chcon -R -t httpd_sys_rw_content_t /svn/hakase-projectЭти команды назначают правильные контексты SELinux для чтения и записи.
Шаг 4 — Получение SSL-сертификата Let’s Encrypt
Мы используем домен svn.hakase-labs.io. Установим certbot и подготовим HTTPS:
yum -y install certbotДобавим HTTPS в firewalld и перезагрузим правила:
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --reloadОстановите httpd, чтобы certbot мог запустить временный standalone сервер для проверки владения доменом:
systemctl stop httpd
Запустите certbot для получения сертификата (замените email и домен на свои):
certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email user@example.com -d svn.hakase-labs.ioЕсли всё прошло успешно, сертификаты будут находиться в /etc/letsencrypt/live/svn.hakase-labs.io/

После получения сертификата снова запустите httpd:
systemctl start httpdПримечание о продлении
Let’s Encrypt выдает сертификаты на 90 дней. Рекомендуется настроить автоматическое продление через cron или systemd timer, например:
# Простой cron-скрипт запускать дважды в день
0 3,15 * * * /usr/bin/certbot renew --quiet && systemctl reload httpdШаг 5 — Конфигурация виртуального хоста SVN в Apache httpd
Создайте файл /etc/httpd/conf.d/svn.conf:
cd /etc/httpd/conf.d/
vim svn.confВставьте конфигурацию (обновите ServerName и пути к сертификатам при необходимости):
ServerName svn.hakase-labs.io
DocumentRoot /var/www/html
Redirect permanent / https://svn.hakase-labs.io
DocumentRoot /var/www/html
ServerName svn.hakase-labs.io
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/letsencrypt/live/svn.hakase-labs.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/svn.hakase-labs.io/privkey.pem
ErrorLog logs/svn_error_log
TransferLog logs/svn_access_log
LogLevel warn
DAV svn
SVNParentPath /svn/
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/subversion/svn.users
Require valid-user
SSLOptions +StdEnvVars
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
Сохраните файл. Директива
Создайте файл пользователей для Basic Auth и добавьте первого пользователя:
sudo htpasswd -cm /etc/subversion/svn.users hakaseОпция -c создаёт новый файл; для добавления следующих пользователей используйте без -c.
Перезапустите httpd:
systemctl restart httpd
Шаг 6 — Тестирование
Просмотр репозитория через браузер
Откройте браузер: https://svn.hakase-labs.io/repo/hakase-project/
Вы увидите запрос Basic Auth; введите созданного пользователя (hakase) и пароль. После авторизации вы увидите структуру репозитория (если в нём есть файлы).
Импорт шаблона проекта в репозиторий
Подготовим стандартную структуру trunk/branches/tags и импортируем:
mkdir -p ~/svn-templates/{trunk,branches,tags}
svn import -m 'Initial import' ~/svn-templates/ https://svn.hakase-labs.io/repo/hakase-project/ --username hakaseПри первом подключении клиент попросит довериться сертификату Let’s Encrypt — введите ‘p’ для постоянного добавления. Затем введите логин/пароль и согласитесь на сохранение (yes), если хотите.

Клонирование репозитория (checkout)
Создадим обычного пользователя и выполним checkout под ним:
useradd -m -s /bin/bash misaka
su - misaka
svn co https://svn.hakase-labs.io/repo/hakase-project/ ~/myproject --username hakaseПовторно примите сертификат и введите учётные данные. После завершения проверьте дерево:
tree ~/myproject
Коммит файлов в репозиторий
Добавим тестовые файлы и отправим коммит:
cd ~/myproject/
echo 'this is my repo' > trunk/test-hakase.txt
echo 'this is my repo01' > trunk/test-hakase01.txt
echo 'this is my repo02' > trunk/test-hakase02.txt
svn add trunk/* --username hakase
svn commit -m 'new file added' --username hakaseПосле успешного коммита файлы появятся в веб-интерфейсе репозитория.

Дополнительные рекомендации и лучшие практики
Принципы безопасности
- Храните файл /etc/subversion/svn.users с правами 640 и владельцем root:apache. Пример:
chown root:apache /etc/subversion/svn.users
chmod 640 /etc/subversion/svn.users- Рассмотрите использование htpasswd с шифрованием bcrypt (если доступно) или интеграцию с PAM/LDAP для централизованной аутентификации.
- Отключите слабые шифры и TLS более ранних версий, при необходимости обновите SSLCipherSuite и SSLProtocol (в примере оставлен общий набор по совместимости).
SELinux и права
Если SELinux включён, убедитесь, что для корневой папки /svn назначены правильные контексты. Для изменений, которые сохранятся между перезагрузками, используйте semanage:
semanage fcontext -a -t httpd_sys_rw_content_t "/svn(/.*)?"
restorecon -R /svn(semanage может требовать установки пакета policycoreutils-python)
Резервное копирование и восстановление
Регулярно делайте бэкап репозиториев, например с помощью svnadmin dump:
svnadmin dump /svn/hakase-project > /var/backups/hakase-project-$(date +%F).svndumpДля восстановления:
svnadmin create /svn/hakase-project
svnadmin load /svn/hakase-project < /var/backups/hakase-project-YYYY-MM-DD.svndump
chown -R apache:apache /svn/hakase-project
restorecon -R /svn/hakase-projectОбновление Subversion
Поддерживайте актуальность пакетов OS и Subversion. Для критичных задач рассмотрите тестирование обновлений на стенде перед продакшеном.
Когда SVN не подходит (контрпримеры)
- Проекты с интенсивной ветвлённостью и частыми слияниями: Git обеспечивает более лёгкие локальные ветки и быстрые слияния.
- Требуется распределённая система с оффлайн-операциями: SVN — централизованная система, не заменяет Git в оффлайн-режиме.
- Интеграция с современными CI/CD, если инфраструктура ориентирована на Git-ориентированные хуки и сервисы (GitHub/GitLab).
Альтернативы
- Git: распределённая, популярная, лучше подходит для ветвления и открытых проектов.
- Mercurial: простой в использовании, распределённый.
- Perforce/Helix: для больших монолитных репозиториев и специфичных enterprise-кейсов.
Чек-листы по ролям
Администратор:
- Настроить резервное копирование (svnadmin dump)
- Обновлять сертификаты и систему
- Мониторить доступность Apache и полноту логов
Разработчик:
- Правильно использовать trunk/branches/tags
- Перед коммитом делать svn update
- Не блокировать репозиторий длительными локальными изменениями
Оператор безопасности:
- Проверять права на /etc/subversion/svn.users
- Проводить аудит логов доступа
- Настраивать автоматическое продление certbot
Плейбук: быстрая инструкция для развертывания
- yum install httpd mod_ssl subversion mod_dav_svn certbot
- mkdir /svn && svnadmin create /svn/REPO && chown -R apache:apache /svn/REPO
- Получить сертификат: certbot certonly –standalone -d your.domain
- Создать /etc/httpd/conf.d/svn.conf (сконфигурировать VirtualHost и
) - htpasswd -cm /etc/subversion/svn.users user
- systemctl restart httpd
- Тестировать import, checkout, commit
Отладочный runbook (быстрый набор действий при ошибках)
Проблема: 403 Forbidden при доступе к /repo
- Проверьте права /svn и владельца apache
- Проверьте SELinux: sestatus && restorecon -R /svn
- Убедитесь, что AuthUserFile указан и файл существует
Проблема: SSL не подключается
- Проверьте путь к /etc/letsencrypt/live/…./fullchain.pem
- systemctl status httpd, journalctl -xe
- certbot certificates
Проблема: svn client не принимает сертификат
- Убедитесь, что на клиенте установлены корневые CA; при первом подключении введите ‘p’ для постоянного принятия
Модель принятия решения (Mermaid)
flowchart TD
A[Нужно хранить версий кода?] --> B{Проект распределённый?}
B -- Да --> C[Используйте Git]
B -- Нет --> D{Нужен централизованный сервер и простота?}
D -- Да --> E[Используйте SVN с Apache]
D -- Нет --> CКритерии приёмки
- Репозиторий доступен по HTTPS: https://
/repo/hakase-project/ - Аутентификация по Basic Auth работает для созданных пользователей
- Импорт, checkout и commit проходят успешно
- Certbot настроен и сертификаты можно автоматически продлить
- SELinux (если включён) не блокирует запись в /svn
Короткое руководство по безопасности и GDPR-заметки
- Убедитесь, что персональные данные (например, e-mail в конфигурациях) хранятся и обрабатываются в соответствии с политиками вашей организации и законодательством (GDPR). Хранение логинов и паролей должно быть ограничено и защищено.
- Для централизованной учётной записи рассмотрите интеграцию с LDAP/AD вместо локальных htpasswd-файлов.
Короткое объявление для команды (100–200 слов)
Мы развернули Apache Subversion (SVN) на CentOS 7 с доступом по HTTPS и Basic Auth. Репозиторий доступен по адресу https://svn.hakase-labs.io/repo/hakase-project/. Для доступа создайте учётную запись через администраторов или используйте htpasswd. Сертификат выдан Let’s Encrypt и настроен на автоматическое продление. Инструкции по работе с репозиторием: import, checkout и commit находятся в документации на сервере. Резервное копирование выполняется через svnadmin dump. Если потребуется интеграция с LDAP или переход на Git, подготовим дорожную карту.
Итог
- Установлен Apache и Subversion, создан репозиторий в /svn/hakase-project
- Настроен виртуальный хост Apache с SSL от Let’s Encrypt
- Включена базовая аутентификация через htpasswd
- Проведены тесты импорт/checkout/commit
Важно: поддерживайте регулярное резервное копирование и следите за сроком действия сертификатов.
Ссылки
- Официальный сайт Subversion: https://subversion.apache.org/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента