Простая система деплоя на основе хуков gitolite для PHP

push to deployДля создания простейшего механизма автодеплоя или «push to deploy», воспользуемся системой хуков gitolite репозиториев. Хуки представляют собой файлы лежащие внутри репозитория в папке hooks и реагирующие на определенные события связанные с репозиторием. В нашем случае нам нужен хук post-receive. Как можно догадаться из названия, он срабатывает сразу после обработки нового коммита в репозитории. Материал по установке самой системы gitolite мы рассматривали в прошлый раз.

Для создания хука подключимся по SSH к машине с репозиторием и перейдем в папку с хуками

cd /home/git/repositories/newproject.git/hooks

Создадим там файл самого хука

touch /home/git/repositories/newproject.git/hooks/post-receive

И сделаем его исполняемым

chmod u+x post-receive

Теперь добавим код обновления рабочей копии в созданный хук

#!/bin/bash
#CONFIG
LIVE="/home/www/our_site/"

read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then  
    echo "===== DEPLOYING TO LIVE SITE ====="  
    cd $LIVE
    git pull origin master
    echo "===== DONE ====="
fi

 Для сброса всех изменений которые могли оказаться в рабочей копии перед коммитом можем добавить команду

git reset --hard

Так же если при разработке проекта используется composer, то можно обновлять и его зависимости

composer update

Таким образом хук может выглядеть следующим образом

#!/bin/bash
#CONFIG
LIVE="/home/www/our_site/"

read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then  
    echo "===== DEPLOYING TO LIVE SITE ====="  
    cd $LIVE
    umask 002
    git reset --hard
    git pull origin master
    composer update
    echo "===== DONE ====="
fi

umask ставится в зависимости от пользователя под которым запущен сервер, если это тот же пользователь от которого делается pull, то маска должна быть 022. Если  в одной группе — 002 и если это никак не связанные пользователи — 000

Теперь после каждого коммита в ветку master репозитория будет исполняться наш хук и соответственно будет обновляться и рабочая копия нашего сайта.

Важное замечание по безопасности при работе с git

Всегда закрывайте папку .git в корне вашего сайта от посторонних глаз. В большинстве современных систем папка работы веб-сервера не настроена на корневую папку сайта (обычно это или web или public_html в корневой папке сайта), но иногда получается так, что папка .git оказывается доступна снаружи — http://bigmistake.ru/.git/

Проще всего запретить к ней доступ правами:

chmod -R og-rx /home/www/bigmistake/.git

Так же в папку .git можно положить файл .htaccess содержащий текст: Deny from all

 Для полной блокировки папки на всем сервере добавим следующие строки в конфиг сервера

<Files ".git">
Order Deny,Allow
Deny from all
</Files>

 Если статья была Вам полезна, то буду благодарен за клик по рекламе.

Запись опубликована в рубрике FreeBSD, Администрирование, Веб разработка с метками , , , , , , , . Добавьте в закладки постоянную ссылку.

1 комментарий: Простая система деплоя на основе хуков gitolite для PHP

  1. Дмитрий говорит:

    Я оказывается делаю также
    По поводу закрытия каталога .git я бы рекомендовал заблочить этот каталог и файл .gitignore на уровне конфига вебсервера для всех виртуал хостов. Иначе где то да обязательно забудешь это закрыть)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*