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>
This commit is contained in:
parent
5bebdfe9fc
commit
5f2be96e11
@ -2,6 +2,9 @@
|
||||
# Файл читают docker compose (из этого каталога) и, блоком ниже, сервисы при запуске из venv.
|
||||
|
||||
# --- Переменные docker-compose: учётные данные, порты хоста, бакет ---
|
||||
# Адрес привязки портов хоста: 127.0.0.1 — только эта машина; 0.0.0.0 — доступ с других машин (пароли по умолчанию dev)
|
||||
BIND_ADDR=127.0.0.1
|
||||
|
||||
# PostgreSQL 16 (схема dkb создаётся миграциями arm-core, не compose)
|
||||
POSTGRES_DB=armka
|
||||
POSTGRES_USER=armka
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
- Docker и compose v2 (проверено на docker 28 / compose 2.34).
|
||||
- `uv` и Python 3.11 — для запуска сервисов из venv (версия Python — как на платформе).
|
||||
- Свободные порты хоста: 5432 (PostgreSQL), 4222 и 8222 (NATS и его мониторинг), 9000 и 9001 (MinIO API и консоль).
|
||||
- Свободные порты хоста (по умолчанию доступны только с `127.0.0.1`, см. `BIND_ADDR`): 5432 (PostgreSQL), 4222 и 8222 (NATS и его мониторинг), 9000 и 9001 (MinIO API и консоль).
|
||||
Занятые порты меняются в `.env` (см. «Типичные проблемы»).
|
||||
|
||||
## Запуск инфраструктуры
|
||||
@ -36,10 +36,10 @@ docker compose up -d && docker compose up -d --wait postgres nats minio
|
||||
|
||||
```bash
|
||||
docker compose ps # postgres, nats, minio — Up (healthy); minio-init — Exited (0)
|
||||
docker compose exec postgres psql -U armka -d armka -c 'select version()'
|
||||
docker compose exec postgres sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "select version()"'
|
||||
curl -s localhost:8222/healthz # {"status":"ok"}
|
||||
curl -s localhost:8222/varz | grep -A1 jetstream # "jetstream": {} — JetStream не включён
|
||||
docker compose run --rm --entrypoint sh minio-init -c 'mc alias set local http://minio:9000 minioadmin minioadmin >/dev/null && mc ls local'
|
||||
docker compose run --rm --entrypoint sh minio-init -c 'mc alias set local http://minio:9000 "$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" >/dev/null && mc ls local'
|
||||
# [...] 0B arm-ka/
|
||||
```
|
||||
|
||||
@ -55,6 +55,7 @@ docker compose run --rm --entrypoint sh minio-init -c 'mc alias set local http:/
|
||||
|
||||
| Переменная | По умолчанию | Для чего |
|
||||
|---|---|---|
|
||||
| `BIND_ADDR` | `127.0.0.1` | адрес привязки всех портов хоста; `0.0.0.0` — доступ с других машин (небезопасно, см. «Примечания») |
|
||||
| `POSTGRES_DB` | `armka` | имя БД |
|
||||
| `POSTGRES_USER` | `armka` | пользователь БД |
|
||||
| `POSTGRES_PASSWORD` | `armka` | пароль БД |
|
||||
@ -160,7 +161,9 @@ postgres nats minio`, затем `make test-integration` (или `make check-ful
|
||||
только для dev. Решения R-5/R-6: [`design.md`](../openspec/changes/slice-0-skeleton/design.md), раздел
|
||||
«Decisions made without discussion», решения №16–17. Замена на официальные образы — две строки `image:` в
|
||||
`docker-compose.yml` (и удаление `user: "0:0"`).
|
||||
- **Безопасность.** Порты публикуются на `0.0.0.0` с паролями по умолчанию: это dev-окружение, не запускайте его в
|
||||
- **Безопасность.** По умолчанию порты публикуются только на `127.0.0.1` (`BIND_ADDR`), снаружи машины они недоступны.
|
||||
Чтобы открыть их для других машин, задайте в `.env` `BIND_ADDR=0.0.0.0` — но пароли по умолчанию (`armka`,
|
||||
`minioadmin`) годятся только для dev, поэтому сначала смените их (в обоих блоках `.env`) и не делайте этого в
|
||||
недоверенной сети.
|
||||
|
||||
## Типичные проблемы
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
# Ожидание готовности: 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).
|
||||
@ -16,11 +17,11 @@ services:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-armka}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-armka}
|
||||
ports:
|
||||
- "${POSTGRES_PORT:-5432}:5432"
|
||||
- "${BIND_ADDR:-127.0.0.1}:${POSTGRES_PORT:-5432}:5432"
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 3s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
@ -31,8 +32,8 @@ services:
|
||||
image: nats:2.10.29-alpine
|
||||
command: ["-m", "8222"]
|
||||
ports:
|
||||
- "${NATS_PORT:-4222}:4222"
|
||||
- "${NATS_MONITOR_PORT:-8222}:8222"
|
||||
- "${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
|
||||
@ -50,8 +51,8 @@ services:
|
||||
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"
|
||||
- "${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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user