Я за останній рік звик користуватися 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'