Введение
В данном HOWTO я подробно опишу как установить и настроить SVN (subversion) сервер под ОС Windows.
Статья о настройке прав доступа SVN-сервера доступна здесь.
Внимание! CollabNet прекратили поддержку описанного в данной статье Subversion Server and Client и предлагают вместо него другой проект — Subversion Edge, который в несколько раз хуже и часто работает нестабильно. Если Вам нужен только svnserve (без Apache), перейдите на использование простого и быстрого SlikSVN (во время установки установите все компоненты и особенно svnserve). Установка и настройка данного проекта описана в другой статье нашего сайта.
Шаг 1. Установка сервера.
Итак, для начала нам будет нужен сам дистрибутив с svn-сервером, который можно бесплатно скачать с официального сайта CollabNet (перед тем как что-то скачать, Вы должны пройти бесплатную регистрацию на этом сайте (зачем так сделано не очень понятно)). Вы должны скачать CollabNet Subversion Server and Client v1.6.9 (for Windows) (версия 1.6.9 — последняя на момент написания данного HOWTO).
После скачивания файла CollabNetSubversion-server-1.6.9-1.win32.exe (18,44 МБ), запускайте его и следуйте указаниям мастера. Мастер выполнит несколько шагов. Рассмотрим все шаги мастера по порядку:
- Приветствие мастера. Сразу жмите «Next«.
- Предложение прочитать онлайновый ReadMe. Жмите «Next«.
- Выберите компоненты, которые нужно установить: svnserve (собственно svn-сервер (устанавливать обязательно)) и Apache (устанавливайте только если хотите разрешить доступ к своим репозиториям из Интернета через обычные браузеры). Выбрав нужные компоненты, переходите к следующему шагу.
- На этом шаге предлагается выбрать порт для svn-сервера (настоятельно рекомендуется использовать стандартный 3690) и указать путь, где будут храниться репозитории (рекомендуется стандартное значение c:\svn_repository). Флажок в строке «Install svnserve to run as Windows service» позволит автоматически запускаться svn-серверу при запуске Windows (рекомендуется не снимать отсюда флажок). Внимание! Этого шага не будет, если на шаге 3 Вы не выбрали компонент svnserve.
- Теперь предлагается настроить Apache если Вы его выбрали на третьем шаге мастера установки.
- Host/Server name — имя сервера. Рекомендуется оставить localhost.
- Host Port — порт, на котором будет находиться Apache. Рекомендуется либо стандартный 80, либо 8080.
- Install Apache to run as Windows service — позволяет Apache запускаться вместе с Windows.
- Repository Path — путь к svn-репозиторию. Укажите то же значение, что Вы указывали на шаге 4. Рекомендуется стандартное значение C:\svn_repository.
- Repository Location Prefix — префикс, по которому будет доступен svn-репозиторий. Пример: http://localhost:80/svn/. Если Вы будете использовать установленный Apache только для репозиториев svn, установите в этом поле лишь слэш «/«, в противном случае оставьте стандартное значение /svn.
- Выберите каталог для установки набора серверов и нажмите «Install«.
- На этом шаге предлагается включить уведомления о новых версиях программы. Рекомендуется снять все флажки.
- Нажмите «Finish«. Установка завершена.
Шаг 2. Установка клиента.
В качестве SVN-клиента мы будем использовать TortoiseSVN, подробнее о котором можно почитать в HOWTO.
Скачать программу можно на её официальном сайте программы на странице Downloads: http://tortoisesvn.net/downloads. Там же можно скачать пакет локализации, содержащий помимо перевода интерфейса программы, ещё и словарь проверки орфографии (применяется при коммите изменений).
Установка программы стандартна и не должна вызвать никаких сложностей.
Шаг 3. Настройка svnserve.
Настройку начнём с того, что создадим новый репозиторий со стандартными настройками, которые и будем редактировать. Для этого зайдём в Проводнике Windows в каталог, указанный в качестве «Repository path» во время установки сервера (стандартное значение — С:\svn_repository\), нажмём правой кнопкой по пустому месту в нём и выберем «TortoiseSVN» — «Create repository here«. Через несколько мгновений внутри каталога появятся файлы и подкаталоги, а также будет выведено сообщение об успешном создании репозитория. В дальнейшем путь к репозиторию я буду заменять на ПУТЬ_К_РЕПОЗИТАРИЮ.
Теперь мы должны создать пользователей, которые будут работать с репозиторием. Для этого мы должны открыть файл «ПУТЬ_К_РЕПОЗИТАРИЮ\conf\svnserve.conf» в любом текстовом редакторе, например Блокноте Windows или Notepad++. Здесь Вы должны раскомментировать (убрать перед строкой символ(ы) «#«) следующие строки:
anon-access = none auth-access = write
Строка «anon-access = none» означает, что анонимы не смогут получить доступ к репозиторию вообще (сделано из соображений безопасности), а «auth-access = write» означает, что авторизованные пользователи получат полный доступ в пределах их ограничений, заданных в файле authz (если такая функция включена). Если Вы хотите, чтобы анонимы могли получить доступ только для чтения (например, разрабатываете OpenSource-проект), то установите «anon-access = read«.
Теперь Вы должны раскомментировать строку:
password-db = passwd
Эта строка указывает в каком файле будут находиться логины и пароли пользователей для авторизации на svn-сервере. Теперь откройте файл «ПУТЬ_К_РЕПОЗИТАРИЮ\conf\passwd» в любом текстовом редакторе и впишите в нём «логин_пользователя = пароль_пользователя» (разделителем служит знак равенства). Пример правильного файла passwd:
### This file is an example password file for svnserve. ### Its format is similar to that of svnserve.conf. As shown in the ### example below it contains one section labelled [users]. ### The name and password for each user follow, one account per line. [users] # harry = harryssecret # sally = sallyssecret vova = kjkj345K anton = Gh74oJId dima = ir9895498 katya = o894584578 sergey = 985kdfjdfk
Убираем символ комментария из строки:
realm = My First Repository
В ней указывается имя Вашего репозитория. После знака равенства вместо My First Repository Вы можете указать любое другое имя. Оно выводится при запросе логина и пароля.
Настройка сервера с простой (simple) авторизацией завершена. Пример правильного файла конфигурации сервера:
### This file controls the configuration of the svnserve daemon, if you ### use it to allow access to this repository. (If you only allow ### access through http: and/or file: URLs, then this file is ### irrelevant.) ### Visit http://subversion.tigris.org/ for more information. [general] ### These options control access to the repository for unauthenticated ### and authenticated users. Valid values are "write", "read", ### and "none". The sample settings below are the defaults. anon-access = none auth-access = write ### The password-db option controls the location of the password ### database file. Unless you specify a path starting with a /, ### the file's location is relative to the directory containing ### this configuration file. ### If SASL is enabled (see below), this file will NOT be used. ### Uncomment the line below to use the default password file. password-db = passwd ### The authz-db option controls the location of the authorization ### rules for path-based access control. Unless you specify a path ### starting with a /, the file's location is relative to the the ### directory containing this file. If you don't specify an ### authz-db, no path-based access control is done. ### Uncomment the line below to use the default authorization file. #authz-db = authz ### This option specifies the authentication realm of the repository. ### If two repositories have the same authentication realm, they should ### have the same password database, and vice versa. The default realm ### is repository's uuid. realm = Test Repository [sasl] ### This option specifies whether you want to use the Cyrus SASL ### library for authentication. Default is false. ### This section will be ignored if svnserve is not built with Cyrus ### SASL support; to check, run 'svnserve --version' and look for a line ### reading 'Cyrus SASL authentication is available.' # use-sasl = true ### These options specify the desired strength of the security layer ### that you want SASL to provide. 0 means no encryption, 1 means ### integrity-checking only, values larger than 1 are correlated ### to the effective key length for encryption (e.g. 128 means 128-bit ### encryption). The values below are the defaults. # min-encryption = 0 # max-encryption = 256
Теперь пора проверить созданный нами svn-сервер, но сначала мы должны перезапустить его чтобы он смог считать изменённые конфигурационные файлы. Для этого набираем «Windows+R» — «cmd.exe«. В открывшейся командной строке пишем слелующие команды (по порядку):
net stop CSVNsvnserve net start CSVNsvnserve
Открываем TortoiseSVN Repository Browser из контекстного меню любой папки и в качестве URL вводим: svn://127.0.0.1/. Сервер запросит указать логин и пароль, заданные в файле passwd и при успешной авторизации отобразит корневой каталог. Сервер успешно настроен и готов к управлению проектами.
Шаг 4. Настройка Apache.
Если Вы хотите, чтобы к Вашему репозиторию был доступ не только с помощью svn-клиентов, но и с помощью любого веб-браузера, то должны сделать ряд настроек.
Откройте в любом текстовом редакторе файл «%PROGRAMFILES%\CollabNet\Subversion Server\httpd\conf\httpd.conf«, где «%PROGRAMFILES%\CollabNet\Subversion Server\» — это путь установки svn-серверов. В конце файла httpd.conf найдите следующие строки:
DAV svn SVNParentPath C:\svn_repository
и замените на такие:
DAV svn SVNPath C:\svn_repository AuthType Basic AuthName "Subversion repository" AuthUserFile C:\svn_repository\conf\appswd Require valid-user
Здесь с:\svn_repository — путь к репозиторию svn. Измените в соответствии с Вашими настройками.
Теперь нужно создать файл паролей Apache. Для этого откройте командную строку Windows («Win+R» — «cmd.exe«) и выполните следующие команды:
cd "%PROGRAMFILES%\CollabNet\Subversion Server\httpd\bin" htpasswd -cmb C:\svn_repository\conf\appswd ЛОГИН_ПОЛЬЗОВАТЕЛЯ_1 ПАРОЛЬ htpasswd -mb C:\svn_repository\conf\appswd ЛОГИН_ПОЛЬЗОВАТЕЛЯ_2 ПАРОЛЬ ... htpasswd -mb C:\svn_repository\conf\appswd ЛОГИН_ПОЛЬЗОВАТЕЛЯ_N ПАРОЛЬ
Внимание! Параметр -cm нужно указывать только при первом создании пользователя, т.к. он перезаписывает имеющийся файл. В пути к файлу паролей буква диска обязательно должна быть в верхнем регистре.
В качестве ЛОГИН_ПОЛЬЗОВАТЕЛЯ нужно указать все логины пользователей, указанные в файле passwd. Пароли также должны быть идентичны.
Настройка SVN over Apache 2 была успешно завершена. Теперь нужно перезапустить сервер командами консоли Windows:
net stop CollabNetSubversionApache net start CollabNetSubversionApache
Протестировать сервер можно так: http://127.0.0.1:ПОРТ/ в любом веб-браузере. Будет запрошен логин и пароль для доступа к репозиторию.
@Алекс88
Штатно такой функции нет, но можно в файрволе создать разрешающие правила для входящих соединений на порт 3690 только для определённых IP-адресов, а все остальные подключения блокировать. На Linux используйте iptables.
Спасибо. Возник ещё один вопрос теперь уже с модулем для apache, в место Require valid-user установил Require user admin, но почему-то все остальные пользователи проекта тоже могут подключиться к нему не смотря на то что авторизация разрешена только для admin. Подскажите как разрешить авторизацию только для одного пользователя проектом а остальным запретить? А вообще хотелось бы сделать так, чтобы с одного ip заходили все пользователи, а с разных ip заходил только admin? Вот как я попытался это сделать но не получилось:
DAV svn
SVNParentPath /var/www/svn/
AuthType Basic
AuthzSVNAccessFile /etc/httpd/svn-acl.conf
AuthName «Authorization»
AuthUserFile /etc/httpd/svn-users.conf
Require user admin
Satisfy any
Order Allow,Deny
Allow from xxx.xxx.xxx.xxx
Поздравляю, вы изобрели новую директиву! В статье же написано как прописывать пользователей и задавать им пароли. Использовать нужно только require valid-user, что означает, что войти может только успешно авторизовавшийся пользователь.
Сами пользователи прописываются в файле, указанном в директиве AuthUserFile. Пример есть в статье:
@Vitaly
require valid-user вообще можно не указывать, всё-ровно будет работать. У меня вопрос в другом. Есть сотрудники, которым положено пользоваться svn только из офисного Ip, а с других ip доступ должен быть закрыт, также есть сотрудники для которых доступ к svn должен быть как из офисного ip, так и с любого другого ip. Такое возможно реализовать, если да то подскажите как?
Будет пускать любого без авторизации.
Скорее всего, нет по крайней мере штатными средствами без написания собственных модулей для Apache. Можно лишь создать список IP-адресов, которым будет разрешён доступ, а всем остальным закрыть.
Пример:
Это разрешит доступ из подсети 192.168.1.0/24, а также для локального хоста.
@Vitaly
Спасибо за помощь, в общем решил свою проблему так:
Для офисных сотрудников настроил доступ к репозиторию по протоколу svn://, в брандмауэре iptables настроил разрешающее правило на порт 3690 для офисного ip, по остальным ip доступ запрещён.
Для привилегированных сотрудников доступ к репозиторию настроен через apache http://.
Таким образом удалось добиться нужного результата. Надеюсь кому-нибудь это тоже будет полезно)
@Алекс88
Главное следите, чтобы оба сервиса (svnserve и apache) были запущены от одного пользователя в системе, либо принадлежали одной группе (например svnusers), иначе возникнут серьёзные проблемы и конфликты доступа.
Настроил всё, как написано, однако после запуска apache не могу получить доступ к репозиторию через браузер в соответствии с этой инструкцией:
При подключении к порту 127.0.0.1:8080 требует логин и пароль, после ввода и того и другого снова требует пароль. И так до бесконечности.
То, что сейчас выложено на сайте CollabNet, не имеет никакого отношения к описанному в статье, т.к. они давно прекратили поддержку того продукта.