122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
# 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` на `127.0.0.1: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 \
|
||
./infra/synology/deploy-current.sh
|
||
```
|
||
|
||
Скрипт не запускает Docker сам: на NAS `sudo` интерактивный, поэтому команды применения печатаются в конце.
|
||
|
||
## 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
|
||
```
|
||
|
||
## Что нужно перед запуском
|
||
|
||
- Собрать или загрузить `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`.
|