feat(mappa-ntfy-monitor): deploy health monitor mappa → ntfy (#1013)
- /root/mappa-ntfy-monitor/monitor.py (python3 stdlib): GET /health (200 + ok:true + service:mappa), алерт после 3 подряд фейлов раз за эпизод + recovery - cron */5 в /etc/cron.d/mappa-ntfy-monitor, env 600 (NTFY_* из pass), топик mappa-alerts - тесты: dry-run OK / негатив 3× → DOWN-алерт / recovery; стек 26 не тронут - ранбук §Мониторинг живости; источник скрипта в scripts/
This commit is contained in:
@@ -1,43 +1,32 @@
|
||||
---
|
||||
_last_updated_: 2026-08-23T15:43:31Z
|
||||
session_id: mappa-prod-deploy-2026-08-23
|
||||
_last_updated_: 2026-08-23T19:40:00Z
|
||||
session_id: mappa-ntfy-monitor-2026-08-23
|
||||
---
|
||||
|
||||
# Next session handoff
|
||||
|
||||
## Что сделано в этой сессии (закрыто)
|
||||
|
||||
### 🟢 #1012 mappa-prod-deploy — инфра-деплой выполнен, передан mappa
|
||||
Письмо mappa 15:10Z → взял таску #1012 (ready, notify mappa). Разделение труда подтверждено юзером: **деплой = админ, прод-импорт/verify/read-only/фолбэк/ntfy/MCP = mappa**. Сделано (инфра):
|
||||
|
||||
1. **БД**: отдельная `mappa` (role + db, owner mappa) на общем `postgres:16` VDS. Креды → **`pass show mappa/full-env`** (в т.ч. `DATABASE_URL` для docker-сети: `postgres://mappa:…@postgres:5432/mappa`).
|
||||
2. **Образ**: `registry.kzntsv.site/mappa:0.1.0`. Dockerfile добавлен в репо mappa (commit `56366eb`). ⚠️ Грабли: tsc не копирует `.sql` → `schema.sql` в dist обязателен (COPY в Dockerfile), иначе migrate() падает «schema.sql not found». Образ пересобирался 2×.
|
||||
3. **Compose**: source-of-truth `host-stacks/vds-kzntsv/mappa.compose.yml` (commit `8f1b13f3`): mem_limit 512m, restart unless-stopped, сети shared-dbs+proxy, healthcheck wget /health, traefik label → `https://mappa.vds.kzntsv.site`.
|
||||
4. **Deploy**: Portainer stack 26 `mappa` (standalone string-mode, endpoint 1; скрипт `.tmp/mappa-portainer-deploy.py` + restart). НЕ ad-hoc compose up (VDS ops rule).
|
||||
5. **Verify**: контейнер Up (healthy), `/health` → `{"ok":true,"service":"mappa"}`, `/admin/status` + `/graph/stats` 200, миграции легли (6 таблиц owner=mappa, БД пустая — entities=0).
|
||||
6. **Пинг mappa**: письмо `mappa/.agents/inbox/2026-08-23T18-45-00Z-admin-mappa-deployed.md` — доставлено (монитор mappa утащил в `.read/` 18:34). #1012 закрыта (commit `5870b75b`).
|
||||
## Recent commits
|
||||
- mappa-ntfy-monitor: монитор health mappa → ntfy задеплоен, #1013 закрыта (2026-08-23)
|
||||
- server close 56c1cb5: #1013 mappa-ntfy-monitor → 🟢 (note с отчётом в блоке)
|
||||
|
||||
## Открытые треки
|
||||
| Трек | Статус | Entry-point |
|
||||
|---|---|---|
|
||||
| ~~#1012 mappa-prod-deploy~~ | 🟢 закрыто | — |
|
||||
| mappa #985 mappa-deploy | 🔵 blocked-by #1012 → ждёт 🟢 (импорт+verify+read-only+ntfy+MCP за mappa) | письмо-пинг в mappa inbox доставлено; следить за их 🟢 |
|
||||
| #803 llm-web-proxy | 🔴 active | next action в STATUS.md (executors/translators из omniroute) |
|
||||
| MCP-кэш (meta_status) | 🟡 | synced 2026-08-22 22:19 |
|
||||
| legacy agendaJobs (60 «posting»-сирот) | 🟡 | чистка отдельно |
|
||||
| fbsPostings.js:73 TypeError | 🟡 | флагнул books |
|
||||
| meeting-room merge-conflict (UU) | 🟡 | разрешить → миграция 2 тасок |
|
||||
| fbsPostings.js:73 TypeError | 🟡 | флагнул books |
|
||||
|
||||
## Спроси user'а
|
||||
- (нет на этом раунде — деплой закрыт по канону, письмо mappa отправлено)
|
||||
- (нет на этом раунде — #1013 закрыта по канону, письмо mappa отправлено)
|
||||
|
||||
## Не делать (guards)
|
||||
- Редеплой mappa — только через Portainer (`POST /api/stacks/26/{stop,start}`; JWT как в миграц. скрипте). `docker compose up` по SSH — anti-pattern.
|
||||
- Новый тег образа mappa → `docker pull` на VDS ДО restart стека (ловил залипание на старом digest).
|
||||
- Не дублировать прод-импорт/ntfy/read-only — это скоуп mappa (#985), не админа.
|
||||
- Редеплой mappa — только через Portainer (стек 26; `docker pull` ДО restart). `docker compose up` по SSH — anti-pattern.
|
||||
- Не трогать mappa-скоуп: read-only файлов + фолбэк + поллер на сервисных — шаг ФЛИПА (решение 15, ~2 недели), решает mappa.
|
||||
- Монитор mappa наблюдает — редеплой/рестарт стека отдельной задачей, не вручную.
|
||||
- `noreply@snolla.com` — мёртвый ящик, не возвращать в конфиги.
|
||||
- Не чистить legacy agendaJobs без отдельного запроса.
|
||||
|
||||
## Memory updates за сессию
|
||||
- Прод-инфра mappa: БД на общем postgres:16 (база+role mappa, креды в pass), стек Portainer 26, endpoint `mappa.vds.kzntsv.site`, образ `registry.kzntsv.site/mappa:0.1.0`, compose в `host-stacks/vds-kzntsv/mappa.compose.yml`. Всё зафиксировано в closing-note #1012.
|
||||
- Кандидат в shared-wiki: паттерн «schema.sql не попадает в dist при tsc-сборке — копировать отдельно в Dockerfile» + «Portainer stack не подхватывает новый digest без docker pull». ⚠️ Юзер ОТКАЗАЛ в shared-ingest ранбука mappa (2026-08-23 «нет пока») — ранбук только в локальной .admin-вики (concepts/mappa-vds-deploy-runbook.md, commit e3de6391).
|
||||
- Монитор mappa задеплоен: `/root/mappa-ntfy-monitor/monitor.py` + cron `*/5` (`/etc/cron.d/mappa-ntfy-monitor`), топик ntfy `mappa-alerts` (vitya admin-role → rw без правки ACL), env `/root/.mappa-ntfy-monitor.env` (600, из pass vds-kzntsv/full-env). Доки: `.wiki/concepts/mappa-vds-deploy-runbook.md` §Мониторинг живости.
|
||||
|
||||
Reference in New Issue
Block a user