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.
Server UI — Docker stack manager
Własny panel do zarządzania znanymi stackami compose na gmktec-k11. Zastępuje Dockge i Portainer. Zawiera przeglądarkę plików, panel GPU Fan (proxy do agenta na hoście) i zarządzanie stackami.
Dlaczego nie ma Server UI w docker ps?
docker ps pokazuje tylko kontenery Docker. Domyślna instalacja Server UI to systemd na hoście (server-ui.service na porcie 8091) — nie pojawi się na liście kontenerów. To normalne.
| Usługa | Runtime | W docker ps |
|---|---|---|
| ComfyUI, LocalAI, vLLM, NPMPlus | Docker compose | tak |
| Server UI (native) | systemd → /opt/server-ui |
nie |
| gpu-fan agent | systemd → /opt/gpu-fan |
nie |
Sprawdzenie: systemctl status server-ui lub docker compose --profile server-ui ps (tryb Docker).
Port
| Serwis | Port | URL |
|---|---|---|
| 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) |
Instalacja (zalecana — jeden skrypt)
cd ~/cursor/ubuntu-bare-metal/stacks/server-ui
sudo ./scripts/install-control-plane.sh
Menu:
- gpu-fan — tylko native (NVML na hoście; Docker nieobsługiwany)
- Server UI — native (systemd) lub Docker (kontener)
Flagi nieinteraktywne:
sudo ./scripts/install-control-plane.sh -y
sudo ./scripts/install-control-plane.sh --gpu-fan=yes --server-ui=docker
Tylko Server UI
| Tryb | Komenda |
|---|---|
| Native (systemd) | sudo ./scripts/install.sh |
| Docker | sudo ./scripts/install-docker.sh |
Klucze API po instalacji:
bash stacks/server-ui/scripts/show-api-key.sh
Tutorial klucza: ../../manual-tutorial/04a-api-key.md
Dev: stacks/control-plane/.env (szablon: stacks/control-plane/.env.example)
Tutorial: ../../manual-tutorial/08-server-ui-install.md · CLI: 10-server-ui-cli.md · Pliki: 09-file-explorer.md
Stacki (whitelist)
| Stack | Profil | Port UI | GPU |
|---|---|---|---|
| LocalAI | localai |
8070 | tak |
| ComfyUI | comfyui |
8188 | tak |
| vLLM | vllm |
8000 | tak |
| NPMPlus | npmplus |
81 (HTTPS) | nie |
Porty edytowalne w UI (zapis do stacks/<name>/.env). Szczegóły: ../../coding-agent/SERVER-UI-PORT-CONFIG.md
Update stacków
Przycisk Update na karcie stacka (Server UI → Stacki):
docker compose pull— pobiera najnowszy obraz (timeout do ~10 min).- Gdy stack działa —
up -d --force-recreate(krótka przerwa w usłudze). - 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)
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/ 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.
Bezpieczeństwo
- Odczyt statusu stacków/logów/GPU — bez klucza (LAN).
- 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.0klucz jest wymagany przy starcie usługi.
Tryb dev (z repo)
cp ../control-plane/.env.example ../control-plane/.env
./scripts/start.sh
Struktura
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
├── stacks.yaml
├── server-ui.service
├── static/index.html
├── 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
└── start.sh