6.1 KiB
План: отдельный сервис документации (Node.js)
Целевая архитектура
S3 (nubes-terraform-registry) — статика документации, только docs/*
Node.js-сервис — раздаёт /docs/* + кеш с TTL
registry (Go) — только Terraform-протокол:
/.well-known/*, /v1/providers/*, /v1/proxy
Что выносится из registry
- Маршрут
/docs/и функцияdocsHandler(удаляются изserver/main.goиserver/docs.go). - Провайдерская логика (
discoveryHandler,router,proxyHandler,rootHandler,healthz/readyz) — НЕ меняется.
Соглашения для сервиса документации (перенос из бывшего server/docs.go)
Файл docs.go не является уникальным активом; он описывает обычный маппинг
URL → S3-ключ. При переносе на Node.js достаточно воспроизвести три правила:
-
Формат S3-ключей документации:
docs/<namespace>/<name>/<version>/<rest> при пустом rest → docs/<namespace>/<name>/<version>/index.html -
Fallback-цепочка при неизвестном пути: точный путь →
<путь>/index.html(если путь похож на каталог) → корневойindex.html. -
Content-Type: через
mime.TypeByExtension; fallback наtext/html; charset=utf-8дляindex.html/.html, иначеapplication/octet-stream. -
Добавить то, чего в сервисе документации будет больше, чем в docs.go: in-memory кеш с TTL (например, 60–300 сек) и заголовок
Cache-Control.
Endpoint Node.js-сервиса
GET /docs/<namespace>/<name>/<version>/<rest>
Переменные окружения (общие с registry)
S3_ENDPOINT,S3_BUCKET,S3_ACCESS_KEY,S3_SECRET_KEY(точки доступа — как вsecrets/env.txt).
DNS / Ingress
/docs/*→ Node.js-сервис./.well-known/*,/v1/providers/*,/v1/proxy→ registry.- Тот же домен
tf-registry.containerk8s.services.ngcloud.ru, пути разводятся в Ingress. (При отдельном поддомене потребуется переписывать ссылки в HTML.)
Порядок работ
- Вынести
/docs/из registry (этот шаг). - Написать Node.js-сервис (маппинг + кеш + Content-Type).
- Dockerfile + образ в gitea + деплой сервиса.
- Ingress-правило для
/docs/*. - Переписать генератор документации под новые соглашения (отдельная задача).
- Smoke-тесты: HTML 200, CSS/JS 200, ссылки валидны.
Статус
- Вынести документацию из registry (v0.0.6)
- Node.js-сервис (отдельная репа)
- Деплой + Ingress
- Переписанный генератор
План (принципиальный) — отдельная репа
Код — в отдельной репе, сюда только итоговый результат.
Принципы
-
Разделение по ответственности.
- registry — только Terraform-протокол (уже сделано, v0.0.6).
- docs-сервис — только раздача статики
/docs/*. - S3 — только хранилище статики, prefix
docs/.
-
Сервис документации = статический сервер, не приложение. Никакого рендеринга и шаблонов. Одна функция: URL → S3-ключ → файл.
-
Язык — Node.js. Лёгкий, быстрый, встроенный кеш, тот же S3 SDK. (nginx — запасной вариант, если не нужен код.)
-
Кеш обязателен. in-memory кеш с TTL (60–300 сек) +
Cache-Control. Это решает исходную проблему «тормозит и кеширует». -
Один домен, пути разводятся в Ingress.
/docs/*→ docs-сервис/.well-known/*,/v1/providers/*,/v1/proxy→ registry Отдельный поддомен не нужен — тогда не придётся переписывать ссылки в HTML.
-
Доступ к S3 — те же credentials, но только к
docs/*. Ключ доступа с правом чтенияdocs/, без доступа к провайдерским артефактам.
Соглашения из бывшего docs.go (перенести на Node)
- S3-ключ:
docs/<ns>/<name>/<version>/<rest>; пустойrest→index.html. - Fallback: точный путь →
<путь>/index.html→ корневойindex.html. - Content-Type по расширению;
index.html→text/html; charset=utf-8.
Минимальный объём сервиса
GET /docs/:ns/:name/:version/*→ S3-ключ → отдать файл + кеш.- Dockerfile → образ в gitea → деплой.
- Ingress-правило для
/docs/*.
Что отдаётся обратно в эту репу
- Только ссылка на репу + итоговый Dockerfile/конфиг, если договоримся держать деплой-артефакты здесь.
- Сам код docs-сервиса — в отдельной репе.
Генератор — отдельная задача (НЕ входит в этот план)
- Переписывается отдельно, чтобы ссылки на ассеты были корректны.
- К docs-сервису относится только как «потребитель» результата.