Установка и настройка Apache Subversion (SVN) на Ubuntu 18.04 LTS

Важно: в примерах используется домен svn.hakase-labs.io и пользователь hakase — замените их на свои значения.
Краткое определение
Subversion (SVN) — централизованная система управления версиями. Она хранит историю изменений файлов и каталогов и подходит для монолитных репозиториев и проектов с централизованным рабочим процессом.
Предварительные требования
- Сервер с Ubuntu 18.04 LTS
- root или пользователь с sudo-привилегиями
- DNS-запись для вашего домена (например, svn.example.com) указывает на сервер
Что мы сделаем
- Установим Apache2
- Установим Subversion и модуль для Apache
- Создадим и настроим репозиторий
- Получим SSL-сертификат от Let’s Encrypt
- Настроим виртуальный хост Apache для доступа к SVN через HTTPS
- Протестируем доступ, импорт и commit
Шаг 1 — установка Apache2 и базовая настройка UFW
Установите Apache и вспомогательные утилиты:
sudo apt update
sudo apt install apache2 apache2-utils -yРазрешите SSH, HTTP и HTTPS в брандмауэре UFW и включите UFW:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enableЗапустите и добавьте Apache в автозагрузку:
sudo systemctl start apache2
sudo systemctl enable apache2
Важно: на Ubuntu процесс Apache обычно работает от пользователя www-data. Это влияет на права доступа к папкам репозиториев.
Шаг 2 — установка Apache Subversion (SVN)
Установите Subversion и модуль для интеграции с Apache:
sudo apt install subversion subversion-tools libapache2-mod-svn -yПроверьте установку:
svn --version
Объяснение: пакет libapache2-mod-svn предоставляет модуль mod_dav_svn для обслуживания SVN через HTTP(S).
Шаг 3 — создание и конфигурация репозитория
Создайте мастер-директорию для всех репозиториев и новый репозиторий:
sudo mkdir /svn
sudo svnadmin create /svn/hakase-projectНазначьте владельцем репозитория пользователя www-data (стандартный для Ubuntu):
sudo chown -R www-data:www-data /svn/hakase-projectЗамечание: в примерах часто встречается пользователь apache — на Ubuntu используйте www-data. Это важно для корректной работы Apache с файлами репозитория.
Шаг 4 — получение SSL-сертификата Let’s Encrypt
Для защищённого доступа по HTTPS рекомендуется использовать бесплатные сертификаты Let’s Encrypt с certbot.
Установите certbot:
sudo apt install certbot -yОстановите Apache временно, чтобы certbot мог запустить временный web-сервер (standalone) для верификации домена:
sudo systemctl stop apache2
Запустите certbot для указанного домена (замените email и домен на ваши):
sudo certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email you@example.com -d svn.hakase-labs.ioФайлы сертификата будут в директории /etc/letsencrypt/live/svn.hakase-labs.io/

Совет по продлению: используйте команду certbot renew и перезагружайте Apache после успешного продления. Пример cron/системного таймера рассмотрен ниже.
Шаг 5 — настройка виртуального хоста Subversion в Apache
Перейдите в конфигурацию Apache и создайте файл виртуального хоста:
cd /etc/apache2/sites-available/
sudo vim svn.confПример конфигурации (вставьте и отредактируйте в соответствии с вашим доменом и путями):
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 /var/log/apache2/svn_error_log
TransferLog /var/log/apache2/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 /var/log/apache2/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
Объяснение ключевых частей:
- SVNParentPath /svn/ — указывает, что каталог /svn содержит несколько репозиториев. Каждый подкаталог — отдельный репозиторий.
- AuthUserFile — файл с пользователями для базовой аутентификации (htpasswd).
Создайте файл пользователей и добавьте первого пользователя (замените hakase и путь при необходимости):
sudo htpasswd -cm /etc/subversion/svn.users hakaseЕсли добавляете дополнительного пользователя, используйте без ключа -c (он создаёт файл):
sudo htpasswd -m /etc/subversion/svn.users anotheruserВключите модули и сайт, затем перезапустите Apache:
sudo a2enmod dav dav_svn ssl
sudo a2ensite svn
sudo systemctl restart apache2
Важно: если конфигурация virtual host использует имя хоста вместо :443, убедитесь, что DNS и ServerName настроены корректно. Альтернативно можно использовать
Шаг 6 — тестирование и рабочие операции
Просмотр репозитория в браузере
Откройте в браузере:
https://svn.hakase-labs.io/repo/hakase-project/
Вас попросит ввести логин/пароль по базовой аутентификации (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При первом подключении вас могут попросить принять сертификат — ответьте ‘p’ для постоянного принятия.

Клонирование (checkout) репозитория
Создайте обычного пользователя и выполните checkout под ним:
sudo useradd -m -s /bin/bash misaka
su - misaka
svn co https://svn.hakase-labs.io/repo/hakase-project/ ~/myproject --username hakaseПроверьте содержимое:
tree ~/myproject

Коммит изменений
Добавьте файлы и выполните commit:
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
Рекомендации по безопасности и обслуживанию
- Права доступа: держите владельца репозиториев — www-data и ограничьте права для остальных.
- Резервное копирование: используйте
svnadmin dumpи храните дампы вне сервера. Пример:
sudo svnadmin dump /svn/hakase-project > /backups/hakase-project-$(date +%F).dump- Автопродление сертификата Let’s Encrypt: используйте systemd timer или cron и после renew делайте reload Apache:
# Пример systemd timer/post-hook (альтернативно cron)
sudo certbot renew --post-hook "systemctl reload apache2"- Логи: проверяйте /var/log/apache2/svn_error_log и svn_access_log для анализа доступа.
- Ограничение доступа: используйте файрвол, fail2ban и при необходимости IP-Whitelist.
Управление доступом и политики
- Используйте файл Authz (authz_svn) для тонкой настройки прав на пути (если требуется).
- Для отдельных операций можно разрешить анонимный просмотр, но требовать аутентификацию на commit. В этом случае добавьте в конфигурацию директивы Require и Satisfy по необходимости.
Резервное копирование и восстановление — быстрый план
- Регулярно делать
svnadmin dump(ежедневно/еженедельно в зависимости от активности). - Хранить дампы на удалённом хранилище (S3, NFS, другой сервер).
- Тестировать восстановление:
svnadmin loadв тестовой среде.
Три типичных проблемы и способы их решения
- SSL сертификат не принят в браузере: проверьте цепочку сертификатов (fullchain.pem) и корректность даты/времени сервера.
- Ошибка 403 при доступе: проверьте владельца/права каталогов репозитория и настройки Require в конфигурации Apache.
- Проблемы с аутентификацией htpasswd: убедитесь, что путь к файлу AuthUserFile совпадает в конфиге и что файл читается процессом Apache.
Альтернативные подходы
- Вместо Apache можно использовать svnserve (протокол svn://) — проще, но без встроенного HTTPS и аутентификации через HTTP.
- Хранить репозитории в сети (NFS) — потенциально опасно: предпочтительнее локальное хранилище и резервирование дампами.
- Для распределённой модели разработки используйте Git; для миграции можно применять git-svn.
Критерии приёмки
- Доступ по HTTPS к https://ваш-домен/repo/ отвечает и запрашивает логин.
- Пользователь может импортировать проект и выполнить checkout.
- Логи Apache не содержат критических ошибок при базовых операциях.
- Существуют регулярные бэкапы и план восстановления.
Роль — чек-листы
Администратор:
- Настроить DNS, UFW и certbot
- Проверить права на /svn и владельца www-data
- Настроить автопродление сертификата
Разработчик:
- Проверить доступ через svn checkout
- Выполнить import и commit
- Сообщить об ошибках доступа/конфликтов
Короткий глоссарий
- SVNParentPath — директива Apache указывающая каталог с несколькими репозиториями
- htpasswd — утилита для управления файлами базовой аутентификации
- certbot — клиент для получения сертификатов Let’s Encrypt
- svnadmin dump/load — команды для резервного копирования и восстановления репозиториев
Итог
Вы настроили Apache Subversion на Ubuntu 18.04 с доступом по HTTPS и базовой авторизацией. Для надёжной эксплуатации добавьте регулярные резервные копии, мониторинг логов и автоматическое продление сертификатов.
Примечание: замените в примерах домен, электронную почту и имена пользователей на ваши значения перед выполнением команд.
Полезные ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента