# Инфраструктура разработки АРМ КА: PostgreSQL 16, NATS 2.10 (без JetStream, как на платформе), MinIO + бакет. # Запуск: cp .env.example .env && docker compose up -d (из этого каталога) # Ожидание готовности: docker compose up -d --wait postgres nats minio. Голый `up -d --wait` возвращает код 1, потому что # одноразовый minio-init завершается (хотя и с кодом 0) — для скриптов указывайте сервисы явно. # Все учётные данные, порты хоста и имя бакета берутся из .env (значения по умолчанию — dev). # Профиль `services` (arm-core, tabular-parser, scan-gateway, scan-emulator) добавляется в фазе 2. # Фиксированное имя проекта: одинаковые тома и сети из любого worktree (.wt/<срез>/docs/dev). name: arm-ka services: postgres: image: postgres:16.10-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-armka} POSTGRES_USER: ${POSTGRES_USER:-armka} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-armka} ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 3s timeout: 3s retries: 20 start_period: 5s # Core NATS без JetStream: флаг --jetstream не передаётся. Мониторинг — порт 8222 (/varz, /healthz). nats: image: nats:2.10.29-alpine command: ["-m", "8222"] ports: - "${NATS_PORT:-4222}:4222" - "${NATS_MONITOR_PORT:-8222}:8222" healthcheck: test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:8222/healthz || exit 1"] interval: 3s timeout: 3s retries: 20 start_period: 2s # Образы minio/minio и minio/mc сняты с Docker Hub и quay.io; используется сборка alpine/minio с RELEASE-тегом. minio: image: alpine/minio:RELEASE.2025-10-15T17-29-55Z # Образ по умолчанию работает от пользователя minio и не может писать в свежий именованный том — в dev запускаем от root. user: "0:0" command: ["server", "/data", "--console-address", ":9001"] environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} ports: - "${MINIO_API_PORT:-9000}:9000" - "${MINIO_CONSOLE_PORT:-9001}:9001" volumes: - minio-data:/data healthcheck: test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:9000/minio/health/live || exit 1"] interval: 3s timeout: 3s retries: 20 start_period: 3s # Одноразовое создание бакета; идемпотентно (--ignore-existing), при повторном up снова завершается с кодом 0. minio-init: image: bitnamilegacy/minio-client:2025.7.21 depends_on: minio: condition: service_healthy restart: "no" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} MINIO_BUCKET: ${MINIO_BUCKET:-arm-ka} entrypoint: ["/bin/sh", "-c"] command: - >- mc alias set local http://minio:9000 "$$MINIO_ROOT_USER" "$$MINIO_ROOT_PASSWORD" && mc mb --ignore-existing "local/$$MINIO_BUCKET" volumes: postgres-data: minio-data: