NODEDC_PLATFORM/infra/synology
Codex 197a184587 chore: align launcher upload storage mount 2026-05-15 22:59:42 +03:00
..
tasker-overlays/logo-link-brand-hotfix OPS - TASKER: capture editable logo link overlay 2026-05-14 16:25:20 +03:00
.env.synology.example FIX - PLATFORM DEPLOY: capture Synology real-domain baseline 2026-05-14 14:27:56 +03:00
Caddyfile.http FIX - PLATFORM DEPLOY: capture Synology real-domain baseline 2026-05-14 14:27:56 +03:00
README.md chore: align launcher upload storage mount 2026-05-15 22:59:42 +03:00
backup-current.sh OPS - DEPLOY: wire Ops Agents Gateway into Synology runbooks 2026-05-15 10:21:16 +03:00
deploy-current.sh chore: align launcher upload storage mount 2026-05-15 22:59:42 +03:00
docker-compose.platform-http.yml chore: align launcher upload storage mount 2026-05-15 22:59:42 +03:00

README.md

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 и не используются.

Текущие внешние домены

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:

172.22.0.222 auth.nas.nodedc
172.22.0.222 launcher.nas.nodedc
172.22.0.222 task.nas.nodedc

Первичные URL:

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:

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. Использовать его только осознанно:

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:

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 /volume1/docker/nodedc-platform/backups/platform-current-YYYYMMDD-HHMMSS/run-authentik-db-dump-on-synology.sh

Если планируются изменения Tasker backend/schema, дополнительно выполнить:

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 /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-папок:

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

Проверка внутри контейнера:

sudo /usr/local/bin/docker exec nodedc-platform-launcher-1 sh -lc \
  'touch /app/server/storage/.write-test /app/server/storage/uploads/.write-test && rm /app/server/storage/.write-test /app/server/storage/uploads/.write-test && echo storage-ok'

Проверки после деплоя

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.