Перейти к содержимому
Перейти в KPanelПерейти в KPanel
Содержание
Сайты

Развёртывание сайта из Git

Машинный перевод. Английский оригинал доступен.

Git-деплой подключает репозиторий к сайту так, что каждый пуш в выбранную ветку клонирует код, запускает вашу сборку и публикует результат. Это руководство охватывает первоначальное подключение, два шага на стороне репозитория, завершающие настройку, чтение истории развёртываний и определение buildpack, которое решает, как собирается приложение на Node.js.

Где находится Git-деплой

Откройте раздел Сайты, нажмите на сайт, откройте группу Окружение в левом меню сайта и выберите Git-деплой. Рядом находятся две связанные страницы:

  • Развёртывания, полная история развёртываний для этого сайта, в той же группе Окружение.
  • Buildpack, определённая стратегия сборки, для сайтов на Node.js, в группе Приложения.

Страница Git-деплоя прямо объясняет своё назначение: подключите репозиторий, и каждый пуш в настроенную ветку запускает сборку и развёртывание.

Страница Git-деплоя для сайта в KPanel, где подключён репозиторий

Подключение репозитория

  1. Выберите Провайдера: GitHub, GitLab или Bitbucket.
  2. Введите URL репозитория. Вам нужна форма SSH, например git@github.com:user/repo.git.
  3. Укажите Ветку, из которой будет выполняться развёртывание. По умолчанию в поле указано main.
  4. При необходимости укажите Команду сборки, например npm run build.
  5. При необходимости укажите Выходной каталог, например dist, public или . для репозитория, который уже собран.
  6. Нажмите Подключить репозиторий.

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

Дополнительные скрипты

Разворачивая раздел Дополнительно, вы увидите два дополнительных поля:

  • Скрипт перед развёртыванием, который выполняется перед сборкой.
  • Скрипт после развёртывания, который выполняется после развёртывания.

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

Автоматическое развёртывание при пуше

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

Отключайте автоматическое развёртывание во время заморозки кода или инцидента, вместо того чтобы отключать репозиторий. Отключение репозитория приводит к удалению ключа развёртывания и секрета webhook, поэтому оба шага на стороне репозитория придётся выполнять заново.

Завершение настройки в вашем репозитории

Подключение репозитория в KPanel это лишь первый из трёх шагов. Пока не выполнено ни одно развёртывание, страница показывает баннер с надписью Завершить настройку: осталось 2 шага и всем необходимым для этого.

Шаг 2: добавьте ключ развёртывания

KapsuleHost нужен доступ на чтение, чтобы клонировать ваш репозиторий. Баннер показывает публичный ключ с кнопкой Скопировать ключ.

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

Шаг 3: добавьте webhook

Webhook сообщает KapsuleHost о том, что произошёл пуш. Баннер показывает три значения:

ПолеЗначение
URL полезной нагрузкиURL, заканчивающийся на /api/git-deploy/webhook/ плюс идентификатор этого сайта
СекретСгенерированный секрет подписи, скрытый до нажатия на значок «глаз»
Тип содержимогоapplication/json

Скопируйте каждое значение в настройки webhook вашего репозитория. Для GitHub есть кнопка быстрого перехода Добавить webhook на GitHub. Установите тип содержимого JSON, а не значение по умолчанию с кодировкой формы, иначе полезная нагрузка не будет разобрана.

Относитесь к секрету webhook как к паролю. Любой, у кого есть этот секрет и URL полезной нагрузки, может запустить развёртывание вашего сайта. Оба значения показываются только тем, кто уже может администрировать сайт, а секрет остаётся скрытым за значком «глаз», пока вы его не запросите.

Развёртывание вручную

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

Чтение истории развёртываний

Откройте Окружение, затем Развёртывания. Страница называется История развёртываний и перечисляет каждое развёртывание, запущенное webhook'ом или вручную, начиная с самого нового.

Каждая строка содержит:

  • Значок статуса и короткий хеш коммита SHA, с веткой в виде метки.
  • Сообщение коммита или Ручное развёртывание, если сообщения коммита не было.
  • Автора, сколько времени прошло, сколько времени это заняло и что вызвало запуск.
  • Метку статуса.

Статусы: ожидание, сборка, развёртывание, успех и ошибка. Пока что-то выполняется, страница обновляется автоматически каждые пять секунд и показывает под таблицей примечание Автоматическое обновление, так что можно оставить страницу открытой и наблюдать за ходом развёртывания.

Когда развёртывание завершается неудачей

У неудачной строки справа появляется кнопка Ошибка. Нажмите на неё, чтобы развернуть захваченный вывод ошибки прямо здесь, не покидая страницу. Этот вывод это собственный текст ошибки сборки, поэтому обычно в нём указан файл или команда, которые привели к сбою.

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

Определение buildpack

На сайтах с Node.js страница Buildpack в группе Приложения показывает, как KapsuleHost решил собирать ваше приложение. Определение выполняется по файлам в корне вашего репозитория, и побеждает первое совпадение:

ОпределеноТриггер
Пользовательский buildpackkapsule.config.yaml или kapsule.config.yml в корне
Buildpack DockerfileDockerfile в корне
Node.jspackage.json со скриптом start, build или dev
Pythonrequirements.txt или pyproject.toml
PHPcomposer.json
Статический сайтindex.html в корне

Если ничего не совпадает, страница сообщает об этом и перечисляет поддерживаемые триггеры. Добавьте Dockerfile или kapsule.config.yaml, чтобы взять управление сборкой под явный контроль.

Запуск сборки

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

Одновременно может выполняться только одна сборка. Попытка запустить вторую, пока одна уже в очереди или выполняется, отклоняется с сообщением Сборка уже выполняется, и это сделано намеренно: две сборки, одновременно записывающие один и тот же результат, это верный способ получить наполовину развёрнутый сайт.

Отключение

Нажмите Отключить и подтвердите. Подтверждение явно объясняет последствия: конфигурация Git-деплоя и ключ развёртывания удаляются, а файлы вашего сайта не затрагиваются. Сайт продолжает обслуживать то, что было развёрнуто последним.

После этого наведите порядок, удалив ключ развёртывания и webhook в настройках вашего репозитория. Они просто перестанут работать, но оставленные «мёртвые» записи усложняют следующую проверку.

Решение проблем

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

Клонирование не удаётся. Ключ развёртывания отсутствует, был вставлен с переносом строки внутри, либо был добавлен не в тот репозиторий. Скопируйте его заново кнопкой Скопировать ключ, а не выделением текста вручную.

Развёртывание проходит успешно, но сайт не меняется. Скорее всего, неверно указан выходной каталог. Если ваша сборка записывает результат в dist, а выходной каталог не указан, собранные файлы никогда не попадут в корень, который обслуживается сайтом.

Всё показывает «ожидание» и ничего не меняется. Развёртывание было поставлено в очередь, но так и не было подхвачено. Запустите Развернуть сейчас вручную и проверьте страницу «Развёртывания» на наличие строки с ошибкой.

Куда двигаться дальше

Это было полезно?

Вы ИИ? Читайте эту страницу в Markdown

Похожие статьи

Подключение через SFTP: FileZilla, Cyberduck и командная строкаSFTP (Secure File Transfer Protocol, защищённый протокол передачи файлов) даёт вам прямой доступ к файлам вашего сайта на сервере.…SSL-сертификаты и HTTPSЭта статья простым языком объясняет, что такое SSL, как KapsuleHost автоматически обеспечивает SSL для ваших сайтов, и что делать, если с вашим сертификатом что…Сайты: с чего начатьКак работает хостинг сайтов в KapsuleHost, что находится на каждой вкладке сайта и какое руководство читать для конкретной задачи.…Мониторинг доступности сайтаКаждый сайт на KapsuleHost автоматически проверяется каждые 60 секунд, и вкладка Uptime показывает результат: текущий статус, процент времени безотказной работы…

Всё ещё нужна помощь?

Спросите Kora, она знает ваш аккаунт, или свяжитесь с нашей командой.

Связаться с намиНаписать в поддержку