Примечание: Данное руководство не охватывает установку Git; инструкции по установке можно найти в этой статье.
В данном руководстве речь пойдет об использовании Git для развертывания приложений. Это можно сделать несколькими способами, но эта статья сфокусирована на самом простом из них.
Примечание: Подразумевается, что пользователь уже знает, как создать и использовать репозиторий на локальной машине. В противном случае нужно ознакомиться с этой статьей.
В основном система Git предназначена для управления версиями. Для этого используется локальный репозиторий разработчика и удаленный репозиторий, в котором хранятся и синхронизируются все файлы, что позволяет работать над приложением в команде. Однако Git можно также использовать для запуска приложения в производство.
Подготовка сервера
В этом руководстве условное рабочее пространство выглядит так:
- Каталог сервера: /var/www/domain.com
- Репозиторий сервера: /var/repo/site.git
Итак, что же нужно сделать, чтобы толкнуть приложение в репозиторий site.git и открыть доступ к контенту в /var/www/domain.com?
Создание репозитория
Введите следующее на виртуальном выделенном сервере:
cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare
Флаг –bare значит, что папка предназначена для контроля версий и не будет содержать никаких исходных файлов.
Перехватчики Git
Репозитории Git имеют подкаталог «hooks», в котором хранятся перехватчики (hooks) – образцы файлов для автоматизации распространенных действий, которые перехватывают и выполняют пользовательские действия.
В документации Git упоминаются три возможных перехватчика: pre-receive, post-receive и update. Перехватчик pre-receive выполняется, когда сервер получает команду push; update работает аналогичным образом, но выполняется для каждой ветки; post-receive выполняется, когда команда push уже выполнена.
Если набрать в репозитории:
ls
на экране появится несколько файлов и папок, среди которых будет папка hooks. Откройте её:
cd hooks
В ней создайте файл post-receive, набрав:
cat > post-receive
При выполнении данной команды на экране будет пустая строка; все, что вы введете в строку, будет сохранено в этот файл. Введите:
#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
Введя этот код, нажмите Ctrl D, чтобы сохранить. Теперь нужно установить права на файл:
chmod +x post-receive
Как сказано в документации, git-dir – это путь к каталогу; work-tree определяет другой путь, по которому и нужно переместить файлы.
Файл post-receive будет просматриваться при каждом выполнении команды push, в нем сказано, что файлы нужно передавать в /var/www/domain.com.
Локальная машина
Создайте локальный репозиторий. Измените путь и имя на свое усмотрение. Чтобы выйти с VPS, просто введите:
exit
Чтобы создать репозиторий:
cd /my/workspace
mkdir project && cd project
git init
Теперь нужно настроить удаленный путь репозитория. Для этого используйте:
git remote add live ssh://user@mydomain.com/var/repo/site.git
Предположим, в папке находится готовый проект. Добавьте файлы и сообщение о коммите:
git add .
git commit -m "My project is ready"
Примечание: Точка после git add означает, что нужно добавить в хранилище все файлы. После git commit используется флаг –m, который позволяет ввести сообщение.
В завершение нужно толкнуть все на сервер при помощи команды push:
git push live master
Counting objects: 7, done.Delta compression using up to 4 threads.Compressing objects: 100% (7/7), done.Writing objects: 100% (7/7), 10.56 KiB, done.Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mydomain.com/var/repo/site.git* [new branch] master -> master
Git толкнет удаленный репозиторий live в ветку master. Чтобы ознакомиться с этим процессом подробнее, читайте эту статью.
Beta-версии приложений
Чтобы не разворачивать приложение за один раз, можно создать beta-каталог и протестировать приложение.
Для этого нужно создать отдельный репозиторий. Вернитесь на VPS и выполните:
cd /var/www/
mkdir beta
Чтобы создать репозиторий:
cd /var/repo
mkdir beta.git && cd beta.git
git init --bare
Теперь нужно снова создать файл post-receive, чтобы просмотреть наш проект в бета-каталоге:
cd hooks
cat > post-receive
Внесите в файл следующее:
#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f
Нажмите Ctrl D, чтобы сохранить файл. Вернитесь в локальный репозиторий:
exit
cd /my/workspace/project
Теперь можно добавить еще один удаленный репозиторий, указывающий на бета-репозиторий:
git remote add beta ssh://user@mydomain.com/var/repo/beta.git
Толкните файлы в бета-рпозиторий и проверьте их, после чего можно толкнуть их в live:
git add .
git commit -m "New version"
git push beta master
git push live master
Развертывание приложения
Чтобы развернуть приложение, нужно связать репозитории beta и live. Войдите на сервер и введите:
cd /var/repo/beta.git
git remote add live ../site.git
Теперь можно передавать файлы из beta в live:
cd /var/repo/beta.git
git push live master
Сервер полностью готов к развертыванию приложения!