Задача#

Объединить документацию нескольких продуктов (API, руководства, сайты на Hugo и т.д.) за одной точкой входа, с единой авторизацией и предсказуемой схемой URL, не вводя СУБД и сложный бэкенд.

Что входит в поставку#

КомпонентРоль
Docker ComposeОдин сервис caddy: внутри Caddy + publish-api, тома, проброс портов, read_only, tmpfs.
Caddy 2TLS (в поставке по умолчанию tls internal), Basic Auth, раздача статики, gzip, security headers, логи в JSON на stdout.
Портал (Hugo)Список продуктов из data/portal/data/products.yml, поиск в браузере, адаптивная вёрстка.
Каталог data/Собранный портал (data/portal/public/), документация продуктов (data/<slug>/...), в т.ч. это руководство (data/easydocs/guide/).
Скриптыscripts/init.sh — инициализация и локальная сборка портала и руководства.
publish-apiHTTP-процесс в том же контейнере: публикация ZIP, обновление products.yml, пересборка портала.
CI-шаблоныПримеры для репозитория документации продукта → вызов publish-api.

Принципы#

  • Только файлы на диске — Caddy раздаёт каталог data/; перезапуск контейнера не обязателен. Публикация продуктовых сайтов в эксплуатации — через publish-api (он же пересобирает портал при обновлении карточек).
  • Портал статический — при ручном изменении products.yml нужна отдельная пересборка Hugo портала.
  • Без внешних CDN — CSS/JS локально в static/ каждого сайта.

Схема URL#

  • / — портал (карточки продуктов).
  • /docs/<slug>/<тип>/ — статика продукта, например /docs/easydocs/guide/ для данного руководства.

Caddy снимает префикс /docs и отдаёт файлы из /srv/docs на хосте (в Compose это ./data).