- 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>
85 lines
3.9 KiB
YAML
85 lines
3.9 KiB
YAML
# Инфраструктура разработки АРМ КА: 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:
|