Триггер — incident 2026-05-22 в .workshop-сессии: агент ляпнул gitea.kzntsv.site (canonical = git.kzntsv.site), плюс перепутал client-IP в traefik access-логах с destination-IP, и построил неверный root-cause для board-viewer 404. User: "никакого gitea.kzntsv.site нет, есть только git.kzntsv.site, нужна инвентаризация чтобы и боссы и агенты и разрабы знали железо". Таска: единая страница в projects-wiki/concepts/infrastructure-inventory.md с canonical hostnames, IP-картой, anti-aliases, pointers в bootstrap-concept'ы каждой машины. Pointer из .admin/.wiki/CLAUDE.md.
51 lines
5.5 KiB
Markdown
51 lines
5.5 KiB
Markdown
# infra-inventory
|
||
|
||
## Goal
|
||
|
||
Полная инвентаризация инфраструктуры kzntsv: какие машины существуют, где они физически, какие IP, какие домены/субдомены на них смотрят, какие стеки/сервисы крутятся. Результат — единая страница в global wiki (`projects-wiki/concepts/infrastructure-inventory.md`), доступная всем (босс в `.workshop`, агенты в любом проекте, разрабы). **Без этой карты любой агент / разраб угадывает hostname по software name** (последний инцидент: ляпнул `gitea.kzntsv.site` вместо `git.kzntsv.site`, перепутал source/destination IP в access-логах, построил неверную причину 404).
|
||
|
||
## Acceptance criteria
|
||
|
||
- Единая страница `projects-wiki/concepts/infrastructure-inventory.md` ингествованная через `mcp__projects-meta__knowledge_ingest`
|
||
- Содержит таблицу: **машина** | **физ. расположение / провайдер** | **public IP** | **internal IP** (если применимо) | **назначение** | **что крутится**
|
||
- Содержит таблицу: **subdomain** | **IP** | **на какой машине** | **что обслуживает** | **TLS-resolver** (если traefik)
|
||
- Явно зафиксированы **canonical hostnames** для каждого сервиса: `git.kzntsv.site` (Gitea, **НЕ** `gitea.kzntsv.site`), `registry.kzntsv.site`, `traefik.vds.kzntsv.site`, `mssql.kzntsv.site`, `board.kzntsv.site`, owncloud-host, и т.д.
|
||
- Раздел «aliases / wildcard» — что апекс и wildcard указывают, что туда **не** надо роутить production-traffic
|
||
- Раздел «not on this host» — anti-aliases (`gitea.kzntsv.site` не существует, использовать `git.kzntsv.site`; и аналоги если есть)
|
||
- Pointers — для каждого хоста ссылка на соответствующую `.wiki/concepts/<host>-bootstrap.md` если есть, на ops-MCP endpoint если есть (`opsmcp.vds.kzntsv.site`, `opsmcp.kzntsv.site` для NAS)
|
||
|
||
## Источники
|
||
|
||
- `mcp__projects-meta__knowledge_search` по существующим bootstrap-concept'ам (vds-kzntsv-bootstrap, vds-ntfy-push, owncloud-vds-deploy, etc. — в `.admin/.tasks/` уже куча)
|
||
- `vds-ops` MCP (`mcp__vds-ops__ops_docker_ps`) — что running на VDS
|
||
- `synology-ops` MCP — что running на NAS
|
||
- `git remote -v` на любом локальном clone → canonical Gitea hostname
|
||
- Public DNS probes (`nslookup`) для всех known subdomain
|
||
- `~/.config/projects-mcp/auth.toml` — Gitea base URL (canonical)
|
||
- Existing concept в `.admin/.wiki/concepts/` если есть (проверить перед написанием с нуля)
|
||
|
||
## Pending
|
||
|
||
- [ ] Inventory машин (как минимум: VDS Rusonyx, NAS Synology, dev-машина DESKTOP-NSEF0UK; возможно есть ещё)
|
||
- [ ] Inventory subdomain'ов через `nslookup` / list of known hostnames в проектах (`rg -tjsonl "kzntsv.site"` по `~/projects/`)
|
||
- [ ] Cross-check каждого hostname с реальным docker stack через ops-MCP
|
||
- [ ] Anti-aliases (hostnames которые «звучат правильно» но не существуют — `gitea.`, может другие — `git-registry.`, `nas.`, etc.)
|
||
- [ ] Ingest в global wiki через `mcp__projects-meta__knowledge_ingest({target_project: "OpeItcLoc03/projects-wiki", pagePath: "concepts/infrastructure-inventory.md", ...})`
|
||
- [ ] Pointer в `.admin/.wiki/CLAUDE.md` Domain conventions: «Перед любым hostname-mention свериться с `projects-wiki/concepts/infrastructure-inventory.md` (canonical names + anti-aliases)»
|
||
- [ ] Pointer в `~/projects/claude-skills/` skill `using-vds-ops` body и `using-synology-ops` body: «Canonical hostnames — см. infrastructure-inventory» (когда тот skeleton получит body)
|
||
|
||
## Acceptance — visible
|
||
|
||
- Любой агент в любом проекте на вопрос «какой hostname у Gitea?» сначала глянет в инвентаризацию, а не ляпнет `gitea.kzntsv.site` по аналогии с software name
|
||
- Босс в `.workshop/` при дизайне нового стека (например, новый сервис на VDS) сразу видит занятые subdomain'ы и не предлагает конфликтующие
|
||
|
||
## Decisions log
|
||
|
||
- 2026-05-22: таска создана из incident'а текущей сессии (агент перепутал `gitea.` vs `git.`, source vs destination IP в traefik access-логах, построил неверный root-cause 404 для board-viewer deploy). User: «никакого gitea.kzntsv.site нет, есть только git.kzntsv.site». Single source of truth → global wiki.
|
||
|
||
## Notes
|
||
|
||
- Это не оперативная таска (не блокирует deploy). Но без неё каждый новый агент/сессия рискует повторить ту же ошибку. Приоритет — высокий по latency: чем дольше нет inventory, тем больше circular incident'ов.
|
||
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-22 -->
|