mysurik.ru

Git хуки: как я автоматизировал деплой на сервер одной командой

Git хуки как я автоматизировал деплой на сервер одной командой

Вечная проблема «залить файлы на сервер»

Раньше я обновлял сайт так: правил код локально, открывал FileZilla, перетаскивал файлы на сервер. Если забыл какую-то папку — сайт падал с ошибкой. Если заливал не туда — тоже проблема.

Потом я открыл для себя Git хуки. И теперь деплой выглядит так: git push production — и код сам улетает на сервер, обновляется, кеш сбрасывается.

Как это работает

На сервере создаётся bare-репозиторий, в нём вешается post-receive хук. Когда я пушаю в этот репозиторий, хук выполняет три действия:

1. Копирует новые файлы из репозитория в рабочую директорию сайта
2. Запускает composer install, если есть новые зависимости
3. Сбрасывает кеш WordPress через WP-CLI

Всё это занимает секунд 5. Раньше через FTP — минута-две.

Мой хук

Самый простой post-receive хук, который я написал:

#!/bin/bash
git --work-tree=/var/www/site --git-dir=/var/repo/site.git checkout -f
cd /var/www/site && composer install
wp cache flush

Работает безотказно уже год. Если что-то идёт не так — пушаю фикс, через 5 секунд сайт снова работает.

Безопасность

Я не храню пароли в репозитории. Все секреты в .env файле на сервере, а сам .env добавлен в .gitignore. При деплое хук копирует .env.example, если .env не существует.

Также настроил хуки на pre-commit, которые запускают линтер и проверяют синтаксис PHP. Если код кривой — коммит отклоняется. Это спасает от глупых ошибок в продакшне.

Совет

Если вы до сих пор таскаете файлы на сервер через FTP — поставьте Git и настройте деплой через хуки. Это займёт час времени, но сэкономит дни в перспективе.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *