Files
admin/host-stacks/books-vds/ops-mcp.compose.yml
vitya 12c7dc5ab9 tasks(NEXT_SESSION): session-close — bookva tenant deep-debug + 6-bug post-mortem
Multi-fix session: bookva tenant works correctly после 6 fix'ов одной природы
(incomplete cutover-prep без e2e smoke). См. NEXT_SESSION.md § "What's LIVE"
+ § "Memory updates" + shared wiki concept tenant-overlay-config-volume-mount-path-pitfall.

Changes:
- host-stacks/books-vds/ops-mcp.compose.yml: add BOOKVA_MARIADB_PASSWORD env
  declaration + multi-tenant docs note. Stack 26 ещё не пере-PUT'нут на это,
  открытая микро-таска ops-mcp-multi-tenant-stack-activate в NEXT_SESSION.
- STATUS.md: 6-bug summary в latest update line.
- NEXT_SESSION.md: full rewrite с 14 recent commits, open треками, asks к user'у,
  memory updates про agenda.db.collection / composite jobId / scheduler envs /
  bookva auth tokens.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:32:29 +03:00

72 lines
3.1 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# books-ops — host-level observability stack на books VDS (89.253.255.133).
#
# Ideology: books VDS = наш host, slovo/bookva = клиентские tenant-стэки.
# Один host-wide ops-mcp видит все контейнеры через `tcp://books-docker-proxy-ro:2375`.
#
# Tenant DB scope: per-tenant pools (slovo + bookva). Tools принимают optional
# `tenant: 'slovo'|'bookva'` (default = config.defaultTenant). См. config/default.json
# в `packages/ops-mcp/` (mirrored на host'е через mount).
#
# Lifecycle:
# - Managed manually через Portainer UI (как traefik + portainer — management plane exception
# из портейнер-rule, не deploy'ится из tenant CI pipeline).
# - Update image tag: Portainer → Stack → Edit compose → change image tag → Update.
# - Container names books-docker-proxy-ro + books-ops-mcp **сохраняются** —
# .claude.json использует `ssh vps-books docker exec -i books-ops-mcp ...`.
#
# Если нужно поднять второй MCP instance (per-tenant DB observability) — отдельный stack,
# отдельные container names (bookva-ops-mcp / slovo-ops-mcp), отдельный config volume.
services:
books-docker-proxy-ro:
container_name: books-docker-proxy-ro
image: tecnativa/docker-socket-proxy:0.3
restart: unless-stopped
environment:
# Только read-методы на /containers/* — list, inspect, logs, stats.
# POST=0 (default) — никаких prune/start/stop/rm. Все остальные
# ресурсы (images, build, volumes, networks, exec, system, info) — 0.
CONTAINERS: 1
POST: 0
IMAGES: 0
BUILD: 0
EXEC: 0
VOLUMES: 0
NETWORKS: 0
SERVICES: 0
SYSTEM: 0
INFO: 0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy
books-ops-mcp:
container_name: books-ops-mcp
image: registry.kzntsv.site/books-ops-mcp:master
restart: unless-stopped
depends_on:
- books-docker-proxy-ro
environment:
NODE_ENV: production
TZ: Europe/Moscow
DOCKER_HOST: tcp://books-docker-proxy-ro:2375
# MARIADB_PASSWORD = slovo's books-db ops_ro; BOOKVA_MARIADB_PASSWORD = bookva-db's
# (bookva-db = cp -a of books-db, ops_ro password идентичен; rotate отдельно).
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
BOOKVA_MARIADB_PASSWORD: ${BOOKVA_MARIADB_PASSWORD}
volumes:
# ВНИМАНИЕ: на VPS файл /opt/books/books-ops-mcp/config/default.json
# должен существовать ДО первого старта стека, иначе Docker создаст
# пустую directory вместо файла.
- /opt/books/books-ops-mcp/config/default.json:/usr/src/app/packages/ops-mcp/config/default.json
networks:
- proxy
# Контейнер всегда живой; реальный MCP запускается per-session через
# ssh + docker exec -i books-ops-mcp node lib/server.js. CMD = idle.
command: ["tail", "-f", "/dev/null"]
networks:
proxy:
external: true