Арсенал интернет решений

Хостинг для разработчиков: деплой сайта через Git без ручной загрузки файлов

Хостинг для разработчиков: деплой сайта через Git без ручной загрузки файлов
Picture of Арсенал Решений
Арсенал Решений
VK
Telegram
WhatsApp
Оглавление

Git-деплой — способ публиковать сайт на сервере прямо из репозитория, без ручной загрузки файлов по FTP. Разработчик делает commit и push, после чего сервер сам забирает изменения и обновляет рабочую версию проекта. На каждом релизе это экономит десятки минут, а заодно снижает риск забыть какой-нибудь файл.

Что такое Git-деплой и какие у него преимущества

Git-деплой работает через хук. Хостинг следит за событиями в репозитории и при каждом push в указанную ветку автоматически запускает обновление.

Раньше обычный сценарий выглядел примерно так: разработчик меняет код локально, собирает архив, запускает FileZilla и вручную перезаливает десятки файлов. А потом пытается вспомнить, что именно изменилось. Достаточно пропустить один файл, и сайт падает уже в проде. Git-деплой этот этап попросту убирает.

  • Все изменения остаются в истории коммитов. Видно, кто, когда и что поменял.
  • Предыдущую версию можно вернуть за секунды, достаточно перейти к нужному коммиту.
  • Несколько разработчиков спокойно работают параллельно и не перезаписывают вручную одни и те же файлы.
  • Автодеплой подключается к CI/CD, поэтому тесты можно запустить еще до публикации.
Параметр Ручная загрузка (FTP/SFTP) Деплой через Git
Скорость обновления 5-15 минут вручную 15-60 секунд автоматически
Риск человеческой ошибки высокий низкий
История изменений отсутствует полная, по коммитам
Откат к прошлой версии сложно, нужен бэкап git checkout за секунды
Совместная работа конфликты файлов ветки и merge

По моим наблюдениям, примерно семь из десяти небольших студийных проектов до сих пор загружают на сервер вручную через FileZilla. Пока проект маленький, схема терпимая. Но команда растет, файлов становится больше, и ручная заливка начинает откровенно тормозить работу.

Как настроить автодеплой на примере популярного провайдера

На настройку автодеплоя обычно уходит 10-15 минут. Нужно привязать репозиторий, выбрать рабочую ветку и указать команды сборки.

Возьмем Timeweb Cloud. Здесь Git-деплой встроен в панель управления облачным сервером, поэтому вручную настраивать вебхуки не придется, все делается через готовый интерфейс.

  1. Открываем в панели хостинга настройки проекта и находим подключение репозитория.
  2. Затем авторизуемся через GitHub, GitLab или Bitbucket. Хостинг получит доступ к списку репозиториев.
  3. Нужный репозиторий выбран, теперь указываем ветку для продакшена, чаще всего main или master.
  4. Если проект требует компиляции, прописываем команды сборки: npm install, npm run build и путь к папке со статикой.
  5. Сохраняем параметры. Хостинг сам создаст webhook в репозитории и будет вызывать его при каждом push.
  6. Наконец, делаем тестовый commit и открываем лог деплоя в панели. Там видно, какие команды отработали и сколько времени заняла сборка.

У большинства провайдеров для разработчиков схема похожая: Render, Railway, VK Cloud, Beget с поддержкой Git. Панели выглядят по-разному, но механика та же, webhook запускает скрипт сборки на сервере.

Работа с ветками и тестовыми окружениями

Нормальная схема веток дает проверить изменения в отдельном окружении и не трогать боевой сайт, пока код не готов. Это тот случай, когда лишние пять минут на настройку потом здорово берегут нервы.

Самый практичный вариант — держать хотя бы две ветки: main для продакшена и develop или staging для тестов. Хостинг настраивают так, чтобы push в staging разворачивал копию сайта на отдельном поддомене, а push в main обновлял основной домен.

  • В main хранится стабильный код. Сюда пушат после ревью и проверки.
  • Develop используют как рабочую ветку, в нее попадают фичи от участников команды.
  • Для конкретных задач удобно заводить feature-ветки, особенно если в команде три человека и больше. Соло-разработчику такая схема часто ни к чему.

Тестовое окружение лучше сделать максимально похожим на прод: та же версия PHP или Node.js, те же переменные окружения, кроме секретных ключей платежных систем, естественно. Иначе получится классика: на staging все работает, а в проде падает из-за различий в версиях.

С базой данных отдельная история. Автодеплой обновляет код, но сам по себе БД не меняет. Миграции запускают отдельным шагом в скрипте сборки либо вручную после деплоя. Если этого не сделать, структура таблиц и код довольно быстро разойдутся.

Типичные ошибки при первой настройке Git-деплоя

На старте проблемы чаще вызывает не Git, а серверное окружение и мелочи в конфигурации. Причем мелочи вполне способны положить весь сайт.

  • Секреты попадают в открытый репозиторий. Пароли от БД и API-ключи оказываются в коде, а затем остаются в истории коммитов, откуда удалить их уже непросто. Используйте .env и .gitignore с первого дня.
  • Деплой идет сразу в прод, без staging. Одна опечатка в конфиге, и сайт недоступен живым пользователям. Тестовое окружение здесь работает как обычная страховка.
  • Зависимости забыли установить. Папки node_modules или vendor правильно добавляют в .gitignore, но команду установки зависимостей на сервере не прописывают. В результате сборка падает из-за отсутствующего модуля.
  • Права доступа выставлены неверно. После деплоя папки с загрузками или кешем порой остаются без права на запись, и сайт перестает сохранять пользовательские файлы.
  • Логи деплоя никто не смотрит. Автодеплой настроили и забыли проверить, срабатывает ли webhook вообще. Потом неделю правят код, который физически не публикуется. Такое, увы, бывает регулярно.

И еще раз про миграции базы, тут действительно легко потерять время. Если структура БД меняется в коде, а сама база автоматически не обновляется, разработчики порой неделями ищут баги. Хотя причина простая: схема и код рассинхронизировались. Если после деплоя проект ведет себя странно, сначала проверьте именно это.

Частые вопросы

Классический shared-хостинг с ограниченным доступом к SSH часто не поддерживает Git-деплой напрямую. Для этой схемы нужен VPS, облачный сервер или специализированная платформа с встроенной поддержкой репозиториев. Многие провайдеры сейчас добавляют эту функцию даже в бюджетные тарифы.

Хорошие системы деплоя используют атомарное переключение: новая версия собирается в отдельной папке и подменяет старую только после успешной сборки. Если сборка упала, пользователи продолжают видеть предыдущую рабочую версию сайта. Стоит заранее проверить у своего провайдера, реализован ли у него такой механизм.

Да, большинство современных панелей хостинга позволяют подключить репозиторий и настроить автодеплой полностью через веб-интерфейс. SSH обычно нужен только для более тонкой настройки скриптов сборки или отладки нестандартных ситуаций.

Достаточно сделать git revert нужного коммита или переключить ветку деплоя на предыдущий стабильный тег и снова запустить публикацию. Это займет меньше минуты против часов восстановления из бэкапа при ручной загрузке файлов.

Да, но код и база данных обновляются раздельно: сам Git отвечает только за файлы темы, плагинов и ядра, а изменения в БД нужно переносить через миграции или отдельные SQL-скрипты. Это стоит продумать заранее, иначе структура кода и базы быстро разойдутся.


Похожие материалы