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

SVN на CentOS 7: настройка Apache и Let's Encrypt

• 6 min read • DevOps • Обновлено 09 Nov 2025
SVN на CentOS 7: Apache + Let's Encrypt
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.

Демонстрация интерфейса установки Apache Subversion на сервере

Основные требования

  • Сервер с CentOS 7
  • root-привилегии (или эквивалент sudo)
  • Домашний домен, указывающий на сервер (например, svn.hakase-labs.io)
  • Открытые порты 80 и 443

Что мы сделаем

  1. Установим Apache httpd
  2. Установим Subversion (SVN)
  3. Создадим и настроим репозиторий
  4. Получим SSL от Let’s Encrypt (certbot)
  5. Настроим виртуальный хост Apache для SVN с Basic Auth
  6. Проверим импорт, клонирование и коммиты

Шаг 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 httpd

Apache должен работать и принимать подключения на порт 80.

Экран успешного запуска Apache httpd

Шаг 2 — Установка Apache Subversion (SVN)

Установим пакеты Subversion из стандартного репозитория CentOS 7:

yum -y install subversion subversion-tools mod_dav_svn

После установки проверьте версию:

svn --version

Окно установки Apache Subversion с выводом версии

Шаг 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

Процесс генерации сертификата Let's Encrypt с использованием certbot

Запустите 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/

certbot показал путь к полученным сертификатам Let's Encrypt

После получения сертификата снова запустите 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"

Сохраните файл. Директива делает все репозитории корнем по пути /svn/ — то есть https://svn.example.com/repo//

Создайте файл пользователей для Basic Auth и добавьте первого пользователя:

sudo htpasswd -cm /etc/subversion/svn.users hakase

Опция -c создаёт новый файл; для добавления следующих пользователей используйте без -c.

Перезапустите httpd:

systemctl restart httpd

Редактирование файла svn.conf и тест перезапуска Apache

Шаг 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), если хотите.

Процесс импорта проекта в репозиторий через SVN клиент

Клонирование репозитория (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

Дерево локального клона проекта после checkout

Коммит файлов в репозиторий

Добавим тестовые файлы и отправим коммит:

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

После успешного коммита файлы появятся в веб-интерфейсе репозитория.

Скриншот процесса коммита в SVN через консоль

Дополнительные рекомендации и лучшие практики

Принципы безопасности

  • Храните файл /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

Плейбук: быстрая инструкция для развертывания

  1. yum install httpd mod_ssl subversion mod_dav_svn certbot
  2. mkdir /svn && svnadmin create /svn/REPO && chown -R apache:apache /svn/REPO
  3. Получить сертификат: certbot certonly –standalone -d your.domain
  4. Создать /etc/httpd/conf.d/svn.conf (сконфигурировать VirtualHost и )
  5. htpasswd -cm /etc/subversion/svn.users user
  6. systemctl restart httpd
  7. Тестировать 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

Важно: поддерживайте регулярное резервное копирование и следите за сроком действия сертификатов.

Ссылки

Поделиться: 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 быстро