diff --git a/CLAUDE.md b/CLAUDE.md index 56df862..09fbd88 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,6 +23,8 @@ This repository manages a **homelab infrastructure** with self-hosted services r hf-pdocker-01 (Manager, 23GB RAM, i7-7700T, NVMe, HD 630 GPU) -- RESTORED (2026-03-08, hardware repaired) ├── [COMPOSE] Frigate NVR (:5000) -- OpenVINO GPU detector, 13 cameras active ├── [COMPOSE] Frigate-Notify v2 (:5199) -- MQTT->AI->Matrix notifications +├── [COMPOSE] clip-service (:5200) -- CLIP embeddings (ViT-L-14, CPU) +├── [COMPOSE] Open WebUI (:3010) -- AI chat UI (Ollama + Anthropic backends) ├── [COMPOSE] Home Assistant (:8123) ├── [COMPOSE] ESPHome (:6052) ├── [COMPOSE] Mosquitto (:1883, :8883) @@ -35,12 +37,13 @@ hf-pdocker-01 (Manager, 23GB RAM, i7-7700T, NVMe, HD 630 GPU) -- RESTORED (2026- ├── [COMPOSE] Farm Manager API (:8888) -- dashboard + API server ├── [COMPOSE] Farm Agent (:8889) ├── [SWARM] Telegraf (global), Node-exporter (global) -├── [CRON] sync-frigate-to-nas (daily 2am), cleanup-frigate-media (weekly Sun 3am) +├── [CRON] sync-frigate-to-nas (daily 2am), cleanup-frigate-media (weekly Sun 3am), restart-frigate (daily 4am) ├── 5TB USB disk at /mnt/frigate-recordings (Frigate recordings storage) bart (Worker, 15GB RAM, i5-4570T, HDD) ├── [COMPOSE] Media Stack (Jellyfin, Sonarr, Radarr, SABnzbd, NZBHydra2, Jellyseerr) ├── [COMPOSE] OpenVAS (vulnerability scanner) +├── [COMPOSE] Onyx (:3005) -- AI document search/RAG (Ollama backend: llava:13b on 192.168.86.196) ├── [COMPOSE] Farm Agent (:8889) ├── [COMPOSE] Watchtower ├── [SWARM] Telegraf (global), Node-exporter (global) @@ -51,6 +54,9 @@ hf-pdocker-02 (Worker, 7.6GB RAM, i7-6700T, HDD) ├── [COMPOSE] Semaphore + semaphore-db (MySQL) ├── [COMPOSE] Wiki.js + wikijs-db (PostgreSQL) ├── [COMPOSE] Vaultwarden, Actual Budget, MCPO, Trivy +├── [COMPOSE] SearXNG (:8888) -- self-hosted meta-search engine (Onyx web search backend) +├── [COMPOSE] Unstructured API (:8000) -- document parsing for Onyx file ingestion +├── [COMPOSE] n8n + n8n-db (PostgreSQL) -- Clippy workflow automation ├── [COMPOSE] NetClaw/Aaron (:1179) -- AI network agent ├── [COMPOSE] Farm Agent (:8889) ├── [COMPOSE] Watchtower @@ -77,7 +83,7 @@ All service data lives on the **Synology NAS** via NFS, mounted at `/mnt/docker- ├── media/ # Frigate recordings ├── traefik/ # Let's Encrypt certs └── compose/ # Standalone compose files per node - ├── hf-pdocker-01/{frigate,frigate-notify,matrix,smarthome,guacamole,ai-agents,traefik,adguard}/ + ├── hf-pdocker-01/{frigate,frigate-notify,clip-service,matrix,smarthome,guacamole,ai-agents,traefik,adguard}/ ├── hf-pdocker-02/{unifi,gitea,semaphore,wikijs,vaultwarden,actual-budget,mcpo,trivy,netclaw,watchtower}/ └── bart/{media,openvas,watchtower}/ ``` @@ -140,12 +146,16 @@ compose/ # Standalone Compose definitions (deployed per-node) - Home Assistant: `yoda.hobbs.farm` - Vaultwarden: `vault.hobbs.farm` - Gitea: `git.hobbs.farm` +- Onyx: `onyx.hobbs.farm` +- Open WebUI: `open.hobbs.farm` ### Internal Services by Node **hf-pdocker-01 (192.168.86.192):** - Frigate: :5000 - Frigate Alerts (v2): :5199 (web UI + REST API) +- clip-service: :5200 (CLIP embeddings, ViT-L-14, CPU) +- Open WebUI: :3010 (AI chat UI, public at open.hobbs.farm) - Home Assistant: :8123 - ESPHome: :6052 - Mosquitto: :1883 @@ -174,6 +184,8 @@ compose/ # Standalone Compose definitions (deployed per-node) - Actual Budget: :5006 - MCPO: :8001 - Trivy: :4954 +- SearXNG: :8888 (meta-search, Onyx web search backend) +- Unstructured API: :8000 (document parsing for Onyx file ingestion) - NetClaw/Aaron: :1179 (internal only) **bart (192.168.86.167):** @@ -185,15 +197,15 @@ compose/ # Standalone Compose definitions (deployed per-node) - NZBHydra2: :5076 - Jellyseerr: :5055 - OpenVAS: :9392 +- Onyx: :3005 (AI document search/RAG) **GPU Machine (192.168.86.196, RTX 3090):** - Ollama: :11434 (vision LLM, llava:13b) -- clip-service: :5200 (CLIP embeddings, to be deployed) ### Port Conflict Notes Port conflicts already resolved: -- Port 8000: Portainer (MCPO moved to 8001) +- Port 8000: Now used by Unstructured API on hf-pdocker-02 (MCPO moved to 8001, Portainer moved elsewhere) - Port 3000: AdGuard Home (Gitea moved to 3003) - Port 3001: Grafana (Semaphore moved to 3004) - Port 5000: Frigate uses host networking (registry container stopped) diff --git a/compose/hf-pdocker-01/openwebui/docker-compose.yml b/compose/hf-pdocker-01/openwebui/docker-compose.yml new file mode 100644 index 0000000..c058e0b --- /dev/null +++ b/compose/hf-pdocker-01/openwebui/docker-compose.yml @@ -0,0 +1,29 @@ +services: + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + restart: unless-stopped + ports: + - "3010:8080" + env_file: + - .env + environment: + - TZ=America/Chicago + - OLLAMA_BASE_URL=http://192.168.86.196:11434 + volumes: + - /mnt/docker-data/configs/openwebui:/app/backend/data + mem_limit: 1G + memswap_limit: 1G + labels: + - "com.centurylinklabs.watchtower.enable=false" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8080/health || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" diff --git a/docs/superpowers/plans/2026-03-11-openwebui.md b/docs/superpowers/plans/2026-03-11-openwebui.md new file mode 100644 index 0000000..89ca5ec --- /dev/null +++ b/docs/superpowers/plans/2026-03-11-openwebui.md @@ -0,0 +1,244 @@ +# Open WebUI Deployment Plan + +> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Deploy Open WebUI on hf-pdocker-01 with Ollama + Anthropic Claude backends, publicly accessible at `open.hobbs.farm`. + +**Architecture:** Single-container Compose service on hf-pdocker-01. Traefik file-based dynamic config for HTTPS routing. NAS-backed persistent storage. Prometheus blackbox probes for monitoring. + +**Tech Stack:** Open WebUI (ghcr.io/open-webui/open-webui:main), Traefik v3.6 (file provider), Prometheus blackbox exporter. + +**Spec:** `docs/superpowers/specs/2026-03-11-openwebui-design.md` + +--- + +## Chunk 1: Create Files and Deploy + +### Task 1: Create Compose File + +**Files:** +- Create: `compose/hf-pdocker-01/openwebui/docker-compose.yml` + +- [ ] **Step 1: Create the compose file** + +```yaml +services: + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + restart: unless-stopped + ports: + - "3010:8080" + env_file: + - .env + environment: + - TZ=America/Chicago + - OLLAMA_BASE_URL=http://192.168.86.196:11434 + volumes: + - /mnt/docker-data/configs/openwebui:/app/backend/data + mem_limit: 1G + memswap_limit: 1G + labels: + - "com.centurylinklabs.watchtower.enable=false" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8080/health || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" +``` + +### Task 2: Create Traefik Dynamic Config + +**Files:** +- Create: `stacks/traefik/dynamic/openwebui.yml` + +- [ ] **Step 1: Create the Traefik dynamic route file** + +```yaml +http: + routers: + openwebui: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - websecure + service: openwebui + tls: + certResolver: letsencrypt + openwebui-http: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - web + middlewares: + - openwebui-https-redirect + service: openwebui + middlewares: + openwebui-https-redirect: + redirectScheme: + scheme: https + permanent: true + services: + openwebui: + loadBalancer: + servers: + - url: "http://192.168.86.192:3010" +``` + +### Task 3: Deploy to hf-pdocker-01 + +Uses `docker-swarm-ops` agent. All steps run on hf-pdocker-01 via SSH. + +- [ ] **Step 1: Create data directory on NAS** + +```bash +ssh glyptic@192.168.86.192 "sudo mkdir -p /mnt/docker-data/configs/openwebui" +``` + +- [ ] **Step 2: Create compose directory on NAS** + +```bash +ssh glyptic@192.168.86.192 "sudo mkdir -p /mnt/docker-data/compose/hf-pdocker-01/openwebui" +``` + +- [ ] **Step 3: Generate WEBUI_SECRET_KEY and create .env file** + +```bash +SECRET=$(openssl rand -hex 32) +# Get ANTHROPIC_API_KEY from existing ai-agents .env on NAS +API_KEY=$(ssh glyptic@192.168.86.192 "grep ANTHROPIC_API_KEY /mnt/docker-data/compose/hf-pdocker-01/ai-agents/.env | cut -d= -f2") +ssh glyptic@192.168.86.192 "cat > /mnt/docker-data/compose/hf-pdocker-01/openwebui/.env << EOF +ANTHROPIC_API_KEY=$API_KEY +WEBUI_SECRET_KEY=$SECRET +EOF" +``` + +- [ ] **Step 4: SCP compose file to NAS** + +```bash +scp compose/hf-pdocker-01/openwebui/docker-compose.yml glyptic@192.168.86.192:/mnt/docker-data/compose/hf-pdocker-01/openwebui/docker-compose.yml +``` + +- [ ] **Step 5: SCP Traefik dynamic config to NAS** + +```bash +scp stacks/traefik/dynamic/openwebui.yml glyptic@192.168.86.192:/mnt/docker-data/traefik/dynamic/openwebui.yml +``` + +- [ ] **Step 6: Pull image and start container** + +```bash +ssh glyptic@192.168.86.192 "cd /mnt/docker-data/compose/hf-pdocker-01/openwebui && docker compose pull && docker compose up -d" +``` + +- [ ] **Step 7: Verify container health** + +```bash +ssh glyptic@192.168.86.192 "docker ps --filter name=open-webui --format 'table {{.Names}}\t{{.Status}}'" +``` + +Expected: `open-webui Up ... (healthy)` (may take up to 60s for healthcheck) + +- [ ] **Step 8: Verify internal access** + +```bash +ssh glyptic@192.168.86.192 "curl -sf -o /dev/null -w '%{http_code}' http://localhost:3010" +``` + +Expected: `200` + +- [ ] **Step 9: Verify Traefik picked up the route** + +```bash +curl -sf -o /dev/null -w '%{http_code}' https://open.hobbs.farm +``` + +Expected: `200` (Traefik auto-reloads file-based config) + +- [ ] **Step 10: Verify Ollama connectivity from container** + +```bash +ssh glyptic@192.168.86.192 "docker exec open-webui curl -sf http://192.168.86.196:11434/api/tags | head -c 200" +``` + +Expected: JSON response listing available Ollama models (llava:13b) + +## Chunk 2: Monitoring and Documentation + +### Task 4: Add Prometheus Blackbox Probes + +**Files:** +- Modify: `stacks/monitoring/prometheus.yml` + +- [ ] **Step 1: Add internal probe to http-pdocker01 job** + +Add `- http://192.168.86.192:3010 # Open WebUI` to the `http-pdocker01` targets list (after the Alertmanager line, line 70). + +- [ ] **Step 2: Add external probe to http-external job** + +Add `- https://open.hobbs.farm # Open WebUI` to the `http-external` targets list (after the Gitea line, line 158). + +- [ ] **Step 3: SCP updated prometheus.yml to NAS** + +```bash +scp stacks/monitoring/prometheus.yml glyptic@192.168.86.192:/mnt/docker-data/configs/prometheus/prometheus.yml +``` + +- [ ] **Step 4: Hot-reload Prometheus** + +```bash +ssh glyptic@192.168.86.192 "curl -X POST http://localhost:9095/-/reload" +``` + +- [ ] **Step 5: Verify probes are up** + +```bash +ssh glyptic@192.168.86.192 "curl -s 'http://localhost:9095/api/v1/targets?state=active' | python3 -c \"import sys,json; targets=json.load(sys.stdin)['data']['activeTargets']; [print(t['labels'].get('instance','')) for t in targets if 'open' in t['labels'].get('instance','').lower()]\"" +``` + +Expected: Two lines showing `http://192.168.86.192:3010` and `https://open.hobbs.farm` + +### Task 5: Update CLAUDE.md + +**Files:** +- Modify: `CLAUDE.md` + +- [ ] **Step 1: Add Open WebUI to hf-pdocker-01 service list** + +Add `├── [COMPOSE] Open WebUI (:3010) -- LLM chat UI (Ollama + Claude)` to the hf-pdocker-01 section. + +- [ ] **Step 2: Add to internal services list** + +Add `- Open WebUI: :3010` under hf-pdocker-01 internal services. + +- [ ] **Step 3: Add to public services list** + +Add `- Open WebUI: \`open.hobbs.farm\`` under Public Services. + +### Task 6: Update MEMORY.md + +**Files:** +- Modify: `/home/glyptic/.claude/projects/-mnt-c-Users-Jeremy-projects-docker/memory/MEMORY.md` + +- [ ] **Step 1: Add Open WebUI memory entry** + +Add section with deployment details: node, port, compose path, LLM backends, Traefik route, data path. + +### Task 7: Update Wiki + +- [ ] **Step 1: Launch documentation-keeper agent (background)** + +Update wiki with new Open WebUI service documentation. + +### Task 8: Commit + +- [ ] **Step 1: Commit all new/modified files** + +```bash +git add compose/hf-pdocker-01/openwebui/docker-compose.yml stacks/traefik/dynamic/openwebui.yml stacks/monitoring/prometheus.yml CLAUDE.md +git commit -m "infra: deploy Open WebUI on hf-pdocker-01 with Ollama + Claude backends" +``` diff --git a/docs/superpowers/specs/2026-03-11-openwebui-design.md b/docs/superpowers/specs/2026-03-11-openwebui-design.md new file mode 100644 index 0000000..3d5fe66 --- /dev/null +++ b/docs/superpowers/specs/2026-03-11-openwebui-design.md @@ -0,0 +1,148 @@ +# Open WebUI Deployment Design + +**Date:** 2026-03-11 +**Node:** hf-pdocker-01 (192.168.86.192) +**Public URL:** https://open.hobbs.farm +**Internal URL:** http://192.168.86.192:3010 + +## Overview + +Deploy Open WebUI as a standalone Compose service on hf-pdocker-01, connected to Ollama (local GPU machine) and Anthropic Claude API. Publicly accessible via Traefik at `open.hobbs.farm`. + +## Architecture + +``` +Internet -> Traefik (hf-pdocker-01:443) -> http://192.168.86.192:3010 -> open-webui:8080 + | + +-> Ollama (192.168.86.196:11434) [llava:13b + future models] + +-> Anthropic API (cloud) [Claude models] +``` + +## Service Definition + +- **Image:** `ghcr.io/open-webui/open-webui:main` +- **Container name:** `open-webui` +- **Internal port:** 8080 (container default) +- **Host port:** 3010 +- **Memory:** `mem_limit: 1G`, `memswap_limit: 1G` +- **Restart:** `unless-stopped` +- **Watchtower:** `com.centurylinklabs.watchtower.enable=false` (manual upgrades) +- **Timezone:** `TZ=America/Chicago` + +### Compose Location + +- Repo: `compose/hf-pdocker-01/openwebui/docker-compose.yml` +- Deploy target: `/mnt/docker-data/compose/hf-pdocker-01/openwebui/` +- `.env` file alongside compose for secrets (ANTHROPIC_API_KEY, WEBUI_SECRET_KEY) + +### Persistent Storage + +- Data volume: `/mnt/docker-data/configs/openwebui/` -> `/app/backend/data` in container +- Stores: user accounts, chat history, settings, uploaded files +- Open WebUI uses SQLite internally. Single-writer scenario on NFS is acceptable. If locking issues arise, fall back to local storage (like Guacamole's MySQL pattern at `/var/lib/`). +- Container runs as root by default; NFS write permissions should work without `user: "1024:100"` but will be verified during deploy. + +### Environment Variables + +- `OLLAMA_BASE_URL=http://192.168.86.196:11434` — native Ollama connection +- `ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}` — from .env, enables native Anthropic provider (Open WebUI v0.5+ has built-in Anthropic support) +- `WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}` — from .env, generated via `openssl rand -hex 32` +- `TZ=America/Chicago` + +### Healthcheck + +```yaml +healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8080/health || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s +``` + +### Logging + +```yaml +logging: + driver: "json-file" + options: + max-size: "50m" + max-file: "3" +``` + +### Traefik Configuration + +Traefik on hf-pdocker-01 uses **file-based dynamic config** (no Docker provider/labels). A new dynamic config file is needed: + +- **Repo path:** `stacks/traefik/dynamic/openwebui.yml` +- **Deploy target:** `/mnt/docker-data/traefik/dynamic/openwebui.yml` (auto-picked up by Traefik's file watcher) + +```yaml +http: + routers: + openwebui: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - websecure + service: openwebui + tls: + certResolver: letsencrypt + openwebui-http: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - web + middlewares: + - openwebui-https-redirect + service: openwebui + middlewares: + openwebui-https-redirect: + redirectScheme: + scheme: https + permanent: true + services: + openwebui: + loadBalancer: + servers: + - url: "http://192.168.86.192:3010" +``` + +### Network + +- Default bridge network (single-container service, no custom network needed) +- Traefik routes to `http://192.168.86.192:3010` via file-based config (no overlay network required) + +### Authentication + +- Built-in Open WebUI auth (email/password) +- First user to register becomes admin +- Admin disables open registration after initial setup + +### Monitoring + +- **Internal probe:** `http://192.168.86.192:3010` added to Prometheus `http-pdocker01` blackbox job +- **External probe:** `https://open.hobbs.farm` added to Prometheus `http-external` blackbox job + +## LLM Backend Details + +### Ollama (Native) + +Open WebUI has first-class Ollama support. Setting `OLLAMA_BASE_URL` makes all Ollama models available in the model selector. Currently `llava:13b` is loaded; any future models pulled to Ollama will auto-appear. + +### Anthropic Claude (Native) + +Open WebUI v0.5+ has built-in Anthropic provider support. Setting the `ANTHROPIC_API_KEY` environment variable enables Claude models in the model selector. No proxy or OpenAI-compatibility layer needed. The existing API key (same one used by frigate-notify and AI agents) goes in the `.env` file. + +## Post-Deploy Checklist + +1. Verify container health and web UI loads at `http://192.168.86.192:3010` +2. Verify Traefik routes `https://open.hobbs.farm` correctly +3. Register first admin user +4. Disable open registration in admin settings +5. Verify Ollama models appear in model selector +6. Verify Claude models appear in model selector +7. Add Prometheus blackbox probes (internal + external) +8. Hot-reload Prometheus: `curl -X POST http://192.168.86.192:9095/-/reload` +9. Update CLAUDE.md service lists +10. Update MEMORY.md +11. Update wiki via documentation-keeper agent +12. Store WEBUI_SECRET_KEY in Vaultwarden diff --git a/stacks/monitoring/prometheus.yml b/stacks/monitoring/prometheus.yml index 1980fd9..ae11ac0 100644 --- a/stacks/monitoring/prometheus.yml +++ b/stacks/monitoring/prometheus.yml @@ -39,15 +39,15 @@ scrape_configs: static_configs: - targets: ['blackbox-exporter:9115'] - # Matrix Alertmanager Receiver metrics (running on hf-pdocker-02 during failover) + # Matrix Alertmanager Receiver metrics (now on hf-pdocker-01) - job_name: 'matrix-alertmanager-receiver' scrape_interval: 1m static_configs: - - targets: ['192.168.86.100:9094'] + - targets: ['192.168.86.192:9094'] labels: - hostname: 'hf-pdocker-02' + hostname: 'hf-pdocker-01' - # HTTP Health Checks - hf-pdocker-01 services (native services only; failover services tracked in other jobs) + # HTTP Health Checks - hf-pdocker-01 services - job_name: 'http-pdocker01' metrics_path: /probe params: @@ -56,8 +56,19 @@ scrape_configs: - targets: - http://192.168.86.192:5000 # Frigate NVR (standalone, host network) - http://192.168.86.192:5199/health # Frigate Notify + - http://192.168.86.192:5200/health # clip-service (CLIP embeddings) + - http://192.168.86.192:3010 # Open WebUI - http://192.168.86.192:8888/health # Farm Manager API - http://192.168.86.192:8889/health # Farm Agent + - http://192.168.86.192:8123 # Home Assistant + - http://192.168.86.192:6052 # ESPHome + - http://192.168.86.192:8199/guacamole/ # Guacamole + - http://192.168.86.192:8008 # Matrix Synapse + - http://192.168.86.192:3000 # AdGuard Home + - http://192.168.86.192:8090/dashboard/ # Traefik Dashboard + - http://192.168.86.192:3001 # Grafana + - http://192.168.86.192:9095 # Prometheus + - http://192.168.86.192:9093 # Alertmanager relabel_configs: - source_labels: [__address__] target_label: __param_target @@ -66,7 +77,7 @@ scrape_configs: - target_label: __address__ replacement: blackbox-exporter:9115 - # HTTP Health Checks - hf-pdocker-02 services (native + failover from hf-pdocker-01) + # HTTP Health Checks - hf-pdocker-02 services - job_name: 'http-pdocker02' metrics_path: /probe params: @@ -80,10 +91,8 @@ scrape_configs: - http://192.168.86.100:5006 # Actual Budget - http://192.168.86.100:8001/openapi.json # MCPO - http://192.168.86.100:8889/health # Farm Agent - - http://192.168.86.100:3001 # Grafana (FAILOVER from hf-pdocker-01) - - http://192.168.86.100:9095 # Prometheus (FAILOVER from hf-pdocker-01) - - http://192.168.86.100:9093 # Alertmanager (FAILOVER from hf-pdocker-01) - - http://192.168.86.100:3000 # AdGuard Home (FAILOVER from hf-pdocker-01) + - http://192.168.86.100:8888 # SearXNG + - http://192.168.86.100:8000/healthcheck # Unstructured API - http://192.168.86.100:9000 # Portainer relabel_configs: - source_labels: [__address__] @@ -109,7 +118,7 @@ scrape_configs: - target_label: __address__ replacement: blackbox-exporter:9115 - # HTTP Health Checks - bart services (native + failover from hf-pdocker-01) + # HTTP Health Checks - bart services - job_name: 'http-bart' metrics_path: /probe params: @@ -124,10 +133,10 @@ scrape_configs: - http://192.168.86.167:5055 # Jellyseerr - http://192.168.86.167:9392 # OpenVAS - http://192.168.86.167:8889/health # Farm Agent - - http://192.168.86.167:8123 # Home Assistant (FAILOVER from hf-pdocker-01) - - http://192.168.86.167:6052 # ESPHome (FAILOVER from hf-pdocker-01) - - http://192.168.86.167:8199/guacamole/ # Guacamole (FAILOVER from hf-pdocker-01) - - http://192.168.86.167:8008 # Matrix Synapse (FAILOVER from hf-pdocker-01) + - targets: + - http://192.168.86.167:3005 # Onyx + labels: + name: onyx relabel_configs: - source_labels: [__address__] target_label: __param_target @@ -148,6 +157,7 @@ scrape_configs: - https://yoda.hobbs.farm # Home Assistant - https://vault.hobbs.farm # Vaultwarden - https://git.hobbs.farm # Gitea + - https://open.hobbs.farm # Open WebUI relabel_configs: - source_labels: [__address__] target_label: __param_target diff --git a/stacks/traefik/dynamic/openwebui.yml b/stacks/traefik/dynamic/openwebui.yml new file mode 100644 index 0000000..9053383 --- /dev/null +++ b/stacks/traefik/dynamic/openwebui.yml @@ -0,0 +1,26 @@ +http: + routers: + openwebui: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - websecure + service: openwebui + tls: + certResolver: letsencrypt + openwebui-http: + rule: "Host(`open.hobbs.farm`)" + entryPoints: + - web + middlewares: + - openwebui-https-redirect + service: openwebui + middlewares: + openwebui-https-redirect: + redirectScheme: + scheme: https + permanent: true + services: + openwebui: + loadBalancer: + servers: + - url: "http://192.168.86.192:3010"