sched: custom single-binary (embedded engine+admin api+morda+mcp+maria) — artifacts in .admin; compose on sched-custom

This commit is contained in:
2026-08-28 00:45:10 +03:00
parent 3872208a92
commit 9b5cb390a7
4 changed files with 143 additions and 19 deletions

View File

@@ -25,10 +25,10 @@ updated: 2026-08-27
|---|---|
| Хост | VDS kzntsv `89.253.255.94` |
| Стек Portainer | **Id 28**, name `sched`, endpointId **1** |
| Образ | `registry.kzntsv.site/sched-daemon:0.12.1-mysql` |
| Образ | `registry.kzntsv.site/sched-custom:0.12.1-mysql` (custom single-binary)
| Compose source-of-truth | `admin/host-stacks/vds-kzntsv/sched.compose.yml` |
| tasks.json source-of-truth | `admin/host-stacks/vds-kzntsv/sched.tasks.json` → VDS `/opt/stacks/sched/tasks.json` |
| Даемон | published `@schedjs/daemon@0.12.1` + `@schedjs/storage-mysql@0.4.0` |
| Даемон | published `@schedjs/daemon@0.12.1` + `@schedjs/storage-mysql@0.4.0` + `@schedjs/admin-api@0.3.0` + `@schedjs/mcp@0.4.1` + `@schedjs/ui@0.3.0` |
| БД | MariaDB `mariadb:3306` (сеть `shared-dbs`), база `sched`, роль `sched@%`. Креды: `pass sched/mysql` |
| Admin API | `https://sched.vds.kzntsv.site` (traefik websecure, letsEncrypt). `SCHED_ADMIN_KEY` = `pass sched/admin-key` |
| mem_limit | `512m` (канон app-стеков) |
@@ -62,7 +62,14 @@ docker exec mariadb mariadb -uroot -p"$ROOT_PW" -e "
```
Креды → `pass insert -m sched/mysql` (user/pass/db/host).
**1. Образ** — собрать (см. выше) → `docker login registry.kzntsv.site -u vitya` `docker push`. (внешний registry, публичный npm, BuildKit-секрет не нужен).
**1. Образ (custom single-binary).** `apps/daemon/Dockerfile.custom` собирает один образ с опубликованными `@schedjs/{daemon,storage-mysql,admin-api,mcp,ui}` + `custom-entry.mjs` — один HTTP-сервер на `:8080`:
- `/api/*` → админ API (health open, остальное Bearer `SCHED_ADMIN_KEY`)
- `/mcp` → Streamable HTTP MCP (projection of admin API, `SCHED_MCP_READONLY=1` read-only)
- `/` → UI morda (web-components)
- `/sched-ui.bundle.js` → статический UI-бандл
Сборка: `docker build -f apps/daemon/Dockerfile.custom -t registry.kzntsv.site/sched-custom:0.12.1-mysql apps/daemon`.
→ ЕДИНЫЙ бинарь: даемон + UI-морда + MCP не плодит отдельные контейнеры (обратная связь vitya).
`createDaemon` даёт `engine`+`storage` (admin server НЕ bind — маршрутизация своя). MCP/морда импортируются по **file-URL** (subpath-импорты заблокированы npm `exports`-маской).
**2. tasks.json.** Ядро стартует с `{"tasks":[]}` (воркеры — отдельными тасками). Закинуть на VDS:
```bash