В предыдущей статье я писал о том, как поднял SVN (Subversion) сервер, насколько удобнее стала разработка веб-проектов! Но запарило, если честно, несколько моментов. Сейчас я их решил, поэтому хочу поделиться инфой, может кому-то понадобится:
Проблемы, которые меня компостили раньше:
- Непонятно, как заливать изменения в каталог данных веб-сервера;
- Приходилось при каждом коммите-апдейте забивать свой пароль SSH;
- Приходилось вручную апдейтить каталог данных веб-сервера (п.1);
Итак, как же я поборол эти проблемы:
Как ни странно, заливать изменения в каталог веб-сервера оказалось несложно, при помощи update. Создал скрипт с одной командой:
svn update /var/svn/repository_name /var/www/path
и сделал его исполняемым:
# chmod u+x svn_up.sh
Чтож, неплохо. Только вот спрашивает пароль. Не могу понять почему, вроде локальный репозиторий. Да и владелец файлов root. Дополнил скрипт командой
chown -R www-data:www-data /var/www/path
Теперь по части пароля. Обратимся к предыдущей статье и сгенерим пары ключей (с локального хоста на Windows при помощи утилиты puttygen.exe, и локально на сервере (как сделать аутентификацию по ключу ssh). Добавим эти ключи в файл authorized_keys своего пользователя ssh на сервере.
Теперь нам нужно заливать коммиты с хоста Windows (клиент TurtoiseSVN) и не получать надоедливое окно запроса пароля – для этого нужно слегка модифицировать опции:
Выбираем в качестве SSH-клиента исполняемый файл TurtoisePlink.exe (из каталога {TurtoiseSVN\bin}), указываем ему опции -l имя пользователя, и -i – приватный ключ, сгенереный в puttygen.exe (у меня он хранится на защищённом диске)
Теперь при коннекте мы будем авторизовываться по ключу и пароль не будет запрашиваться! Отлично!
Осталась последняя проблема. После коммита файлы заливаются в репозиторий, но не в каталог веб-сервера. Их оттуда нужно забрать update-ом. Можно повесить в крон это, но чтобы не дёргать планировщик каждую минуту, я решил поковырять SVN и нашёл классную вещь – hooks! Хуки – это что-то вроде прерываний. Они находятся в каталоге /var/svn/repo_name/hooks – по сути это есть обычные скрипты, которые выполняются в разный момент.
Возьмём файл post-commit.tmpl и переименуем его в просто post-commit (выполняться после коммита). Поменяем содержимое файла на наше содержимое, которым мы апдейтили вручную.
Теперь при каждом коммите будет вызываться этот скрипт, который заливает из репозитория изменённую версию файлов в каталог веб-сервера, меняет права доступа! Всё классно.
Comments: