1a6f326aa4
Локально гоняем 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>
130 lines
3.9 KiB
YAML
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:
|