Files
mono/docker-compose.yaml
coopops 071525f2a2
Typecheck / desktop (pull_request) Has been cancelled
Typecheck / controller (pull_request) Has been cancelled
[E12-2][@ant] feat(orchestrator): volume-кэш фронт-частей расширений — JWT-gated доставка вместо публичного каталога
install.js активного релиза качается с ca-admin при установке/обновлении
пакета (watcher-события подписки/релиза), проверяется по sha256
(заголовок ca-admin + независимая сверка с coopenomics.frontend.installSha256
из манифеста в ca-auth registry, fail-closed) и складывается в volume.
Endpoints /v1/internal/extensions/frontend{,/:scope/:name/install.js} —
источник для coopback-прокси (E12-3): desktop получает только фронты
реально установленных у кооператива пакетов.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 07:16:05 +00:00

178 lines
6.7 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.
# Имена контейнеров не задаём явно — docker генерит их с префиксом
# COMPOSE_PROJECT_NAME (см. .env). Это позволяет параллельный запуск нескольких
# инстансов mono-ai-N. Внутри сети контейнеры стучатся друг к другу по service name.
services:
node:
image: dicoop/blockchain:latest
ports:
- "${NODE_HTTP_PORT:-8888}:8888"
- "${NODE_P2P_PORT:-9876}:9876"
- "${NODE_HISTORY_PORT:-8070}:8070"
volumes:
- ./components/boot/blockchain-data:/mnt/dev/data
- ./components/boot/wallet-data:/root/eosio-wallet
- ./components/contracts/build/contracts:/contracts
- ./components/boot/src/configs:/mnt/dev/config
command: >
/bin/bash -c "/usr/local/bin/nodeos -d /mnt/dev/data --config-dir /mnt/dev/config --genesis-json /mnt/dev/config/genesis.json"
restart: unless-stopped
mongo:
image: mongo:latest
restart: always
volumes:
- mongo_data:/data/db
ports:
- "127.0.0.1:${MONGO_HOST_PORT:-27017}:27017"
# Локально гоняем mongo как standalone. Раньше был --replSet rs0 + rs.initiate
# в entrypoint, но проект не использует transactions / change streams /
# readConcern:'majority' — replica-set не нужен. Бонус: rs.initiate race
# на arm64 (sleep 5 не успевал, см. инцидент 2026-05-23) уходит.
command: ["mongod", "--bind_ip_all"]
monoredis:
image: redis:latest
restart: always
ports:
- "127.0.0.1:${REDIS_HOST_PORT:-6379}:6379"
postgres:
image: postgres:18
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres!23!23
POSTGRES_DB: voskhod
volumes:
- postgres_data:/var/lib/postgresql
ports:
- "127.0.0.1:${PG_HOST_PORT:-5532}:5432"
coopback:
build:
context: ./
dockerfile: components/controller/Dockerfile
image: coopback
env_file:
- ./components/controller/.env
restart: unless-stopped
# Пишем bind-mount ./:/app от хостового ant (uid 1000), иначе codegen
# (generate-client/schema, логи) кладёт root-owned файлы и ломает git checkout.
# HOME=/tmp — чтобы pnpm/кэш не сорили в репозиторий.
user: "1000:1000"
environment:
HOME: /tmp
volumes:
- ./:/app
ports:
- "0.0.0.0:${COOPBACK_HOST_PORT:-2998}:2998"
working_dir: /app
command: pnpm --filter @coopenomics/controller run dev
cooparser:
build:
context: ./
dockerfile: components/parser/Dockerfile
image: cooparser
env_file:
- ./components/parser/.env
restart: unless-stopped
# См. coopback: пишем от хостового ant (uid 1000), HOME=/tmp.
user: "1000:1000"
environment:
HOME: /tmp
volumes:
- ./:/app
working_dir: /app
command: pnpm --filter @coopenomics/parser run dev
desktop:
build:
context: ./
dockerfile: components/desktop/Dockerfile
image: desktop
env_file:
- ./components/desktop/.env
restart: unless-stopped
# См. coopback: пишем от хостового ant (uid 1000), HOME=/tmp.
user: "1000:1000"
environment:
HOME: /tmp
ports:
- "127.0.0.1:${DESKTOP_HOST_PORT:-2999}:2999"
volumes:
- ./:/app
working_dir: /app
command: pnpm --filter @coopenomics/desktop run dev
# Per-tenant Apollo Federation Gateway + install pipeline расширений (E10).
# Под профилем `federation`: обычный `docker compose up -d` его НЕ поднимает —
# нужен явный `docker compose --profile federation up -d orchestrator`.
# Доступ к docker daemon — через socket-mount; от root (socket требует прав).
orchestrator:
build:
context: ./
dockerfile: components/orchestrator/Dockerfile
image: orchestrator
profiles: ["federation"]
restart: unless-stopped
environment:
HOME: /tmp
GATEWAY_PORT: 4000
# Пароль postgres содержит `!` — в URL он закодирован как %21.
DATABASE_URL: ${ORCHESTRATOR_DATABASE_URL:-postgres://postgres:postgres%2123%2123@postgres:5432/voskhod}
CORE_SUBGRAPH_URL: ${CORE_SUBGRAPH_URL:-http://coopback:2998/v1/graphql}
COOPNAME: ${COOPNAME:-voskhod}
JWT_SECRET: ${JWT_SECRET:-secret}
COMPOSITION_POLL_INTERVAL_MS: ${COMPOSITION_POLL_INTERVAL_MS:-10000}
CA_AUTH_BASE_URL: ${CA_AUTH_BASE_URL:-http://ca-auth:3001}
COOPERATIVE_JWT: ${COOPERATIVE_JWT:-}
# On-chain watcher (auto-install по таблицам apps-контракта).
# Без CHAIN_RPC_URL watcher молчит (Noop); без COOPERATIVE_WIF
# auto-install отключён (install-spec берётся по signed-request).
CHAIN_RPC_URL: ${CHAIN_RPC_URL:-http://node:8888}
APPS_CONTRACT_ACCOUNT: ${APPS_CONTRACT_ACCOUNT:-apps}
WATCHER_POLL_INTERVAL_MS: ${WATCHER_POLL_INTERVAL_MS:-15000}
COOPERATIVE_WIF: ${COOPERATIVE_WIF:-}
EXTENSIONS_DOCKER_NETWORK: ${EXTENSIONS_DOCKER_NETWORK:-}
# E12-2: кэш фронт-частей. install.js активного релиза качается из
# ca-admin (admin API key контура — те же env-имена, что у coopback),
# сверяется по sha256 и складывается в volume; coopback раздаёт его
# desktop'у через JWT-gated proxy.
APPS_CATALOG_URL: ${APPS_CATALOG_URL:-}
APPS_CATALOG_API_KEY: ${APPS_CATALOG_API_KEY:-}
FRONTEND_CACHE_DIR: /var/orchestrator/frontend-cache
volumes:
- ./:/app
- /var/run/docker.sock:/var/run/docker.sock
- orchestrator_frontend_cache:/var/orchestrator/frontend-cache
ports:
- "127.0.0.1:${ORCHESTRATOR_HOST_PORT:-4000}:4000"
working_dir: /app
command: pnpm --filter @coopenomics/orchestrator run dev
minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
volumes:
- minio_data:/data
ports:
- "127.0.0.1:${MINIO_HOST_PORT:-9000}:9000"
- "127.0.0.1:${MINIO_CONSOLE_HOST_PORT:-9001}:9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 5s
timeout: 3s
retries: 10
volumes:
mongo_data:
postgres_data:
minio_data:
orchestrator_frontend_cache: