071525f2a2
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>
178 lines
6.7 KiB
YAML
178 lines
6.7 KiB
YAML
# Имена контейнеров не задаём явно — 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:
|