Настройка SVN-сервера на хостинговом сервере под управлением Debian

()

При разработке программного обеспечения командой программистов для синхронизации вносимых в проект изменений удобно использовать какое-либо централизованное хранилище с возможностью управления версиями.

Одной из самых популярных систем управления версиями является Subversion, также известная как SVN, обладающая широким функционалом и очень простая в использовании. Далее будет показано, как настроить SVN-хранилище на сервере под управлением Debian.

Подробнее начальные условия:

  • хостинговый сервер под управлением Debian Lenny (на нём работает веб-сервер apache2 с поддержкой php5);
  • организация, разрабатывающая проекты project1 и project2;
  • разработчики user1 и user2, работающие над проектом project1, user3 и user4 работающие над проектом project2;
  • исходный код проектов открыт и получить его может любой желающий, но вносить изменения могут только их разработчики.

Собственно задача:

  1. Добавить на хостинговый сервер вирутальный хост «svn.mega-soft.dom».
  2. Настроить этот виртуальный хост для работы в качестве SVN-репозитория.
  3. Раздать пользователям права на проекты в соответствии с тем, кто над каким проектом работает.

Приступаем к решению задачи. Для начала установим необходимые пакеты:

apt-get install subversion-tools libapache2-svn

Создадим директорию, где мы будем хранить наши репозитории:

mkdir -p /var/lib/svn

Создадим репозитории:

svnadmin create /var/lib/svn/project1
svnadmin create /var/lib/svn/project2

Поскольку веб-сервер в Debian и производных от него дистрибутивах работает с правами пользователя www-data, и этот пользователь должен иметь возможность писать в директории с репозиториями, сменим владельца директории с репозиториями на пользователя www-data:

chown -vR www-data:www-data /var/lib/svn

Создадим (пока) пустые файлы паролей для наших репозиториев:

touch /var/lib/svn/{project1,project2}.htpasswd

Создадим директорию, которая будет корнем нового виртуального хоста (репозитории должны быть за пределами этой директории!):

mkdir -p /var/www/svn.mega-soft.dom

Теперь создадим файл «/etc/apache2/sites-available/svn.mega-soft.dom», описывающий наш виртуальный хост:

<VirtualHost *:80>
	# e-mail администратора:
	ServerAdmin webmaster@ylsoftware.com 
	# Имя виртуального хоста:
	ServerName svn.mega-soft.dom 
	# Дополнительное имя виртуального хоста:
	ServerAlias www.svn.mega-soft.dom 
	
	# Кодировка виртуального хоста: 
	AddDefaultCharset utf-8 
	
	# Корневая директория виртуального хоста:
	DocumentRoot /var/www/svn.mega-soft.dom 
	
	# Разрешения на корневую директорию сервера:
	<Directory />
		Options FollowSymLinks 
		AllowOverride All 
	</Directory> 
	
	# Опции корневой директории виртуального хоста:
	<Directory /var/www/svn.mega-soft.dom>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny 
		allow from all 
	</Directory>
	
	# Настройки репозитория для project1:
	<Location /project1>
		# Включаем для этой директории модуль svn:
		DAV svn 
		# Указываем путь к репозиторию:
		SVNPath /var/lib/svn/project1 
		# Используем базовую авторизацию:
		AuthType Basic 
		# Заголовок запроса данных для авторизации:
		AuthName "Subversion Repository"
		# Файл с паролем:
		AuthUserFile /var/lib/svn/project1.htpasswd 
		# Для определённых методов доступа требуем авторизацию:
		<LimitExcept GET PROPFIND OPTIONS REPORT>
			Require valid-user 
		</LimitExcept>
	</Location>

	# Настройки репозитория для project2:
	<Location /project2>
		# Включаем для этой директории модуль svn:
		DAV svn 
		# Указываем путь к репозиторию:
		SVNPath /var/lib/svn/project2
		# Используем базовую авторизацию:
		AuthType Basic 
		# Заголовок запроса данных для авторизации:
		AuthName "Subversion Repository"
		# Файл с паролем:
		AuthUserFile /var/lib/svn/project2.htpasswd 
		# Для определённых методов доступа требуем авторизацию:
		<LimitExcept GET PROPFIND OPTIONS REPORT>
			Require valid-user 
		</LimitExcept>
	</Location>
	
	# Файлы логов:
	ErrorLog /var/log/apache2/error-svn.mega-soft.dom.log 
	LogLevel warn 
	CustomLog /var/log/apache2/access-svn.mega-soft.dom.log combined 

</VirtualHost>

Далее нам нужно разрешить использование этого виртуального хоста веб-сервером и перезапустить его:

a2ensite svn.mega-soft.dom && invoke-rc.d apache2 reload

Добавим пользователей в файлы паролей с помощью утилиты htpasswd:

htpasswd /var/lib/svn/project1.htpasswd user1
htpasswd /var/lib/svn/project1.htpasswd user2
htpasswd /var/lib/svn/project2.htpasswd user3
htpasswd /var/lib/svn/project2.htpasswd user4

При открытии страницы «http://svn.mega-soft.dom/» вы не увидите ничего, однако, при обращении к «http://svn.mega-soft.dom/project1» и «http://svn.mega-soft.dom/project2» вы сможете увидеть файлы и папки, находящиеся в репозиториях проектов proeject1 и project2 соответственно.

Всё! Теперь любой желающий может получить копии проектов используя команды:

svn checkout http://svn.mega-soft.dom/project1 /path/to/projects/project1
svn checkout http://svn.mega-soft.dom/project2 /path/to/projects/project2

Разработчики проекта могут заливать изменения используя примерно такую команду:

svn commit /path/to/projects/project1 --username user1

На этом всё. Успехов в работе над проектами!

P.S. Отдельное спасибо Фроловой Марии за корректировку статьи.

Ключевые слова: debian, svn, subversion, apache2, репозиторий.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2009-09-23 16:32:05 (#)

Спасибо, очень доходчиво и полезно.
До этого хранил только локальные репозитории в file:// а теперь попробую и такой вариант.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности