diff --git a/dev/.env.example b/dev/.env.example index 2e4a7eb..446ee8a 100644 --- a/dev/.env.example +++ b/dev/.env.example @@ -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 diff --git a/dev/README.md b/dev/README.md index ccd4da4..5a507f0 100644 --- a/dev/README.md +++ b/dev/README.md @@ -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`) и не делайте этого в недоверенной сети. ## Типичные проблемы diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index 82b9c7a..7949922 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -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: