02 - Deploy Runbook (odtworzenie od zera)¶
Scenariusz: GX10 padł / kupujesz nowy sprzęt / migrujesz. Ten dokument prowadzi krok po kroku.
Zakładania¶
- Nowa maszyna to Linux ARM64 z NVIDIA CUDA (idealnie DGX OS na Grace Blackwell, ale każdy Linux z Docker + NVIDIA runtime działa)
- Masz SSH access
- Masz dostęp do konta Cloudflare Konrada (dla tunnel config update, DNS)
- Masz dostęp do konta GitHub
Vallhalen(dla clone repos) - Masz HF_TOKEN dla Bielik-11B-v3.0 (gated repo)
Krok 0: Sprzęt + system¶
# Podstawy: Docker + NVIDIA runtime
sudo apt update && sudo apt install -y docker.io nvidia-container-toolkit git curl
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# relogin
# Test GPU
docker run --rm --gpus all nvidia/cuda:13.0-base-arm64 nvidia-smi
Krok 1: Sklonuj kony-gx10-stack¶
# SSH key dla git
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ''
cat ~/.ssh/id_ed25519.pub
# Dodaj do GitHub: Settings → SSH keys → New
git clone git@github.com:Vallhalen/kony-gx10-stack.git ~/kony-backup-repo
Krok 2: Podnieś core kontenery¶
Kolejność ważna: model backends przed kony-brain.
2.1 vllm-bielik (11B FP16)¶
cd ~/kony-backup-repo/kony-brain # kony-brain repo ma odniesienia do wszystkich modeli
mkdir -p ~/.cache/huggingface
docker run -d --name vllm-bielik --gpus all --ipc=host --network host \
--restart unless-stopped \
-e HF_TOKEN=hf_YOUR_TOKEN \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/timothystewart6/vllm-gb10:latest \
vllm serve speakleash/Bielik-11B-v3.0-Instruct \
--host 0.0.0.0 --port 8000 \
--max-model-len 32768 \
--gpu-memory-utilization 0.2 \
--dtype float16
2.2 vllm-qwen32b (Qwen 32B AWQ + tool calling)¶
docker run -d --name vllm-qwen32b --gpus all --ipc=host --network host \
--restart unless-stopped \
-e HF_TOKEN=hf_YOUR_TOKEN \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/timothystewart6/vllm-gb10:latest \
vllm serve Qwen/Qwen2.5-32B-Instruct-AWQ \
--host 0.0.0.0 --port 8001 \
--max-model-len 16384 \
--gpu-memory-utilization 0.42 \
--enable-auto-tool-choice \
--tool-call-parser hermes
2.3 kony-vl (Qwen VL 7B AWQ)¶
docker run -d --name kony-vl --gpus all --ipc=host --network host \
--restart unless-stopped \
-e HF_TOKEN=hf_YOUR_TOKEN \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/timothystewart6/vllm-gb10:latest \
vllm serve Qwen/Qwen2.5-VL-7B-Instruct-AWQ \
--host 0.0.0.0 --port 8004 \
--max-model-len 8192 \
--gpu-memory-utilization 0.25 \
--limit-mm-per-prompt image=2
2.4 kony-whisper¶
docker run -d --name kony-whisper --gpus all --network host \
--restart unless-stopped \
-e WHISPER_MODEL=faster-whisper-medium \
fedirz/faster-whisper-server:latest-cuda
2.5 kony-embed (mmlw + wrapper)¶
cd ~/kony-backup-repo/kony-embed
docker build -t chwytek-embed:1.0 .
docker run -d --name kony-embed --gpus all --network host \
--restart unless-stopped \
-e PORT=8018 \
chwytek-embed:1.0
2.6 kony-tts-xtts (voice clone)¶
WAŻNE: bez konrad.wav w reference kontener nie wstanie! Wgraj reference audio 15s Konradowego głosu (naturalny czytany tekst, 22050Hz mono WAV).
cd ~/kony-backup-repo/kony-tts-xtts
mkdir -p reference
# scp gx10-old:~/kony-tts-xtts/reference/konrad.wav reference/
# ALBO: nagraj nowo (mikrofon, 15s naturalnego głosu)
docker build -t kony-tts-xtts:latest .
docker run -d --name kony-tts-xtts --gpus all --network host \
--restart unless-stopped \
-v ~/kony-tts-xtts/reference:/app/reference \
kony-tts-xtts:latest
2.7 bielik-guard¶
cd ~/kony-backup-repo/bielik-guard
docker build -t bielik-guard:1.0 .
docker run -d --name bielik-guard --gpus all --network host \
--restart unless-stopped \
-e SAFETY_THRESHOLD=0.7 \
bielik-guard:1.0
2.8 kony-bdh¶
cd ~/kony-backup-repo/kony-bdh
# Pobierz .pt z osobnego repo (58MB nie w git kony-gx10-stack)
git clone git@github.com:Vallhalen/kony-checkpoints.git /tmp/kony-ckpt
cp /tmp/kony-ckpt/*.pt .
docker build -t kony-bdh:latest . # WYMAGA Dockerfile - jesli brak, patrz TODO
mkdir -p ~/kony-bdh
cp -r . ~/kony-bdh/
docker run -d --name kony-bdh --gpus all --network host \
--restart unless-stopped \
-e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \
-e CHECKPOINT_PATH=/workspace/bdh_kony_v2_checkpoint.pt \
-e CLASSIFIER_PATH=/workspace/bdh_classifier_v2_checkpoint.pt \
-e PORT=8020 \
-v ~/kony-bdh:/workspace \
kony-bdh:latest
TODO: kony-bdh nie ma Dockerfile w repo (script uruchamiany z ad-hoc container). Do zrobienia: napisać Dockerfile.
2.9 kony-brain (najważniejsze, ostatnie)¶
cd ~/kony-backup-repo/kony-brain
docker build -t kony-brain:v23 .
docker run -d --name kony-brain --gpus all --network host \
--restart unless-stopped \
-e QWEN_URL=http://localhost:8001 \
-e BIELIK_URL=http://localhost:8000 \
-e WHISPER_URL=http://localhost:8010 \
-e TTS_URL=http://localhost:8017 \
-e EMBED_URL=http://localhost:8018 \
-e GUARD_URL=http://localhost:8002 \
-e KONY_HUB_URL=https://crm.chcedointernetu.pl \
-e KONY_CAPTURE_SECRET=NxFk4yZLH-5hRLzQWsmZ8Bg11Kk96pbGk9BpbgoLlfk \
-e FLEXY_KEY=Kpj_keBmQ6eCTLo6w0Ye1CBKat_EmhgbgP_WeETyeU8 \
-e KONY_BRIDGE_URL=https://n8n.chcedointernetu.pl/webhook/kony-bridge \
kony-brain:v23
Poczekaj 2-3 min - RAG index się backfilluje z Kony Hub (~200 captures = ~30-60s embed).
Verify: curl http://localhost:8000/health i curl http://localhost:8000/rag/status
Krok 3: Update CF Tunnel ingress (jeśli IP się zmieniło)¶
Sprawdź obecne ingress:
TOKEN=$(cat ~/AppData/Roaming/xdg.config/.wrangler/config/default.toml | grep oauth_token | cut -d'"' -f2)
curl -H "Authorization: Bearer $TOKEN" \
https://api.cloudflare.com/client/v4/accounts/4e8c2f004007c047121ecb89819fb47e/cfd_tunnel/15f1c70e-da23-4304-9743-d28f9f316c10/configurations \
| jq '.result.config.ingress'
Jeśli nowa maszyna ma inne IP niż 10.0.0.114, PUT nowe ingress rules z aktualnym IP (playbook w ../reference_cf_tunnel_nas_vallhala.md).
Krok 4: n8n workflows import¶
Na NAS (Synology DSM → n8n container), zaloguj się do UI. Dla każdego workflow z n8n-workflows/:
- Kony Bridge: Menu → Import from File →
n8n-workflows/kony-bridge.json - Kony Faktury → SALDEO: analogicznie
- DMARC Watchdog: analogicznie
- AI Desk Lead Flow: analogicznie
Uwaga na credentials: workflow JSONy odnoszą się do credentials po nazwie (Kony Hub Auth, Gmail OAuth2, HA Access Token). Musisz je odtworzyć w n8n Credentials store ręcznie (bo credentials nie eksportujemy do git ze względu na secrets).
Krok 5: Cron backup na nowej maszynie¶
scp /path/to/old-gx10/kony-daily-backup.sh ~/kony-daily-backup.sh
# ALBO: napisz nowy z ~/kony-backup-repo/README.md wzorca
chmod +x ~/kony-daily-backup.sh
echo "0 3 * * * /home/vallhalen/kony-daily-backup.sh" | crontab -
# n8n key
echo "PASTE_N8N_API_KEY_HERE" > ~/.n8n-api-key.txt
chmod 600 ~/.n8n-api-key.txt
Krok 6: Test end-to-end¶
# 1. Health
for url in http://localhost:8000/health http://localhost:8004/v1/models http://localhost:8020/health; do
echo "=== $url ==="; curl -s -m 5 "$url" | head -1
done
# 2. Public endpoints (przez tunel)
curl -A "Mozilla/5.0" https://voice.chcedointernetu.pl/health
curl -A "Mozilla/5.0" https://bdh.chcedointernetu.pl/health
# 3. Capture pipeline (real POST z apki - z telefonu)
# Otworz KonyAI Flutter, wyślij test capture, obserwuj:
# - Kony Hub API: nowy capture w /api/kony/captures
# - Ntfy push na telefon
Krok 7: Update Worker jeśli hostname się zmienił¶
Jeśli musisz zmienić GX10_INTERNAL_URL w Worker:
cd send-to-second-brain/worker
echo "https://qwen-vl.chcedointernetu.pl" | wrangler secret put GX10_INTERNAL_URL
Znane pułapki¶
- Kolejność startu: LLM backends przed kony-brain (kony-brain testuje wszystkie endpointy w startup - jeśli któryś nie odpowiada, kony-brain padnie z timeout)
- HF gated repos: Bielik i Qwen wymagają HF_TOKEN z accepted license
- VRAM starvation: 6+ modele naraz na 128GB unified może wymagać restart z niższym
--gpu-memory-utilization(patrz [[project_local_ai_lab_gx10]] wpis o multi-vLLM tuningu) - kony-tts-xtts BEZ reference wav: nie wstanie. Musisz mieć nagranie głosu.
- BDH bf16 pathway: server_v2.py musi używać
with ctx:(autocast bfloat16) w/classifyżeby features matched trening - CF Tunnel DNS record: jeśli tworzysz nowy hostname, nie zapomnij dodać CNAME w CF dashboard -
wranglerOAuth token nie mazone_dns:writescope
Pokrewne¶
- 01-modules.md - szczegóły każdego kontenera
- 05-troubleshooting.md - znane bugi i fixy
../n8n-workflows/*.json- workflow definitions../deploy/docker-inspect.txt- komendy startowe z live GX10 (daily backup)