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

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

• 5 min read • DevOps • Обновлено 19 Nov 2025
Установка Apache Subversion (SVN) на Ubuntu 18.04
Установка Apache Subversion (SVN) на Ubuntu 18.04

Логотип Apache Subversion и схема репозиториев

Важно: в примерах используется домен svn.hakase-labs.io и пользователь hakase — замените их на свои значения.

Краткое определение

Subversion (SVN) — централизованная система управления версиями. Она хранит историю изменений файлов и каталогов и подходит для монолитных репозиториев и проектов с централизованным рабочим процессом.

Предварительные требования

  • Сервер с Ubuntu 18.04 LTS
  • root или пользователь с sudo-привилегиями
  • DNS-запись для вашего домена (например, svn.example.com) указывает на сервер

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

  1. Установим Apache2
  2. Установим Subversion и модуль для Apache
  3. Создадим и настроим репозиторий
  4. Получим SSL-сертификат от Let’s Encrypt
  5. Настроим виртуальный хост Apache для доступа к SVN через HTTPS
  6. Протестируем доступ, импорт и 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

Установка Apache и настройка UFW

Важно: на Ubuntu процесс Apache обычно работает от пользователя www-data. Это влияет на права доступа к папкам репозиториев.

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

Установите Subversion и модуль для интеграции с Apache:

sudo apt install subversion subversion-tools libapache2-mod-svn -y

Проверьте установку:

svn --version

Установка Subversion

Объяснение: пакет 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

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

Генерация SSL сертификата Let's Encrypt

Совет по продлению: используйте команду 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

Активация vhost и перезапуск Apache

Важно: если конфигурация virtual host использует имя хоста вместо :443, убедитесь, что DNS и ServerName настроены корректно. Альтернативно можно использовать :443>.

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

Клонирование SVN репозитория Проверка репозитория

Коммит изменений

Добавьте файлы и выполните 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

Коммит в SVN

Рекомендации по безопасности и обслуживанию

  • Права доступа: держите владельца репозиториев — 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 по необходимости.

Резервное копирование и восстановление — быстрый план

  1. Регулярно делать svnadmin dump (ежедневно/еженедельно в зависимости от активности).
  2. Хранить дампы на удалённом хранилище (S3, NFS, другой сервер).
  3. Тестировать восстановление: svnadmin load в тестовой среде.

Три типичных проблемы и способы их решения

  • SSL сертификат не принят в браузере: проверьте цепочку сертификатов (fullchain.pem) и корректность даты/времени сервера.
  • Ошибка 403 при доступе: проверьте владельца/права каталогов репозитория и настройки Require в конфигурации Apache.
  • Проблемы с аутентификацией htpasswd: убедитесь, что путь к файлу AuthUserFile совпадает в конфиге и что файл читается процессом Apache.

Альтернативные подходы

  • Вместо Apache можно использовать svnserve (протокол svn://) — проще, но без встроенного HTTPS и аутентификации через HTTP.
  • Хранить репозитории в сети (NFS) — потенциально опасно: предпочтительнее локальное хранилище и резервирование дампами.
  • Для распределённой модели разработки используйте Git; для миграции можно применять git-svn.

Критерии приёмки

  1. Доступ по HTTPS к https://ваш-домен/repo/ отвечает и запрашивает логин.
  2. Пользователь может импортировать проект и выполнить checkout.
  3. Логи Apache не содержат критических ошибок при базовых операциях.
  4. Существуют регулярные бэкапы и план восстановления.

Роль — чек-листы

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

  • Настроить 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 и базовой авторизацией. Для надёжной эксплуатации добавьте регулярные резервные копии, мониторинг логов и автоматическое продление сертификатов.

Примечание: замените в примерах домен, электронную почту и имена пользователей на ваши значения перед выполнением команд.

Полезные ссылки

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