Initial import: bare-metal stacks, Server UI, GPU fan, tutorials.

Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI,
control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
tomasz-syn-grzegorza
2026-07-05 12:02:04 +00:00
commit 359afb3a59
153 changed files with 18169 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
# Data disk mount point
DATA_ROOT=/data
# ComfyUI web UI (default ComfyUI port)
COMFYUI_PORT=8188
# yanwk/comfyui-boot — CUDA 12.6 slim (GPU in container)
COMFYUI_IMAGE=yanwk/comfyui-boot:cu126-slim
# Use only the discrete NVIDIA GPU
CUDA_VISIBLE_DEVICES=0
# Extra CLI args passed to ComfyUI (e.g. --fast)
CLI_ARGS=
+1
View File
@@ -0,0 +1 @@
.env
+134
View File
@@ -0,0 +1,134 @@
# ComfyUI stack
[ComfyUI](https://github.com/comfyanonymous/ComfyUI) — grafowy interfejs do generowania obrazów (Stable Diffusion, Flux, …). Stack oparty na obrazie [`yanwk/comfyui-boot`](https://github.com/YanWenKun/ComfyUI-Docker).
Zamiast [Stability Matrix](https://github.com/LykosAI/StabilityMatrix) (GUI desktop) używamy ComfyUI w Dockerze — zgodnie z filozofią headless serwera i tutoriala [03b](../../manual-tutorial/03b-system-tools.md).
## Porty
| Serwis | Port | URL |
|--------|------|-----|
| ComfyUI web UI | **8188** | `http://HOST:8188` |
| LocalAI (osobny stack) | 8070 | LLM / chat — **nie równolegle z dużym modelem SD** |
## Jak to działa
```mermaid
flowchart LR
browser["Przeglądarka :8188"]
comfyui["Kontener comfyui"]
gpu["RTX 3090 Ti"]
models["/data/apps/comfyui/models"]
browser --> comfyui
comfyui --> gpu
comfyui --> models
```
| Element | Opis |
|---------|------|
| Obraz | `yanwk/comfyui-boot:cu126-slim` |
| Konfiguracja | `.env` + `docker-compose.yml` |
| Modele | `/data/apps/comfyui/models` (puste na start — pobierz ręcznie lub przez ComfyUI-Manager) |
| Pierwszy start | Kopiuje ComfyUI do `/data/apps/comfyui/storage/` (~kilka minut) |
## Struktura
```
stacks/comfyui/
├── README.md
├── docker-compose.yml
├── .env.example
├── .gitignore
└── scripts/
├── ensure-dirs.sh
├── pull.sh
└── start.sh
```
Na dysku `/data`:
```
/data/apps/comfyui/
├── storage/ # kopia ComfyUI z obrazu (pierwszy start)
├── models/ # checkpoints, LoRA, VAE, …
├── cache/
│ ├── hf-hub/
│ └── torch-hub/
├── input/
├── output/
├── custom_nodes/
└── workflows/
```
## Workflow (bez modelu)
```bash
cd stacks/comfyui
cp .env.example .env
./scripts/pull.sh
./scripts/start.sh
```
Weryfikacja:
```bash
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8188/
# UI: http://<IP-serwera>:8188
```
## Zmienne `.env`
| Zmienna | Opis | Domyślnie |
|---------|------|-----------|
| `DATA_ROOT` | Mount dysku danych | `/data` |
| `COMFYUI_PORT` | Port na hoście | `8188` |
| `COMFYUI_IMAGE` | Obraz Docker | `yanwk/comfyui-boot:cu126-slim` |
| `CUDA_VISIBLE_DEVICES` | GPU | `0` |
| `CLI_ARGS` | Dodatkowe flagi ComfyUI | puste |
## Polityka GPU (LocalAI ↔ ComfyUI)
RTX 3090 Ti 24 GB — **jeden** duży workload GPU naraz.
Przed startem ComfyUI z dużym modelem (SDXL, Flux):
```bash
cd ../localai
docker compose --profile localai stop localai
```
Skrypt `start.sh` ostrzega, gdy `localai` jest uruchomiony.
W Server UI (port 8091) → Stop/Start stack `localai` lub `comfyui` według potrzeb.
## Modele (później)
- **ComfyUI-Manager** w UI (custom node w obrazie yanwk) — pobieranie modeli i węzłów
- Ręcznie: pliki do `/data/apps/comfyui/models/checkpoints/` (lub odpowiednie podkatalogi)
Szacunki VRAM (przy zatrzymanym LocalAI):
| Model | VRAM (orientacyjnie) |
|-------|----------------------|
| SD 1.5 | ~46 GB |
| SDXL | ~812 GB |
| Flux | ~1220 GB |
## Zarządzanie
```bash
docker compose --profile comfyui ps
docker compose --profile comfyui logs -f comfyui
docker compose --profile comfyui restart comfyui
docker compose --profile comfyui down
```
## Dokumentacja
- Tutorial: [manual-tutorial/07-comfyui-stack.md](../../manual-tutorial/07-comfyui-stack.md)
- Research Stability Matrix: [`coding-agent/STABILITYMATRIX-RESEARCH.md`](../../coding-agent/STABILITYMATRIX-RESEARCH.md)
- Wdrożenie: [`coding-agent/COMFYUI-DEPLOYMENT.md`](../../coding-agent/COMFYUI-DEPLOYMENT.md)
Upstream: [github.com/comfyanonymous/ComfyUI](https://github.com/comfyanonymous/ComfyUI)
+1
View File
@@ -0,0 +1 @@
docker-compose.yml
+33
View File
@@ -0,0 +1,33 @@
name: comfyui
services:
comfyui:
image: ${COMFYUI_IMAGE:-yanwk/comfyui-boot:cu126-slim}
container_name: comfyui
profiles:
- comfyui
restart: unless-stopped
init: true
ports:
- "${COMFYUI_PORT:-8188}:8188"
environment:
- CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}
- NVIDIA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
- CLI_ARGS=${CLI_ARGS:-}
volumes:
- ${DATA_ROOT:-/data}/apps/comfyui/storage:/root
- ${DATA_ROOT:-/data}/apps/comfyui/models:/root/ComfyUI/models
- ${DATA_ROOT:-/data}/apps/comfyui/cache/hf-hub:/root/.cache/huggingface/hub
- ${DATA_ROOT:-/data}/apps/comfyui/cache/torch-hub:/root/.cache/torch/hub
- ${DATA_ROOT:-/data}/apps/comfyui/input:/root/ComfyUI/input
- ${DATA_ROOT:-/data}/apps/comfyui/output:/root/ComfyUI/output
- ${DATA_ROOT:-/data}/apps/comfyui/custom_nodes:/root/ComfyUI/custom_nodes
- ${DATA_ROOT:-/data}/apps/comfyui/workflows:/root/ComfyUI/user/default/workflows
gpus: all
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8188/"]
interval: 1m
timeout: 30s
retries: 5
start_period: 3m
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Create ComfyUI data directories on the data disk.
ensure_comfyui_dirs() {
local data_root="${1:-/data}"
mkdir -p \
"${data_root}/apps/comfyui/storage" \
"${data_root}/apps/comfyui/models" \
"${data_root}/apps/comfyui/cache/hf-hub" \
"${data_root}/apps/comfyui/cache/torch-hub" \
"${data_root}/apps/comfyui/input" \
"${data_root}/apps/comfyui/output" \
"${data_root}/apps/comfyui/custom_nodes" \
"${data_root}/apps/comfyui/workflows"
}
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
ensure_comfyui_dirs "${1:-/data}"
fi
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STACK_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${STACK_DIR}"
if [[ -f .env ]]; then
set -a
# shellcheck disable=SC1091
source .env
set +a
fi
docker compose --profile comfyui pull
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STACK_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/ensure-dirs.sh"
cd "${STACK_DIR}"
if [[ ! -f .env ]]; then
echo "ERROR: .env not found. Run: cp .env.example .env"
exit 1
fi
set -a
# shellcheck disable=SC1091
source .env
set +a
DATA_ROOT="${DATA_ROOT:-/data}"
if ! mountpoint -q "${DATA_ROOT}" 2>/dev/null; then
echo "ERROR: ${DATA_ROOT} is not mounted"
exit 1
fi
ensure_comfyui_dirs "${DATA_ROOT}"
if ! docker info &>/dev/null; then
echo "ERROR: Docker is not running"
exit 1
fi
if docker ps --format '{{.Names}}' | grep -qx localai; then
echo "UWAGA: Kontener localai jest uruchomiony."
echo " Na RTX 3090 Ti 24 GB uruchom tylko jeden duży workload GPU."
echo " Zatrzymaj LocalAI przed generowaniem obrazów:"
echo " cd ../localai && docker compose --profile localai stop localai"
echo ""
read -r -p "Kontynuować mimo to? [y/N]: " confirm
if [[ "${confirm,,}" != "y" ]]; then
exit 1
fi
fi
echo "=== ComfyUI stack ==="
echo "Image: ${COMFYUI_IMAGE:-yanwk/comfyui-boot:cu126-slim}"
echo "Port: ${COMFYUI_PORT:-8188}"
echo "Models: ${DATA_ROOT}/apps/comfyui/models"
echo "GPU: CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}"
echo ""
echo "Pierwszy start kopiuje ComfyUI do ${DATA_ROOT}/apps/comfyui/storage/ (~kilka minut)."
echo ""
docker compose --profile comfyui pull
docker compose --profile comfyui up -d
echo ""
echo "Started. Follow logs:"
echo " docker compose --profile comfyui logs -f comfyui"
echo ""
echo "Web UI (po starcie):"
echo " http://localhost:${COMFYUI_PORT:-8188}"
echo ""
echo "Health:"
echo " curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:${COMFYUI_PORT:-8188}/"