Как организовать деплой с Bitbacket

(Взято из комментария на хабре Q&A по причине удаления этого вопроса с ответами. Автор ответа Андрей Хохлов @andrhohlov )

VPS с Ubuntu, на нем установлен соответственно git и созданы 2 папки под сайты
test.example.com (тестовая версия сайта)
и example.com (боевая версия)

Создать на сервере директорию для репозиториев, например:

Далее я дал права на папку с сайтами и репозиториями пользователю www-data (собственно с правами и была основная морока при реализации)

И все делал от имени этого пользователя (под ним работает apache или nginx).

Сгенерировал ему ключи

Создал конфиг файл

и добавил в него

Сгенерированый ключ нужно добавить в битбакет (Settings -> Deployment keys).

Если далее будет проблема с ключами, проверить права доступа к ним, если что выставить:

Далее, клонируем репозиторий от имени пользователя www-data с ключем —mirror. Это в общем пустой репозиторий, без файлов. В гайде описывалось почему именно —mirror.

Копируем непосредственно файлы репозитория

Обратите внимание на путь GIT_WORK_TREE. Суть в том, что у нас файлы сайта будут храниться отдельно от папки .git.

В примере выше я копирую ветку master.

Далее, создаем скрипт деплоя

Рекомендуется обозвать папку и сам файл deploy.php каким-нибудь неадекватным набором символов вроде deploy-fseuo77w7rwegfe.php.

Собственно сам скрипт deploy.php, рассчитанный на 2 ветки, master (можно переименовать её в dev например и production.

Остается только добавить post hook с ссылкой на deploy.php (Settings -> Hooks).

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