Pull to refresh

Создаем свой SVN сервер: 3$ и 30 минут

Reading time4 min
Views13K
Многих хабрачитателей иногда волнует вопрос хостинга 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 ;-)

Варианты работы сервера 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"}
    svnserve_data=${svnserve_data:-"/your_path_to_repository"}
    --listen-host 0.0.0.0 нужен т.к. во FreeBsd svnserve начинает слушать по дефолту IP6 а не древний IP4 :-)
    -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 сервером. При активной работе нагрузку практически не заметно, все очень быстро.


Загрузка сервера выглядит примерно так:
image

Бэкапы


Есть смысл либо заказать услугу «Ежедневные бэкапы» либо самому по крону делать и заливать бэкап репозитория на ваш другой хостинг или к вам на компьютер.

Заключение


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

PS. Есть замечания, ошибки? — буду рад услышать :-)
Tags:
Hubs:
+67
Comments78

Articles