Ми}{@лbI4

Блог хеллоуворлдщика

Деплой на сервер с Git

22.01.2015 git, deploy, linux

Итак, шо це? на самом деле всё очень просто. Нам не нужно будет чо-то там ставить, устанавливать, заниматься сексом с документаций и т.д. и т.п. Всё. Очень. Просто.

Во-первых, у вас должен быть полный доступ к серверу через 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 на практике всегда толстый-толстый, но для описание работы этого достаточно.


Здесь я ничего не написал нового. Эта проблема мусолена-перемусолена. Я взял отовсюду по чуть-чуть и сделал проще для реализации и быстрей. Оставил суть. На мои глаза попадались следующие статьи, где вы так-же можете почерпнуть информацию и улучшить свою версию: