Files
admin/host-stacks/books-vds/ops-mcp.compose.yml
vitya 10e80dc036 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>
2026-05-26 14:04:15 +03:00

68 lines
2.9 KiB
YAML
Raw 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 (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