Add stack Update, ComfyUI model manager, and slim ComfyUI stack.

Server UI gains Update on stack cards, ComfyUI Models tab with workflow
scan and downloads, and centralized comfyui_config. Model catalog and
download scripts move from stacks/comfyui to server-ui so ComfyUI stays a
minimal Docker wrapper for easier image updates.
This commit is contained in:
tomasz-syn-grzegorza
2026-07-05 18:45:17 +00:00
parent 359afb3a59
commit 73e4fc005e
33 changed files with 3604 additions and 307 deletions
+50 -1
View File
@@ -21,6 +21,7 @@ Sprawdzenie: `systemctl status server-ui` lub `docker compose --profile server-u
| Server UI | **8091** | `http://HOST:8091` |
| CLI (zakładka) | — | ten sam URL, zakładka **CLI** lub `#cli` |
| Pliki (zakładka) | — | ten sam URL, zakładka **Pliki** lub `#files` |
| ComfyUI Modele (zakładka) | — | ten sam URL, zakładka **ComfyUI Modele** lub `#comfyui-models` |
| GPU Fan (zakładka) | — | ten sam URL, zakładka **GPU Fan** |
| gpu-fan agent API | **18090** | tylko localhost (proxy z Server UI) |
@@ -70,10 +71,51 @@ Tutorial: [`../../manual-tutorial/08-server-ui-install.md`](../../manual-tutoria
Porty edytowalne w UI (zapis do `stacks/<name>/.env`). Szczegóły: [`../../coding-agent/SERVER-UI-PORT-CONFIG.md`](../../coding-agent/SERVER-UI-PORT-CONFIG.md)
## Update stacków
Przycisk **Update** na karcie stacka (Server UI → Stacki):
1. `docker compose pull` — pobiera najnowszy obraz (timeout do ~10 min).
2. Gdy stack **działa**`up -d --force-recreate` (krótka przerwa w usłudze).
3. Gdy stack **zatrzymany** — tylko pull; uruchom **Start**, aby użyć nowej wersji.
Dane użytkownika są na dysku hosta (`/data/apps/*`) i **nie znikają** przy rebuildzie kontenera:
| Stack | Katalogi danych |
|-------|-----------------|
| LocalAI | `/data/apps/localai/{models,backends,configuration,images,data}` |
| ComfyUI | `/data/apps/comfyui/{models,workflows,custom_nodes,input,output,cache,storage}` |
| vLLM | `/data/apps/vllm/huggingface` (cache Hugging Face) |
| NPMPlus | `/data/apps/npmplus` |
CLI (pull bez startu): `./scripts/pull.sh` w katalogu danego stacka.
### Wdrożenie zmian Server UI (prod)
```bash
rsync -a --delete --exclude '.venv' --exclude '.env' --exclude '__pycache__' \
~/cursor/ubuntu-bare-metal/stacks/server-ui/ /opt/server-ui/
sudo systemctl restart server-ui
```
## ComfyUI integracja
Logika katalogu modeli, pobierania i skanu workflow jest w **Server UI**, nie w stacku ComfyUI. Stack [`../comfyui/`](../comfyui/) to tylko Docker (compose + start/pull).
| Plik | Rola |
|------|------|
| `comfyui-models.catalog.yaml` | Kuratorowana lista modeli (sekcja „Katalog repo”) |
| `comfyui_models.py` | API + joby pobierania |
| `workflow_scanner.py` | Skan workflow JSON |
| `scripts/comfyui/*.sh` | CLI pobierania (używane też przez backend) |
Po update obrazu ComfyUI: checklist w [`../comfyui/README.md`](../comfyui/README.md#checklist-po-update-obrazu).
## Bezpieczeństwo
- Odczyt statusu stacków/logów/GPU — bez klucza (LAN).
- **Start / Stop / Restart** stacków, **GPU Fan**, **Pliki** (CRUD) i **CLI** — nagłówek `X-API-Key` (CLI: klucz w query WebSocket `?api_key=`).
- **Start / Stop / Restart / Update** stacków, **GPU Fan**, **Pliki** (CRUD), **ComfyUI Modele** (pobieranie, anulowanie, usuwanie) i **CLI** — nagłówek `X-API-Key` (CLI: klucz w query WebSocket `?api_key=`).
- Przy `SERVER_UI_HOST=0.0.0.0` klucz jest **wymagany** przy starcie usługi.
## Tryb dev (z repo)
@@ -88,6 +130,9 @@ cp ../control-plane/.env.example ../control-plane/.env
```
stacks/server-ui/
├── app.py
├── comfyui_config.py # stałe ścieżek ComfyUI (container, mounty)
├── comfyui_models.py
├── comfyui-models.catalog.yaml
├── Dockerfile
├── docker-compose.yml
├── compose_runner.py
@@ -97,6 +142,10 @@ stacks/server-ui/
├── static/vendor/xterm/ # xterm.js dla zakładki CLI
├── cli_pty.py
└── scripts/
├── comfyui/ # pobieranie modeli (CLI + backend Server UI)
│ ├── download-model.sh
│ ├── download-file.sh
│ └── list-models.sh
├── install-control-plane.sh # gpu-fan + server-ui (menu)
├── install.sh # native only
├── install-docker.sh # docker only