Skip to content

Latest commit

 

History

History
40 lines (23 loc) · 4.29 KB

deploy.md

File metadata and controls

40 lines (23 loc) · 4.29 KB

Деплой Доки

Дока хостится на сервере как набор статических файлов.

Когда деплоим

Деплоим автоматически, при слиянии пул-реквеста в ветку main в репозитории content или platform.

Как собираем

Проект собирается с помощью GitHub Actions.

В каждом репозитории описан свой воркфлоу для сборки:

Как устроена сборка платформы

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

  1. Сборка — переиспользуемый build-site.yml: скачивает контент и кеш, ставит зависимости, подключает статьи симлинками, собирает проект. Выкладывает два артефакта: полный site-dist для публикации и маленький site-html только со страницами — валидатору картинки не нужны. Рядом кладёт опись: контрольная сумма архива, число файлов и число страниц.
  2. Валидация разметки — берёт site-html и прогоняет W3C-валидатор.
  3. Публикация — берёт site-dist, сверяет опись и отправляет на сервер.

Публикация зависит только от сборки, но не от валидации: красная разметка выкатку не останавливает.

Что защищает боевой сайт

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

  1. Сверка описи до распаковки. Не сошлась контрольная сумма — деплой не начинается. После распаковки сверяется число файлов, плюс отбивается сборка, выдавшая неправдоподобно мало страниц.
  2. Удаление только после передачи (--delete-after). Если передача оборвётся, не удалится ничего: на сервере останется прежняя версия плюс частично долитая новая.
  3. Предел на удаление (--max-delete), посчитанный от размера сборки. Если удаляемого неправдоподобно много, rsync прерывается и не вычищает сайт.

На стороне сервера не происходит никаких действий, кроме публикации переданной папки со сборкой.

Образ для Docker

Отдельный воркфлоу docker-deploy.yml собирает образ под две архитектуры, каждую на своём нативном раннере, и уже потом навешивает тег на общий манифест. Через эмуляцию QEMU сборка под arm64 падала через раз.