Files
mono/docker-compose.yaml
T
claude 1a6f326aa4 chore(infra): mongo standalone локально, без --replSet rs0
Локально гоняем mongo как standalone. Раньше был --replSet rs0 +
rs.initiate в entrypoint, но проект не использует ни transactions
(нет startSession), ни change streams (нет .watch()), ни
readConcern:'majority' — replica-set серверно избыточен. Клиенты
(mongoose в controller, MongoClient в parser, notifications) уже
подключаются по URL без replicaSet=/directConnection= параметров,
для них переход прозрачен.

Бонусы:
- pnpm run reboot больше не висит на «MongoDB еще не готов
  (нет PRIMARY)»: на arm64 sleep 5 в entrypoint не успевал поднять
  mongod до того, как rs.initiate пытался выполниться, и rs.status()
  внутри try/catch ловил неправильную ошибку — replica config не
  применялся, oplog.rs не создавался, PRIMARY никогда не наступал
  (инцидент 2026-05-23).
- Старт mongo на 5-10 сек быстрее.
- Меньше состояния в volume — нет oplog/replica-config.

reboot.sh: ждать db.adminCommand({ping:1}) вместо db.hello().isWritablePrimary.

Прод-конфигурация (k8s/swarm) этого файла не использует — там
своя replica-схема для HA, не затронута.

Если в будущем потребуются transactions — вернуть --replSet rs0
+ rs.initiate в entrypoint обратно. Триггер: появление в коде
session = await mongoose.startSession() или .watch().

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 10:16:25 +05:00

130 lines
3.9 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
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
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
ports:
- "127.0.0.1:${DESKTOP_HOST_PORT:-2999}:2999"
volumes:
- ./:/app
working_dir: /app
command: pnpm --filter @coopenomics/desktop run dev
opensearch:
image: opensearchproject/opensearch:2.18.0
environment:
- discovery.type=single-node
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=CoopSearch_2024!Secure
- OPENSEARCH_JAVA_OPTS=-Xms256m -Xmx256m
volumes:
- opensearch_data:/usr/share/opensearch/data
ports:
- "127.0.0.1:${OPENSEARCH_HOST_PORT:-9200}:9200"
restart: unless-stopped
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:
opensearch_data:
minio_data: