Git deploy — подход к деплою, при котором обновление кода на сервере происходит через операции git. Есть два основных паттерна: простой git pull на сервере и push-to-deploy через bare repository с хуком post-receive.
Паттерн 1: git pull
# На сервере: клонировать репозиторий
git clone git@github.com:user/myapp.git /var/www/myapp
# Деплой: SSH на сервер и git pull
ssh user@server "cd /var/www/myapp && git pull && systemctl reload nginx"
Паттерн 2: Push-to-Deploy (bare repository)
# На сервере: создать bare репозиторий
mkdir -p /srv/repos/myapp.git
git init --bare /srv/repos/myapp.git
# Создать хук post-receive
cat > /srv/repos/myapp.git/hooks/post-receive << 'EOF'
#!/bin/bash
GIT_WORK_TREE=/var/www/myapp git checkout -f main
cd /var/www/myapp && npm install && systemctl reload nginx
EOF
chmod +x /srv/repos/myapp.git/hooks/post-receive
# Локально: добавить сервер как remote
git remote add production user@server:/srv/repos/myapp.git
# Деплой: просто git push
git push production main
Capistrano и деплой-инструменты
Capistrano (Ruby), Deployer (PHP), Fabric (Python) — инструменты для автоматизации деплоя через SSH: атомарные деплои с rollback, управление конфигами, zero-downtime деплои.
История
Git создан Линусом Торвальдсом в 2005 году. Хуки Git (post-receive) появились с первых версий. Heroku (2007) популяризировал git push deploy. Capistrano — с 2006 года. В 2010-х CI/CD системы заменили простые git-хуки для сложных проектов.
Связь с хостингом
Git deploy — отправная точка автоматизации деплоя на VDS до появления полноценного CI/CD. Для PHP/Node.js проектов: git push → post-receive хук → composer install/npm build → reload PHP-FPM/Nginx. Heroku-образный деплой для своего сервера без инструментов вроде GitHub Actions.
История Git Deploy
Git создан Линусом Торвальдсом в апреле 2005 года за 2 недели. Концепция деплоя через git push popularized Heroku в 2009 году: git push heroku main — и приложение задеплоено. git-receive-pack + post-receive hook — механизм, на котором строятся все git-деплои. Caistrano (2006), Mina (2013), Deployer (2014) — Ruby/PHP инструменты автоматизации деплоя. Git deploy используется в 90%+ проектов на современном хостинге.
Подходы к Git Deploy
| Метод | Сложность | Подходит для |
|---|---|---|
| post-receive hook | низкая | простые проекты, VPS |
| CI/CD pipeline | средняя | командные проекты |
| Heroku-style (dokku) | средняя | PaaS на VPS |
| GitHub Actions + SSH | средняя | GitHub-проекты |
| ArgoCD/FluxCD | высокая | Kubernetes GitOps |
Практический пример git deploy на VPS
# На сервере: создание bare-репозитория
git init --bare /var/repos/mysite.git
# Хук post-receive
cat /var/repos/mysite.git/hooks/post-receive
#!/bin/bash
git --work-tree=/var/www/mysite checkout -f
После этого: git remote add production user@server:/var/repos/mysite.git и git push production main деплоит изменения автоматически.
Типичные ошибки
- Деплой напрямую в
main-ветку без тестирования — сломанный код сразу в продакшне. - Не настроено откатывание: при проблемах нужен
git push --forceпредыдущего коммита. - Секреты (.env) в git-репозитории — никогда не коммитьте credentials.
При использовании Nginx + git deploy рекомендуется включить автоматическую сборку CSS/JS через hook: npm run build или composer install после каждого деплоя. Для WordPress: WP-CLI (wp cache flush) очищает кеш после деплоя. Логи деплоя пишутся в /var/log/deploy.log для аудита.