Blame

29e97f Damien 2026-06-15 09:53:04
Add homelab wiki — Infrastructure, Docker Swarm, Traefik, Network/Media/Documents/AI/Downloads stacks, Game Servers
1
# AI Stack
2
3
← [[Home]]
4
5
Services running on PCT 109 (ai, 192.168.2.83). Privileged LXC, NVIDIA GPU passthrough. **Not a Docker Swarm node** — all services are standalone Docker Compose.
6
7
---
8
9
## Service URLs
10
11
| Service | URL | Port |
12
|---------|-----|------|
13
| LiteLLM | `litellm.carr-family.org` | 4000 (lan-only) |
14
| n8n | `n8n.carr-family.org` | 5678 (lan-only) |
15
| OpenClaw | `openclaw.carr-family.org` | 18789 (lan-only) |
16
| Odysseus | `odysseus.carr-family.org` | 7000 (lan-only) |
17
| Firecrawl API | — | `192.168.2.83:3002` |
18
| Whisper | — | `192.168.2.83:8001` |
19
| Proton Bridge SMTP | — | `192.168.2.83:1025` |
20
| Proton Bridge IMAP | — | `192.168.2.83:1143` |
21
22
---
23
24
## Key Paths
25
26
| Path | Contents |
27
|------|----------|
28
| `/usr/local/bin/hermes` | Hermes agent binary |
29
| `/root/.hermes/config.yaml` | Hermes config (model, MCP servers) |
30
| `/opt/litellm/config.yaml` | LiteLLM model list + master key |
31
| `/opt/litellm/docker-compose.yml` | LiteLLM + Postgres compose |
32
| `/opt/ai-tools/docker-compose.yml` | n8n + Qdrant compose |
33
| `/opt/n8n/data` | n8n workflows, credentials |
34
| `/opt/qdrant/data` | Qdrant vector store |
35
| `/opt/firecrawl/` | Firecrawl compose project |
36
| `/root/.openclaw/openclaw.json` | OpenClaw config |
37
| `/opt/odysseus/` | Odysseus compose project |
38
| `/opt/whisper/` | Whisper compose project |
39
| `/opt/proton-bridge/` | Proton Bridge compose project |
40
| `/mnt/obsidian/` | Obsidian vault (read-write bind mount) |
41
42
---
43
44
## LiteLLM
45
46
OpenAI-compatible proxy at `litellm.carr-family.org/ui`. Compose: `/opt/litellm/`.
47
48
- **Master key:** `sk-homelab-litellm-admin`
49
- **UI login:** admin / `sk-homelab-litellm-admin`
50
- **DB:** postgres:16-alpine (host port 5433)
51
- **Restart:** `pct exec 109 -- bash -c "cd /opt/litellm && docker compose up -d"`
52
53
**Models:**
54
55
| Model | Backend |
56
|-------|---------|
57
| `gpt-4o`, `gpt-4o-mini`, `gpt-4.1`, `gpt-4.1-mini` | OpenAI (direct) |
58
| `llama3.1:8b`, `llama3.2:3b` | Ollama @ 192.168.2.40:11434 (CPU) |
59
| `qwen3.6:27b`, `qwen3.5`, `ministral-3`, `llama3.2`, `llama3.1:8b-gpu` | Ollama @ 192.168.2.11:11434 (RTX 3060) |
60
| `llava` | Ollama @ 192.168.2.11 — vision/OCR (paperless-gpt uses `llava:7b`) |
61
| `nomic-embed-text` | Ollama @ 192.168.2.11 — embeddings for Qdrant |
62
63
---
64
65
## n8n
66
67
Workflow automation at `n8n.carr-family.org`. Compose: `/opt/ai-tools/` (n8n + Qdrant).
68
69
- **Data:** `/opt/n8n/data`
70
- **Restart:** `pct exec 109 -- bash -c "cd /opt/ai-tools && docker compose up -d"`
71
- **Vault mount:** `/mnt/obsidian:/mnt/obsidian:ro` inside container
72
- **Code node:** `NODE_FUNCTION_ALLOW_BUILTIN=fs,path` — required to read vault files
73
74
**Credentials in n8n:**
75
76
| Name | Type | Value |
77
|------|------|-------|
78
| Qdrant Local | Qdrant API | `http://qdrant:6333` (no API key) |
79
| Ollama .11 | Ollama | `http://192.168.2.11:11434` |
80
| LiteLLM OpenAI | OpenAI | Key: `sk-homelab-litellm-admin`, Base: `http://192.168.2.83:4000` |
81
82
**Claude Code MCP:** `n8n-mcp` server in `~/.claude/mcp.json` on Proxmox host. URL: `https://n8n.carr-family.org/mcp-server/http`. Reload by restarting Claude Code.
83
84
**Key Workflows:**
85
- *Obsidian Vault — Ingest to Qdrant* — reads all `.md` from vault, chunks + embeds into Qdrant. Run manually to re-index.
86
- *Obsidian Vault — Chat* — chat UI backed by Qdrant RAG + gpt-4o via LiteLLM.
87
88
---
89
90
## Qdrant
91
92
Vector store. Part of `/opt/ai-tools/docker-compose.yml`.
93
94
- **Ports:** 6333 (HTTP/REST), 6334 (gRPC)
95
- **Data:** `/opt/qdrant/data`
96
- **Collection:** `obsidian_vault` (vector size: 192, distance: Cosine, model: `nomic-embed-text`)
97
- **Check:** `curl http://192.168.2.83:6333/collections/obsidian_vault`
98
99
---
100
101
## Hermes Agent
102
103
AI agent with MCP access to the Obsidian vault.
104
105
- **Binary:** `/usr/local/bin/hermes`
106
- **Default model:** `gpt-4o` via LiteLLM
107
- **MCP server:** `obsidian-vault``mcp-server-filesystem /mnt/obsidian` (read/write/search)
108
- **Manage MCP:** `hermes mcp ls/add/remove`
109
- **Config:** `/root/.hermes/config.yaml`, `/root/.hermes/.env`
110
111
---
112
113
## OpenClaw
114
115
Claude AI desktop client. Version `2026.5.27`.
116
117
- **UI:** `openclaw.carr-family.org` (lan-only)
118
- **Gateway port:** 18789, systemd service: `openclaw-gateway.service`
119
- **Restart:** `openclaw daemon restart`
120
- **Config:** `/root/.openclaw/openclaw.json`
121
122
**Model Providers:**
123
124
| Provider | Backend | Models |
125
|----------|---------|--------|
126
| `openai` | OpenAI API (direct) | gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini |
127
| `ollama-11` | Ollama @ 192.168.2.11 (RTX 3060) | qwen3.6:27b, qwen3.5, ministral-3, llama3.2, llama3.1:8b, llava:7b |
128
| `ollama-40` | Ollama @ 192.168.2.40 (CPU) | llama3.1:8b, llama3.2:3b |
129
130
**Cron Jobs:**
131
132
| Job | Schedule | Model | Discord Channel |
133
|-----|----------|-------|-----------------|
134
| `homelab-self-heal` | every 15 min | `openai/gpt-4o-mini` | `1509897448645201981` |
135
| `archibus-daily-digest` | 08:00 Mon–Fri | `ollama-11/qwen3.6:27b` | `1491754165335101460` |
136
137
---
138
139
## Odysseus
140
141
Self-hosted AI workspace at `odysseus.carr-family.org`. Port 7000.
142
143
- **Compose:** `/opt/odysseus/docker-compose.yml`
144
- **Data:** `/opt/odysseus/data/` (SQLite, uploads, ChromaDB)
145
- **Bundled:** ChromaDB (127.0.0.1:8100), SearXNG (127.0.0.1:8080), ntfy (127.0.0.1:8091)
146
- **LLM:** via LiteLLM proxy (`http://host.docker.internal:4000/v1`)
147
- **Restart:** `pct exec 109 -- bash -c "cd /opt/odysseus && docker compose restart"`
148
- **Update:** `pct exec 109 -- bash -c "cd /opt/odysseus && git pull && docker compose up -d --build"`
149
150
---
151
152
## Firecrawl
153
154
Web scraping / crawling API.
155
156
- **API:** `http://192.168.2.83:3002`
157
- **API key:** `fc-1d4542a7babd39e33b04ce858af45295`
158
- **Compose:** `/opt/firecrawl/`
159
- **Restart:** `pct exec 109 -- bash -c "cd /opt/firecrawl && docker compose up -d"`
160
161
---
162
163
## Whisper Transcription
164
165
`faster-whisper-server` — OpenAI-compatible `/v1/audio/transcriptions`. Used by the Audio Recorder.
166
167
- **Port:** 8001 (host-mode)
168
- **Model:** `base` (cached at `/tank/appdata/whisper/models/`)
169
- **Compose:** `/opt/whisper/docker-compose.yml`
170
- **Restart:** `pct exec 109 -- bash -c "cd /opt/whisper && docker compose restart"`
171
172
---
173
174
## Proton Bridge (SMTP/IMAP Relay)
175
176
Headless Proton Bridge for outbound email from gcjobs-filler, Calibre-Web, etc.
177
178
- **SMTP:** `192.168.2.83:1025` (STARTTLS)
179
- **IMAP:** `192.168.2.83:1143` (STARTTLS)
180
- **Credentials:** `[email protected]` / `8A2SC9qao04GsSqBrfjtFg`
181
- **Compose:** `/opt/proton-bridge/docker-compose.yml`
182
- **Restart:** `pct exec 109 -- bash -c "rm -f /opt/proton-bridge/data/.cache/protonmail/bridge-v3/bridge-v3.lock && cd /opt/proton-bridge && docker compose restart"`