AI Stack
← Home
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.
Service URLs
| Service | URL | Port |
|---|---|---|
| LiteLLM | litellm.carr-family.org |
4000 (lan-only) |
| n8n | n8n.carr-family.org |
5678 (lan-only) |
| OpenClaw | openclaw.carr-family.org |
18789 (lan-only) |
| Odysseus | odysseus.carr-family.org |
7000 (lan-only) |
| Firecrawl API | — | 192.168.2.83:3002 |
| Whisper | — | 192.168.2.83:8001 |
| Proton Bridge SMTP | — | 192.168.2.83:1025 |
| Proton Bridge IMAP | — | 192.168.2.83:1143 |
Key Paths
| Path | Contents |
|---|---|
/usr/local/bin/hermes |
Hermes agent binary |
/root/.hermes/config.yaml |
Hermes config (model, MCP servers) |
/opt/litellm/config.yaml |
LiteLLM model list + master key |
/opt/litellm/docker-compose.yml |
LiteLLM + Postgres compose |
/opt/ai-tools/docker-compose.yml |
n8n + Qdrant compose |
/opt/n8n/data |
n8n workflows, credentials |
/opt/qdrant/data |
Qdrant vector store |
/opt/firecrawl/ |
Firecrawl compose project |
/root/.openclaw/openclaw.json |
OpenClaw config |
/opt/odysseus/ |
Odysseus compose project |
/opt/whisper/ |
Whisper compose project |
/opt/proton-bridge/ |
Proton Bridge compose project |
/mnt/obsidian/ |
Obsidian vault (read-write bind mount) |
LiteLLM
OpenAI-compatible proxy at litellm.carr-family.org/ui. Compose: /opt/litellm/.
- Master key:
sk-homelab-litellm-admin - UI login: admin /
sk-homelab-litellm-admin - DB: postgres:16-alpine (host port 5433)
- Restart:
pct exec 109 -- bash -c "cd /opt/litellm && docker compose up -d"
Models:
| Model | Backend |
|---|---|
gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini |
OpenAI (direct) |
llama3.1:8b, llama3.2:3b |
Ollama @ 192.168.2.40:11434 (CPU) |
qwen3.6:27b, qwen3.5, ministral-3, llama3.2, llama3.1:8b-gpu |
Ollama @ 192.168.2.11:11434 (RTX 3060) |
llava |
Ollama @ 192.168.2.11 — vision/OCR (paperless-gpt uses llava:7b) |
nomic-embed-text |
Ollama @ 192.168.2.11 — embeddings for Qdrant |
n8n
Workflow automation at n8n.carr-family.org. Compose: /opt/ai-tools/ (n8n + Qdrant).
- Data:
/opt/n8n/data - Restart:
pct exec 109 -- bash -c "cd /opt/ai-tools && docker compose up -d" - Vault mount:
/mnt/obsidian:/mnt/obsidian:roinside container - Code node:
NODE_FUNCTION_ALLOW_BUILTIN=fs,path— required to read vault files
Credentials in n8n:
| Name | Type | Value |
|---|---|---|
| Qdrant Local | Qdrant API | http://qdrant:6333 (no API key) |
| Ollama .11 | Ollama | http://192.168.2.11:11434 |
| LiteLLM OpenAI | OpenAI | Key: sk-homelab-litellm-admin, Base: http://192.168.2.83:4000 |
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.
Key Workflows:
- Obsidian Vault — Ingest to Qdrant — reads all
.mdfrom vault, chunks + embeds into Qdrant. Run manually to re-index. - Obsidian Vault — Chat — chat UI backed by Qdrant RAG + gpt-4o via LiteLLM.
Qdrant
Vector store. Part of /opt/ai-tools/docker-compose.yml.
- Ports: 6333 (HTTP/REST), 6334 (gRPC)
- Data:
/opt/qdrant/data - Collection:
obsidian_vault(vector size: 192, distance: Cosine, model:nomic-embed-text) - Check:
curl http://192.168.2.83:6333/collections/obsidian_vault
Hermes Agent
AI agent with MCP access to the Obsidian vault.
- Binary:
/usr/local/bin/hermes - Default model:
gpt-4ovia LiteLLM - MCP server:
obsidian-vault—mcp-server-filesystem /mnt/obsidian(read/write/search) - Manage MCP:
hermes mcp ls/add/remove - Config:
/root/.hermes/config.yaml,/root/.hermes/.env
OpenClaw
Claude AI desktop client. Version 2026.5.27.
- UI:
openclaw.carr-family.org(lan-only) - Gateway port: 18789, systemd service:
openclaw-gateway.service - Restart:
openclaw daemon restart - Config:
/root/.openclaw/openclaw.json
Model Providers:
| Provider | Backend | Models |
|---|---|---|
openai |
OpenAI API (direct) | gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini |
ollama-11 |
Ollama @ 192.168.2.11 (RTX 3060) | qwen3.6:27b, qwen3.5, ministral-3, llama3.2, llama3.1:8b, llava:7b |
ollama-40 |
Ollama @ 192.168.2.40 (CPU) | llama3.1:8b, llama3.2:3b |
Cron Jobs:
| Job | Schedule | Model | Discord Channel |
|---|---|---|---|
homelab-self-heal |
every 15 min | openai/gpt-4o-mini |
1509897448645201981 |
archibus-daily-digest |
08:00 Mon–Fri | ollama-11/qwen3.6:27b |
1491754165335101460 |
Odysseus
Self-hosted AI workspace at odysseus.carr-family.org. Port 7000.
- Compose:
/opt/odysseus/docker-compose.yml - Data:
/opt/odysseus/data/(SQLite, uploads, ChromaDB) - Bundled: ChromaDB (127.0.0.1:8100), SearXNG (127.0.0.1:8080), ntfy (127.0.0.1:8091)
- LLM: via LiteLLM proxy (
http://host.docker.internal:4000/v1) - Restart:
pct exec 109 -- bash -c "cd /opt/odysseus && docker compose restart" - Update:
pct exec 109 -- bash -c "cd /opt/odysseus && git pull && docker compose up -d --build"
Firecrawl
Web scraping / crawling API.
- API:
http://192.168.2.83:3002 - API key:
fc-1d4542a7babd39e33b04ce858af45295 - Compose:
/opt/firecrawl/ - Restart:
pct exec 109 -- bash -c "cd /opt/firecrawl && docker compose up -d"
Whisper Transcription
faster-whisper-server — OpenAI-compatible /v1/audio/transcriptions. Used by the Audio Recorder.
- Port: 8001 (host-mode)
- Model:
base(cached at/tank/appdata/whisper/models/) - Compose:
/opt/whisper/docker-compose.yml - Restart:
pct exec 109 -- bash -c "cd /opt/whisper && docker compose restart"
Proton Bridge (SMTP/IMAP Relay)
Headless Proton Bridge for outbound email from gcjobs-filler, Calibre-Web, etc.
- SMTP:
192.168.2.83:1025(STARTTLS) - IMAP:
192.168.2.83:1143(STARTTLS) - Credentials:
[email protected]/8A2SC9qao04GsSqBrfjtFg - Compose:
/opt/proton-bridge/docker-compose.yml - 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"
