четверг, 16 июня 2011 г.

svn over ssh: безопасный репозиторий для своих проектов в облаке

Редко кто из программистов не работает дома. И мало у кого не возникало проблемы синхронизации исходников между домашней и рабочей машиной. Есть масса решений от самых простых и неудобных (носим всё на флешке), до сложных или параноидальных (шифрованный контейнер в DropBox-е). Хочу описать ещё один вариант, который лично мне пока нравится больше всего.

Во-первых, однозначно нужна система контроля версий. Те кто хоть раз терял исходники со мной согласятся. А если над проектом работают и другие люди, сомнения в необходимости использования svn или т.п. вообще отпадают. Я лучше знаком с subversion, поэтому его и поставим. 

Во-вторых: куда ставить? Нужен как минимум VDS чтобы иметь root-доступ на удалённую машину для установки нужных нам приложений. Я выбрал firstvds.ru. В основном потому что минимальная конфигурация сервера (более чем достаточная для наших целей и парочки "домашних страничек" в придачу) там стоит около $5 в месяц. Можно поставить образ debian, senos, fedora, ubuntu c вполне достаточным набором софта или без него, по желанию. Я выбрал debian, поэтому остальные инструкции считаем применительно к нему. 

А инструкций, собственно, совсем немного:
1. Ставим svn
apt-get install subversion
2. Добавляем группу и пользователя
groupadd svn
3. Добавляем пользователя 
useradd -g svn -d /home/svn -m svn
4. Из-под нового пользователя создаём репозиторий
su svn
cd ~
mkdir repos
svnadmin create /home/svn/repos/
5. Чтобы закрыть доступ для всех кроме авторизованного пользователя и задать ему (т.е. себе) пароль, в файле /home/svn/repos/conf/svnserve.conf добавляем строки:
anon-access = none
auth-access = write
password-db = passwd 
и в файле passwd в том же каталоге добавляем строку вида
username = password
6. Запускаем сервер
/usr/bin/svnserve -d --listen-port 3232 -r /home/svn/repos/

И последнее: как получить доступ к нашей новой игрушке. Как указано выше, svnserve слушает у нас порт 3232. Поэтому самый простой способ получить доступ к репозиторию: svn://<хост или ip вашего сервера>:3232 Отсюда делаем checkout в локальный каталог на домашней машине (он, естественно, пока будет пустым), складываем в локальный каталог наши проекты и делаем commit (рекурсивно). Потом делаем checkout на рабочей машине с этого же адреса и получаем всё что положили. Дальше работаем как обычно. 
Но так работать не стоит, если не хотите, чтобы ваши исходники получил кто-то "третий". Протокол svn не защищен шифрованием. Есть несколько методов решения этой проблемы, но все они связаны с использованием дополнительного софта. Мы же поступим проще.
Порт 3232 на удалённой машине свяжем с портом (например) 2323 на локальной машине с помощью ssh-туннеля:
ssh -2 -N -f -L 2323:localhost:3232 root@<хост или ip вашего сервера>
Теперь url репозитория с которым можно безопасно работать:
svn://localhost:3232
Скорость работы в таком случае будет ниже, но можно не опасаться перехвата трафика.

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

Отправить комментарий