tasks(books-ops-mcp-host-promote): 🟢 closed + host-stacks compose canonical
Stack 26 (books-ops-mcp) in-place PUT в host-level compose без container churn. Stack 43 (bookva-ops-mcp) deleted. 2 Gitea secrets revoked. New canonical: `host-stacks/books-vds/ops-mcp.compose.yml` (management-plane, manual Portainer updates как traefik/portainer). Design locks: location=.admin/host-stacks, deploy=manual Portainer, MariaDB scope=slovo's only (Option A), config path unchanged. Companion commits: `victor/books ae3ab14`, `victor/bookva-overlay 50f5bbb`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
67
host-stacks/books-vds/ops-mcp.compose.yml
Normal file
67
host-stacks/books-vds/ops-mcp.compose.yml
Normal file
@@ -0,0 +1,67 @@
|
||||
# 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 (current): slovo's books-db + slovo's Mongo (per ops-mcp/config/default.json).
|
||||
# Bookva-tenant DB observability через MCP — design call отложен (см. .tasks/books-ops-mcp-host-promote.md).
|
||||
#
|
||||
# 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: ${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
|
||||
Reference in New Issue
Block a user