feat: infrastructure dashboard (Homepage) generated from the service registry
lint / yamllint + ansible-lint + syntax-check (push) Canceled after 0s

playbooks/dashboard.yml deploys Homepage as a second compose stack on the
monitoring LXC (CT 155) next to Uptime Kuma and renders its config from
homelab_services: one tile per service, link to its UI, grouped by Proxmox
node. Adding a service to the registry is enough — no second service list.

- new registry consumer: playbooks/dashboard.yml + playbooks/templates/homepage-*.j2
- homelab_dashboard_* vars in group_vars/all/services.yml (top-level, like
  homelab_reverse_proxy_*); image pinned by digest, floating tag needs an
  explicit -e dashboard_allow_floating_tag=true
- bootstrap-dashboard-pve-token.yml: read-only homepage@pve!dashboard token
  (PVEAuditor) for the Proxmox widget, secret in the root .env as DASHBOARD_PVE_*
- Makefile: dashboard, dry-dashboard, bootstrap-dashboard-token
- container binds the LAN address only (192.168.1.30:8082), not published via Caddy
- docs: architecture.md Monitoring section, plan.md active task, consumer lists

Deployed to CT 155 on 2026-09-03: container healthy, http://192.168.1.30:8082/
returns 200, `make dashboard` idempotent, `make validate` and `make lint` green.
Pending operator steps: `make bootstrap-dashboard-token` (blocked in the agent
session as credential creation) and an Uptime Kuma status page with slug homelab.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KbuZrUoevfBgCpf5DCF4DG
This commit is contained in:
Dmitry
2026-09-03 09:17:16 +03:00
co-authored by Claude Sonnet 5
parent ca48ef2696
commit 05d8c748ab
13 changed files with 484 additions and 2 deletions
+15 -1
View File
@@ -21,7 +21,8 @@ gates и вызывает playbooks. `ansible.cfg` выбирает inventory, r
- `playbooks/ru-vps-base.yml` — стек Caddy и его закреплённый образ;
- `playbooks/pve-backup-jobs.yml` — списки VMID заданий PBS (поле `backup.job`);
- `roles/backup_audit` — VMID для аудита (флаг `monitoring.backup_audit_vmid`);
- `playbooks/validate.yml` — сверка реестра с фактическим состоянием Proxmox.
- `playbooks/validate.yml` — сверка реестра с фактическим состоянием Proxmox;
- `playbooks/dashboard.yml``services.yaml` для Homepage-обзора инфраструктуры.
Остальное (`pve-*.yml`, `status.yml`, monitoring, SSH config) по-прежнему
дублирует значения и должно меняться согласованно.
@@ -114,6 +115,19 @@ Uptime Kuma в CT 146 является активным monitoring UI. Его р
Exporter roles, groups и backup metrics остаются в репозитории. Hardcoded Prometheus
targets могут расходиться с inventory, пока stack заморожен.
`playbooks/dashboard.yml` (`make dashboard`) поднимает Homepage вторым
compose-стеком на том же LXC `monitoring`: обзорная стартовая страница со
списком всех сервисов, ссылками на их UI и виджетами Proxmox/Uptime Kuma.
`services.yaml`, `settings.yaml`, `widgets.yaml`, `bookmarks.yaml` рендерятся
из `homelab_services` шаблонами `playbooks/templates/homepage-*.j2` — отдельный
список сервисов не ведётся. Контейнер слушает только LAN-адрес CT 155
(`homelab_dashboard_bind_ip`), наружу через Caddy не публикуется. Виджет
Proxmox использует read-only токен `homepage@pve!dashboard` (роль `PVEAuditor`,
`make bootstrap-dashboard-token`), секрет — в корневом `.env` как
`DASHBOARD_PVE_*`. Образ Homepage закрепляется по digest как остальные active
images; до первого закрепления плейбук падает на assert'е (обход —
`-e dashboard_allow_floating_tag=true`).
## Grimmory MCP
`tools/grimmory-mcp/src/server.js` запускает локальный stdio MCP. Grimmory API
+43
View File
@@ -2,6 +2,49 @@
## Активные задачи
### Дашборд-обзор инфраструктуры (Homepage)
Решение от 2026-09-03: поднять стартовую страницу-обзор всей инфры (список
сервисов + переходы + виджеты Proxmox/Uptime Kuma).
Выбор: **Homepage** (gethomepage.dev) вторым compose-стеком на LXC
`monitoring` (CT 155) рядом с Uptime Kuma; доступ только LAN/OpenVPN, наружу
не публикуется. Конфиг Homepage **генерируется из `homelab_services`**
`playbooks/dashboard.yml` + шаблоны `playbooks/templates/homepage-*.j2`,
новый потребитель реестра. Плитка на сервис: `href` = `https://<proxy.domain>`
для публичных, иначе `http(s)://<ip>:<порт>`; беспортовые — в группу Headless
с ICMP ping.
**Развёрнуто на CT 155 2026-09-03.** Контейнер `homelab-homepage` (`Up healthy`),
`homelab-homepage.service` enabled, `http://192.168.1.30:8082/` -> 200. Прогон
`make dashboard` идемпотентен (третий заход `changed=0`), `make validate` и
`make lint` зелёные. Образ закреплён по digest
`sha256:753eeb0c…1e1bdd`. Порт 8082 (3000 в модели реестра занят замороженной
Grafana, 3001 — Kuma) -> контейнерный 3000.
Состав:
- `playbooks/dashboard.yml`, шаблоны `homepage-{settings,services,widgets,bookmarks}.yaml.j2`,
`homepage-compose.yml.j2`, `homepage.env.j2`;
- `playbooks/bootstrap-dashboard-pve-token.yml` — read-only токен
`homepage@pve!dashboard` (роль `PVEAuditor`), пишет `DASHBOARD_PVE_*` в корневой `.env`;
- реестр: блок `homelab_dashboard_*` в `group_vars/all/services.yml`, запись в
списках потребителей (`services.yml`, `AGENTS.md`, `architecture.md`);
- `Makefile`: цели `dashboard`, `dry-dashboard`, `bootstrap-dashboard-token`.
Оставшиеся шаги оператора:
1. `make bootstrap-dashboard-token` — выпустить PVE-токен для виджета Proxmox.
(В сессии-агенте был заблокирован auto-mode-классификатором как создание
credential; репозиторная часть готова, плейбук идемпотентен и сам допишет
`DASHBOARD_PVE_*` в корневой `.env`.) После — `make dashboard` заново, чтобы
`homepage.env` подхватил секрет. До этого плитка «Proxmox кластер» показывает
ошибку авторизации — не блокер.
2. Добавить те же три ключа-заглушки в `.env.example` (в сессии путь `.env*`
заблокирован в permissions).
3. В UI Uptime Kuma опубликовать Status Page со slug `homelab` — иначе виджет
сводки up/down показывает ошибку. Не блокер.
### Вывод memoir-bot (CT 142)
Решение от 2026-09-02: сервис не используется и выводится из эксплуатации.