arm-ka-docs/dev/docker-compose.yml
Andrey Epifancev 5f2be96e11 fix(dev): healthcheck PostgreSQL по TCP, порты на 127.0.0.1, пароли MinIO из .env в README
- pg_isready с -h 127.0.0.1: временный сервер initdb слушает только сокет (M-3)
- README: mc и psql берут учётные данные из переменных окружения контейнера, а не зашитые значения (M-4)
- порты postgres/nats/minio публикуются на ${BIND_ADDR:-127.0.0.1}; BIND_ADDR добавлен в .env.example и README,
  примечание про безопасность обновлено (M-6, R-9)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:59:56 +04:00

85 lines
3.9 KiB
YAML
Raw 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.

# Инфраструктура разработки АРМ КА: 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).
# Порты публикуются только на 127.0.0.1; адрес привязки меняется через BIND_ADDR (см. .env.example).
# Профиль `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:
- "${BIND_ADDR:-127.0.0.1}:${POSTGRES_PORT:-5432}:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -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:
- "${BIND_ADDR:-127.0.0.1}:${NATS_PORT:-4222}:4222"
- "${BIND_ADDR:-127.0.0.1}:${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:
- "${BIND_ADDR:-127.0.0.1}:${MINIO_API_PORT:-9000}:9000"
- "${BIND_ADDR:-127.0.0.1}:${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: