Власний Subversion сервер

Поширте інформацію:

Я за останній рік звик користуватися subversion для контролю змін, внесених у код. Система дозволяє синхронізувати зміни, зроблені на різних комп’ютерах, переглядати і "відкотити" їх в разі потреби.
Я розмістив свій репозиторій безкоштовно на сервері RioUxSvn.com. Бувало, що він не працював день-два (на сайті висіло повідомлення про обслуговування), але повертався.
Зараз цей сервер також не працює, спочатку на сайті було повідомлення, що він повернеться в середині 2013 р. :), але тепер сайт взагалі недоступний.
Отож, я вирішив зробити Subversion-сервер на орендованому мною VPS під CentOS 5.
Оскільки я вже налаштував на ньому резервне копіювання, то це буде надійніше, ніж безкоштовний чужий.
Налаштувати Subversion-сервер не складно і займає небагато часу.

Як транспорт для subversion можна використовувати, наприклад, Apache з модулем WebDAV, що дозволяє працювати з репозиторієм багатьом користувачам і використовувати протокол HTTPS, інструкція є тут.
Але я буду використовувати вбудований в subversion сервер svnserve і протокол SVN.
Недоліками цього методу є відсутність журналів (навіть повідомлення про помилки не протоколюються) і нестабільна робота, коли багато користувачів.
Але на моєму сервері користувачем буду тільки я сам улюблений, а без журналів якось проживу :)
Зате метод має такі переваги, як

  • простота налаштування
  • швидше завантаження і відвантаження даних
  • економія ресурсів сервера в порівнянні з важким apache

Крім того, SVN – не шифрований протокол, але я налаштую вогнемур iptables таким чином, щоб доступ до subversion можна було отримати тільки з моєї мережі vpn, тому це не є проблемою.

Отже, встановлюємо:

# yum install subversion

Створюємо репозиторій

# svnadmin create /home/svnrepo

Редагуємо налаштування

# vi /home/svnrepo/conf/svnserve.conf

вписавши

anon-access = none
auth-access = write
password-db = passwd

Створюємо файл з налаштуваннями доступу

# vi /home/svnrepo/conf/passwd

у форматі

[users]
theuser = thepassword

Запускаємо svnserve

# service svnserve start
# chkconfig svnserve on

В документації пише, що можна ще запускати svnserve "за викликом" з inetd (xinetd), але в мене не вийшло. Ретельно розбиратися не став.

Відкриваємо порт 3690 у вогнемурі

# iptables -A INPUT -p tcp -s 10.8.0.0/24 --dport 3690 -j ACCEPT
# iptables -A INPUT -p udp -s 10.8.0.0/24 --dport 3690 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables

Все! Тепер на клієнті можна підключати наш репозиторій, вказується повний шлях до репозиторію на сервері.

$ svn checkout --username theuser --password thepassword svn://10.8.0.1/home/svnrepo
$ cd svnrepo
$ svn mkdir sites
$ svn commit -m 'Directory created'

Треба ще тільки задати редактор для svn, а то без цього він свариться при комміті, якщо не вказувати ключ -m, та в інших випадках.
Для цього в ~/.bashrc дописуємо

export SVN_EDITOR=nano

В документації пише, що можна робочу копію на клієнті перемістити на новий сервер (робоча копія в директорії sites):

svn switch --relocate --username theuser --password thepassword sites svn://10.8.0.1/home/svnrepo/sites

Але мені видало помилку, що перемістити неможливо, тож довелося скопіювати файли вручну, попередньо видаливши інформацію про старий svn-сервер:

$ mv sites old_sites
$ svn co svn://10.8.0.1/home/svnrepo/sites
$ find old_sites -type d -name '.svn' -exec rm -rf {} \;
$ cp -R old_sites/* sites/
$ cd sites
$ svn add *
$ svn ci -m 'Sites added'

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.