# NODE.DC Platform Infra Эта папка предназначена для локального и staging infra слоя: - Authentik; - reverse proxy; - локальные домены; - shared env examples; - Map Gateway с persistent TileCache; - будущие docker compose файлы. Первый local dev слой проксирует текущие локальные приложения без физического переноса репозиториев: - `auth.local.nodedc` -> `authentik-server:9000`; - `launcher.local.nodedc` -> `host.docker.internal:5173`; - `task.local.nodedc` -> `host.docker.internal:8090`. Authentik построен по актуальной официальной Docker Compose схеме 2026.2: PostgreSQL 16, server и worker. Redis для Authentik в этой версии официального compose не используется. Reverse proxy использует `PLATFORM_PROXY_IMAGE=nodedc/plane-proxy:ru`, потому что этот локальный образ уже содержит Caddy и не требует отдельного pull с Docker Hub. На чистой машине можно заменить значение на `caddy:2-alpine`. ## Expected files ```text infra/ .env.example scripts/init-dev-env.sh docker-compose.dev.yml docker-compose.staging.yml reverse-proxy/ authentik/ ``` ## Local start 0. Check the local testing contract: ```bash cd /Users/dcconstructions/Downloads/mnt/NODEDC/platform sh infra/scripts/check-local-test-system.sh ``` The local testing canon is documented in `docs/LOCAL_TESTING_SYSTEM.md`. It keeps product apps local and allows the deployed AI Hub only as a remote Codex worker relay. 1. Add local domains to `/etc/hosts`: ```text 127.0.0.1 auth.local.nodedc 127.0.0.1 launcher.local.nodedc 127.0.0.1 task.local.nodedc ``` This requires admin rights on macOS. 2. Generate local secrets: ```bash ./infra/scripts/init-dev-env.sh ``` 3. Start infra: ```bash docker compose --env-file infra/.env -f infra/docker-compose.dev.yml up -d ``` 4. Check services: ```bash docker compose --env-file infra/.env -f infra/docker-compose.dev.yml ps curl -I -H 'Host: auth.local.nodedc' http://127.0.0.1/ curl -I -H 'Host: launcher.local.nodedc' http://127.0.0.1/ curl -I -H 'Host: task.local.nodedc' http://127.0.0.1/ curl http://127.0.0.1:18103/healthz ``` Generated Authentik bootstrap credentials are stored only in `infra/.env`. ## Map Gateway и offline TileCache `map-gateway` добавлен как общий платформенный сервис на `127.0.0.1:18103`. Его mutable live-cache монтируется как внешний named Docker volume `nodedc-platform_map-live-tile-cache`; offline snapshot — как `nodedc-platform_map-offline-snapshot`. Они не пишутся в `platform/`, не попадают в Git и не включаются в Docker image. Оба тома намеренно объявлены `external`: `docker compose down -v` не должен уничтожать уже записанные тайлы. На чистой машине они создаются один раз до первого запуска: ```bash docker volume create nodedc-platform_map-live-tile-cache docker volume create nodedc-platform_map-offline-snapshot ``` Очистка кэша — только осознанной командой `docker volume rm nodedc-platform_map-live-tile-cache` при остановленном Gateway. Для реального ion terrain/buildings положите `CESIUM_ION_TOKEN` только в неотслеживаемый `infra/.env` или deployment secret. Studio получает asset-scoped endpoint token, а master token остаётся внутри Gateway. Детали API, cache modes и production access boundary описаны в `services/map-gateway/README.md`. 5. Bootstrap local Authentik groups and OIDC applications: ```bash NODEDC_BOOTSTRAP_ADMIN_EMAIL=dcctouch@gmail.com infra/scripts/bootstrap-authentik-dev.sh ``` The script is idempotent. It creates NODE.DC groups, Launcher and Task Manager OAuth2 providers, application tiles, group access bindings and local OIDC client secrets in `infra/.env`. ## Current local status This stack was verified locally with `PLATFORM_PROXY_IMAGE=nodedc/plane-proxy:ru`: - `auth.local.nodedc` returns `302` to the Authentik authentication flow through Caddy; - `launcher.local.nodedc` returns `200` from the current Vite launcher through Caddy; - `task.local.nodedc` returns `200` from the current Plane runtime through Caddy; - Authentik server, Authentik worker and PostgreSQL report healthy in Docker Compose. - Authentik login via `auth.local.nodedc` has been verified manually with the local admin user. Browser testing still requires `/etc/hosts` entries on the host machine. ## Troubleshooting If Docker Hub pulls hang on `caddy:2-alpine`, keep `PLATFORM_PROXY_IMAGE=nodedc/plane-proxy:ru` on this workstation. If the local Plane proxy image is unavailable on a clean machine, set: ```bash PLATFORM_PROXY_IMAGE=caddy:2-alpine ``` ## Current decision Текущий Plane runtime не переносится в compose платформы до backup и отдельного шага миграции.