Итак, шо це? на самом деле всё очень просто. Нам не нужно будет чо-то там ставить, устанавливать, заниматься сексом с документаций и т.д. и т.п. Всё. Очень. Просто.
Во-первых, у вас должен быть полный доступ к серверу через SSH используя который вы должны будете установить Git и прочие приблуды, например, Composer и Bower, а может быть еще что-то, для того, чтобы у нас всё автоматически собиралось после того, как мы "запушим" (push) на сервер код.
После того, как вы выполните всё указанные действия, вся работа по развёртыванию на сервере проекта будет сводится к команде:
git push server master
и всё. Вся работа. =)
Поехали!
Сейчас мы должны создать папку на сервере, где у нас будет только контроль версий. Сам код у нас будет в другом месте.
Место размещения папки зависит от прав доступа пользователя через который вы выполнили вход по SSH. Можно создать в /var или домашней директории. Лично я сделал в /var/repositories, т.е. помимо папки где у нас контроль версий, я еще создал папку где у нас всё это лежит и не мешается.
mkdir /var/repositories
cd /var/repositories
mkdir name.git
где name.git это название вашего проекта или сайта. В конце указан постфикс .git, на случай размещения других папок в директории /var/repositories, чтоб не путаться и сразу было очевидно что есть что.
Теперь мы должны инициализировать голый (bare) репозиторий для контроля версий.
cd name.git
git init --bare
В только что успешно инициализированом репозитории у нас появились папки. Нас интересует папка hooks, где лежат различные файлы, точнее болванки для файлов, который вызываются в зависимости от событий. Нас интересует только одно событие вызываемое после успешного "пушинга" (push) на удалённый репозиторий, т.е. наш сервер.
Создадим файл с одноименным событием
cd hooks
touch post-receive
откроем для редактирования
nano post-receive
и вставим в него скрипт, который будет обновлять файлы в рабочей директории из директории контроля версий принудительно (по умолчанию используется ветка master):
#!/bin/sh
git --work-tree=/var/www --git-dir=/var/repositories/name.git checkout -f
сохраним файл и сделаем исполняемым:
chmod +x post-receive
Далее, перейдем в директорию, где у нас на нашем компьютере лежит проект и добавим удалённый репозиторий нашего сервера:
git remote add server ssh://user@host/var/repositories/name.git
Запушим (push) изменения:
git push server master
Вот и всё. После этих действий у вас должно всё развернуться и заработать. Конечно, я здесь не описал, что нужно еще настроить сервер, а так же помимо двух строчек в post-receive у вас будет на много больше, т.к. после обновления файлов выполняются такие действия, как раздача прав доступа, удаление или замена каких-то файлов, или выполнение импорта в базу MySQL, или установка пакетов используя Composer или Bower... В общем, файл post-receive на практике всегда толстый-толстый, но для описание работы этого достаточно.
Здесь я ничего не написал нового. Эта проблема мусолена-перемусолена. Я взял отовсюду по чуть-чуть и сделал проще для реализации и быстрей. Оставил суть. На мои глаза попадались следующие статьи, где вы так-же можете почерпнуть информацию и улучшить свою версию:
- http://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
- http://habrahabr.ru/post/28268/
- https://gist.github.com/oodavid/1809044
- http://www.sitepoint.com/one-click-app-deployment-server-side-git-hooks/
- https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks