Многих хабрачитателей иногда волнует вопрос хостинга SVN. В интернете полно вариантов захостить SVN репозиторий, с ценой порядка 10-15уе в месяц, но смущает одно: хостинг репозитория — намного более ответственное дело, нежели хостинг сайта. В коде — ваши «сверхценные идеи», от аптайма сервера и надежности бэкапов напрямую зависит работа вашего бизнеса. Некоторые выбирают все же хостить SVN в серьёзных компаниях. Хорошее сравнение по параметрам тут: http://www.svnhostingcomparison.com/, open-source кстати можно захостить в неплохом месте на букву G ;-).
Другие же, как и я, решают хостить SVN на своём VDS / Dedicated сервере. На этом вопросе я и остановлюсь, рассказав заодно немного о вариантах запуска/настройки svn сервера (в том числе относительно новых — шифрование/аутентификация SASL и хранение в FS). Выльеться все это вам в 3-4$/месяц, в полный контроль за бэкапами и доступом к серверу. Пожертвовать придется 30 минут драгоценного времени на настройку.
Целевая аудитория: начальный — средний уровень опыта работы с Linux.
PS. Я в курсе что FreeBSD is not Linux ;-)
По серверу:
По шифрованию:
По аутентификации:
По хранению данных:
Для своего сервера я выбрал вариант
Загрузка сервера выглядит примерно так:

Есть смысл либо заказать услугу «Ежедневные бэкапы» либо самому по крону делать и заливать бэкап репозитория на ваш другой хостинг или к вам на компьютер.
Надеюсь, мои потраченные 8 часов на разбивание лба обо все незаметные камушки на этом пути помогут хабралюдям получить ценный опыт администрирования SVN сервера :-). Удачных вам бэкапов и коммитов без конфликтов:-)
PS. Есть замечания, ошибки? — буду рад услышать :-)
Другие же, как и я, решают хостить SVN на своём VDS / Dedicated сервере. На этом вопросе я и остановлюсь, рассказав заодно немного о вариантах запуска/настройки svn сервера (в том числе относительно новых — шифрование/аутентификация SASL и хранение в FS). Выльеться все это вам в 3-4$/месяц, в полный контроль за бэкапами и доступом к серверу. Пожертвовать придется 30 минут драгоценного времени на настройку.
Целевая аудитория: начальный — средний уровень опыта работы с Linux.
PS. Я в курсе что FreeBSD is not Linux ;-)
Варианты работы сервера SVN
По серверу:
- Apache+SVN. Пока самый популярный.
- svnserve. Самый быстрый, но нужен минимум VPS сервер.
По шифрованию:
- Без шифрования. Только в корпоративных сетях.
- SSL: Шифрование уже «по старинке» — только в связке с Apache.
- SASL: Новый способ, включенный в svnserve. Для работы нужен клиент версии 1.5.3 и выше. За последней фразой скрывается 4 часа отчаяния :-)
По аутентификации:
- Список пользователей с открытыми паролями в passwd(самый простой способ).
- Защищенная проверка через SASL: DIGEST-MD5(пароли в открытом виде не идут).
- Туннель svn+ssh: пользователи логиняться под своими Linux аккаунтами.
- Можно прикручивать любые другие способы, в том числе и обычную БД.
По хранению данных:
- Berkley DB — старый(проверенный временем) и надежный способ.
- FileSystem — новый, можно делать бэкапы «на лету»
Для своего сервера я выбрал вариант
- svnserve (за малый расход памяти и скорость)
- SASL (симетричное шифрование которое работает хоть как-то, от говно-сертификата(самоподписанного) SSL толку 0, да и люди склонны принимать любые сертификаты).
- Проверка паролей через SASL
- Хранение на FileSystem
- Хостится решено на firstvds.ru FreeBSD, 1 гигабайт места, легко расширяться, полный контроль за бэкапами и доступом, 64 метра памяти (забегая вперед, скажу что используется всего 6.5, c апачем так не получилось бы ;-) ). Это счастье стоит 4у.е(3 со скидкой 25% ;-)) в месяц). Бесловно, вы можете выбирать любой VDS тут.
Настраиваем систему
- Собираем/ставим svnserve. Нужно включить поддержку SASL, все остальное не нужно.
cd /usr/ports/devel/subversion
make install clean
- Создаем юзера svn, и под ним дальше все делаем. Вырубаем у него удаленный логин, ну или в крайнем случае ставим ну очень сложный пароль.
- Создаем репозиторий: svnadmin create ~/name
- Идем в ~/name/conf, и в svnserve.conf пишем
[general]
anon-access = none
auth-access = write
realm your_server_realm
[sasl]
use-sasl = true
min-encryption = 128
max-encryption = 256
Обращаем внимание на конец файла — включается шифрованная проверка пароля (min-encryption>0) и обязательное шифрование минимум 128 бит. Выше 128 мой клиент (пока) не держит :-) - Дальше добавляем юзеров в базу SASL:
saslpasswd2 -c -f sasldb -u your_server_realm new_user_name
Наблюдаем за создавшимся файликом sasldb.db и запоминаем к нему путь. - Дальше самое сложное, настройка SASL. Нужно узнать где лежат либы SASL. Например с помощью locate libsasldb
В случае firstvds с FreeBSD это /usr/local/lib/sasl2 - Создаем тут файл svn.conf такого вида:
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /your_path_to/sasldb
mech_list: DIGEST-MD5
Обращаю внимание что расширения .db тут не нужно писать. - Изменяем скрипт запуска:(/usr/local/etc/rc.d/svnserve)
svnserve_flags=${svnserve_flags:-"-T -d --listen-port=3690 --listen-host 0.0.0.0"}
--listen-host 0.0.0.0 нужен т.к. во FreeBsd svnserve начинает слушать по дефолту IP6 а не древний IP4 :-)
svnserve_data=${svnserve_data:-"/your_path_to_repository"}
-T — использовать threads. -d — запуск демоном.
Теперь делаем svnserve start и можно смотреть, заработало или нет :-)
Если svnserve уже запущен, запуск апача может вывалить варнинги, но все работает все равно :-) - Настраиваем скрипт на автозапуск в ISPManager:
Добавляем новый сервис
Name: SVN
Mode: Standalone
Process name: svnserve.bin
Start command: /usr/local/etc/rc.d/svnserve start
Stop command: /usr/local/etc/rc.d/svnserve start
System name: svn
Type: Unknown service
Autostart: Yes
Minotoring: No - Все остальные сервисы убираем из автозапуска(прибъете апач — ISPManager станет недоступным, запустить снова можно с консоли apachectl start или apache2ctl start).
Одновременно апач и svnserve не работают. - Перезапускаем VDS через VDSManager и если вы все сделали правильно — сможете начинать работать со своим собственным SVN сервером. При активной работе нагрузку практически не заметно, все очень быстро.
Загрузка сервера выглядит примерно так:

Бэкапы
Есть смысл либо заказать услугу «Ежедневные бэкапы» либо самому по крону делать и заливать бэкап репозитория на ваш другой хостинг или к вам на компьютер.
Заключение
Надеюсь, мои потраченные 8 часов на разбивание лба обо все незаметные камушки на этом пути помогут хабралюдям получить ценный опыт администрирования SVN сервера :-). Удачных вам бэкапов и коммитов без конфликтов:-)
PS. Есть замечания, ошибки? — буду рад услышать :-)