# NODE.DC Synology deploy Эта папка фиксирует текущий воспроизводимый NAS-deploy для `nodedc-platform` на Synology RS1221RP+. ## Правила - Не выполнять `docker stop`, `docker restart`, `docker compose down`, `docker system prune` для старых проектов. - Новый compose project: `nodedc-platform`. - Новая папка на NAS: `/volume1/docker/nodedc-platform`. - Внутренний HTTP edge использует `18080`, Tasker upstream — `18090`, Ops Agents Gateway upstream — `18190`. - Старые порты `9000` и `5678` заняты старым `nodedc-demo` и не используются. ## Текущие внешние домены ```text https://id.nodedc.ru -> Authentik https://hub.nodedc.ru -> Launcher / Hub https://ops.nodedc.ru -> Tasker / Operational Core https://ops-agents.nodedc.ru -> Ops Agents Gateway / MCP ``` В `Caddyfile.http` эти домены проксируются через локальный HTTP edge, но upstream получает `X-Forwarded-Proto: https` и `X-Forwarded-Port: 443`. ## Локальные домены для первичной проверки На Mac для первичной проверки добавить в `/etc/hosts`: ```text 172.22.0.222 auth.nas.nodedc 172.22.0.222 launcher.nas.nodedc 172.22.0.222 task.nas.nodedc ``` Первичные URL: ```text http://auth.nas.nodedc:18080 http://launcher.nas.nodedc:18080 http://task.nas.nodedc:18080 http://task.nas.nodedc:18090 ``` ## Что входит - `docker-compose.platform-http.yml` поднимает новый Authentik, Launcher и Caddy edge. - `Caddyfile.http` маршрутизирует локальные `auth/launcher/task.nas.nodedc` и внешние `id/hub/ops.nodedc.ru`. - `deploy-current.sh` синхронизирует compose, Caddyfile, Authentik templates и опционально Launcher source в NAS mount. - `backup-current.sh` делает snapshot Launcher runtime/uploads/Auth templates/config и готовит команду `pg_dump` для Authentik Postgres. - Tasker поднимается отдельным compose из `NODEDC_TASKMANAGER/plane-app/docker-compose.yaml` на порту `18090`. - Ops Agents Gateway поднимается отдельным compose из `NODEDC_TASKMANAGER_CODEXAPI/docker-compose.synology.yml` на `172.22.0.222:18190`; Synology reverse proxy должен вести `ops-agents.nodedc.ru` на этот порт, а не на `18090`. ## Синхронизация текущего состояния С Mac, при смонтированном `/Volumes/docker`: ```bash cd /Users/dcconstructions/Downloads/mnt/NODEDC/platform NAS_ROOT=/Volumes/docker/nodedc-platform \ LAUNCHER_REPO=/Users/dcconstructions/Downloads/mnt/data/nodedc_launcher \ TASKER_REPO=/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER \ TASKER_CHANGED_BASE=533f8c6 \ GATEWAY_REPO=/Users/dcconstructions/Downloads/mnt/data/NODEDC_TASKMANAGER_CODEXAPI \ ./infra/synology/deploy-current.sh ``` Скрипт не запускает Docker сам: на NAS `sudo` интерактивный, поэтому команды применения печатаются в конце. Что синхронизируется: - Platform compose/Caddy/Auth templates. - Launcher source в `/volume1/docker/nodedc-platform/launcher/source`. - Tasker `plane-app/docker-compose.yaml` и, если задан `TASKER_CHANGED_BASE`, только изменённые source-файлы из диапазона `TASKER_CHANGED_BASE..HEAD`. - Ops Agents Gateway source в `/volume1/docker/nodedc-platform/ops-agents`. Полный sync Tasker source по SMB тяжёлый для Plane fork. Использовать его только осознанно: ```bash TASKER_SYNC_SOURCE=1 ./infra/synology/deploy-current.sh ``` Секретные runtime env-файлы не перетираются: - `/volume1/docker/nodedc-platform/platform/.env.synology` - `/volume1/docker/nodedc-platform/tasker/plane-app/.env.synology` - `/volume1/docker/nodedc-platform/ops-agents/.env` ## Backup текущего состояния С Mac, при смонтированном `/Volumes/docker`: ```bash cd /Users/dcconstructions/Downloads/mnt/NODEDC/platform NAS_ROOT=/Volumes/docker/nodedc-platform ./infra/synology/backup-current.sh ``` Файловый backup создаётся в `/Volumes/docker/nodedc-platform/backups/platform-current-*`. Для Authentik Postgres dump нужно выполнить напечатанную команду на Synology, потому что Docker доступен через интерактивный `sudo`: ```bash bash /volume1/docker/nodedc-platform/backups/platform-current-YYYYMMDD-HHMMSS/run-authentik-db-dump-on-synology.sh ``` Если планируются изменения Tasker backend/schema, дополнительно выполнить: ```bash bash /volume1/docker/nodedc-platform/backups/platform-current-YYYYMMDD-HHMMSS/run-tasker-db-dump-on-synology.sh ``` Если Ops Agents Gateway уже был запущен и там есть production tokens/grants/audit, дополнительно выполнить: ```bash bash /volume1/docker/nodedc-platform/backups/platform-current-YYYYMMDD-HHMMSS/run-ops-agents-db-dump-on-synology.sh ``` ## Что нужно перед запуском - Собрать или загрузить `linux/amd64` images: - `nodedc/launcher:local` - `nodedc/plane-frontend:ru` - `nodedc/plane-admin:ru` - `nodedc/plane-space:ru` - `nodedc/plane-live:local` - `nodedc/plane-backend:local` - `nodedc/plane-proxy:ru` - Для Ops Agents Gateway отдельный registry image пока не обязателен: deploy из source repo выполняется через `docker compose --env-file .env -f docker-compose.synology.yml up -d --build`. - Создать `.env.synology` из `.env.synology.example` и заменить все `replace-with-*`. - Создать `plane.env.synology` для Tasker из `plane.env.staging.example`, но с HTTP URL на `*.nas.nodedc:18080` и портами `18090/18490`. ## Обязательные runtime-права Launcher пишет runtime snapshot и uploads под пользователем `node` (`uid=1000`). После создания NAS-папок: ```bash cd /volume1/docker/nodedc-platform/platform sudo mkdir -p ../launcher/server-storage ../launcher/uploads sudo chown -R 1000:1000 ../launcher/server-storage ../launcher/uploads sudo chmod -R u+rwX,g+rwX ../launcher/server-storage ../launcher/uploads ``` Проверка внутри контейнера: ```bash sudo /usr/local/bin/docker exec nodedc-platform-launcher-1 sh -lc \ 'touch /app/server/storage/.write-test && rm /app/server/storage/.write-test && echo storage-ok' ``` ## Проверки после деплоя ```bash curl -k -sS --compressed https://id.nodedc.ru/if/flow/default-authentication-flow/ \ | grep -aE 'hub.nodedc.ru|launcher.local|getLauncherBaseUrl|Запросить доступ' ``` В выводе должны быть `id.nodedc.ru -> hub.nodedc.ru` и не должно быть `launcher.local`.