From afa53d59c1453440d378d939ea9f636febb7d8c5 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 4 May 2026 10:31:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=A0=D0=A5=20-=20NODEDC=20PLATFORM:=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D0=BB=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20proxy/Authentik=20=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/DEPLOYMENT_LOCAL.md | 15 +++++++++++++++ infra/.env.example | 1 + infra/README.md | 23 +++++++++++++++++++++++ infra/docker-compose.dev.yml | 2 +- infra/reverse-proxy/Caddyfile | 2 +- infra/scripts/init-dev-env.sh | 1 + 6 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/DEPLOYMENT_LOCAL.md b/docs/DEPLOYMENT_LOCAL.md index 5b68182..726f7a6 100644 --- a/docs/DEPLOYMENT_LOCAL.md +++ b/docs/DEPLOYMENT_LOCAL.md @@ -14,6 +14,8 @@ 127.0.0.1 dm.local.nodedc ``` +На macOS изменение `/etc/hosts` требует admin password. Если агент не может выполнить `sudo`, эти строки нужно добавить вручную. + ## Current local apps Launcher сейчас запускается как Vite app из: @@ -54,6 +56,8 @@ task.local.nodedc -> Plane proxy/runtime На этом этапе reverse proxy реализуется через Caddy, а Authentik запускается за ним без прямой публикации host ports. +Для текущей локальной машины proxy image задан как `nodedc/plane-proxy:ru`: это уже существующий Caddy-based image из Plane-стенда. На чистой машине можно заменить `PLATFORM_PROXY_IMAGE` на `caddy:2-alpine`. + Текущие приложения подключаются как внешние upstream: ```text @@ -98,9 +102,20 @@ docker compose --env-file infra/.env -f infra/docker-compose.dev.yml up -d ```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/ ``` +Текущая локальная проверка: + +```text +auth.local.nodedc -> 302 Authentik authentication flow +launcher.local.nodedc -> 200 Launcher/Vite HTML +task.local.nodedc -> 200 Plane HTML +``` + +Эти проверки выполнены через `curl` с `Host` header. Для проверки в браузере нужны записи в `/etc/hosts`. + ## Authentik version note Официальный compose Authentik для текущей ветки 2026.2 использует PostgreSQL, `server` и `worker`. Redis, указанный в раннем ТЗ как ожидаемый сервис, в актуальном официальном compose не используется. Если позже будет выбран старый pinned Authentik или отдельная HA-схема, Redis надо вернуть отдельной задачей. diff --git a/infra/.env.example b/infra/.env.example index 131a4b7..17128d3 100644 --- a/infra/.env.example +++ b/infra/.env.example @@ -5,6 +5,7 @@ TASK_DOMAIN=task.local.nodedc # proxy PLATFORM_HTTP_PORT=80 +PLATFORM_PROXY_IMAGE=nodedc/plane-proxy:ru LOCAL_LAUNCHER_UPSTREAM=host.docker.internal:5173 LOCAL_TASK_MANAGER_UPSTREAM=host.docker.internal:8090 diff --git a/infra/README.md b/infra/README.md index 4566a75..cdbc77b 100644 --- a/infra/README.md +++ b/infra/README.md @@ -16,6 +16,8 @@ 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 @@ -38,6 +40,8 @@ infra/ 127.0.0.1 task.local.nodedc ``` +This requires admin rights on macOS. + 2. Generate local secrets: ```bash @@ -59,6 +63,25 @@ curl -I -H 'Host: auth.local.nodedc' http://127.0.0.1/ Generated Authentik bootstrap credentials are stored only 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. + +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 и отдельного шага миграции. diff --git a/infra/docker-compose.dev.yml b/infra/docker-compose.dev.yml index dbf7ac7..e7aa06f 100644 --- a/infra/docker-compose.dev.yml +++ b/infra/docker-compose.dev.yml @@ -2,7 +2,7 @@ name: nodedc-platform services: reverse-proxy: - image: docker.io/library/caddy:2-alpine + image: ${PLATFORM_PROXY_IMAGE:-nodedc/plane-proxy:ru} restart: unless-stopped env_file: - path: .env diff --git a/infra/reverse-proxy/Caddyfile b/infra/reverse-proxy/Caddyfile index aa897c3..d1f9994 100644 --- a/infra/reverse-proxy/Caddyfile +++ b/infra/reverse-proxy/Caddyfile @@ -12,7 +12,7 @@ http://{$AUTH_DOMAIN:auth.local.nodedc} { http://{$LAUNCHER_DOMAIN:launcher.local.nodedc} { reverse_proxy {$LOCAL_LAUNCHER_UPSTREAM:host.docker.internal:5173} { - header_up Host {host} + header_up Host localhost:5173 header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote_host} } diff --git a/infra/scripts/init-dev-env.sh b/infra/scripts/init-dev-env.sh index acb8865..686d09a 100755 --- a/infra/scripts/init-dev-env.sh +++ b/infra/scripts/init-dev-env.sh @@ -22,6 +22,7 @@ TASK_DOMAIN=task.local.nodedc # proxy PLATFORM_HTTP_PORT=80 +PLATFORM_PROXY_IMAGE=nodedc/plane-proxy:ru LOCAL_LAUNCHER_UPSTREAM=host.docker.internal:5173 LOCAL_TASK_MANAGER_UPSTREAM=host.docker.internal:8090