Задача#
Объединить документацию нескольких продуктов (API, руководства, сайты на Hugo и т.д.) за одной точкой входа, с единой авторизацией и предсказуемой схемой URL, не вводя СУБД и сложный бэкенд.
Что входит в поставку#
| Компонент | Роль |
|---|---|
| Docker Compose | Один сервис caddy: внутри Caddy + publish-api, тома, проброс портов, read_only, tmpfs. |
| Caddy 2 | TLS (в поставке по умолчанию 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-api | HTTP-процесс в том же контейнере: публикация 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).