Claude_Homelab/00_index.md

213 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 00 — Master Index
> Last updated: 2026-07-28
> Quick-reference card for Claude. Read this first, then load specific files only as needed.
---
## 🏠 Infrastructure Constants
| Key | Value |
|---|---|
| **Proxmox host** | `192.168.1.48:8006` |
| **Gateway** | `192.168.1.1` |
| **NAS** | `192.168.1.12` (Synology, spendlikstation.local) |
| **Domain** | `spendlik.sk` |
| **WebSupport service ID** | `15056760` |
| **Gitea owner** | `spendlik` |
| **MCP server** | `mcp.spendlik.sk` (CT 112, port 3500) |
| **Proxmox kernel** | `6.14.11-5-pve` PINNED — 6.17.x and 7.0.x installed but won't boot |
---
## 🖥️ Container & VM Inventory
| ID | Hostname | IP | Domain | Purpose |
|---|---|---|---|---|
| 100 | n8n | 192.168.1.29 | automation.spendlik.sk | Workflow automation (Authelia protected) |
| 101 | reverse-proxy | 192.168.1.10 | — | nginx reverse proxy for all services |
| 102 | authelia | 192.168.1.50 | auth.spendlik.sk | SSO / 2FA gateway |
| 103 | matrix-synapse | 192.168.1.60 | matrix.spendlik.sk | Self-hosted messaging |
| 104 | snappymail | 192.168.1.55 | email.spendlik.sk | Webmail (Authelia protected) |
| 105 | audiobookshelf | 192.168.1.70 | books.spendlik.sk | Ebooks / audiobooks (NAS bind mount) |
| 106 | jellyfin | 192.168.1.75 | jellyfin.spendlik.sk | Media server (NAS NFS mount) |
| 107 | wireguard | 192.168.1.80 | — | VPN (UDP 51820) |
| 108 | ddns | 192.168.1.95 | — | DDNS updater (WebSupport API v2) |
| 109 | gitea | 192.168.1.90 | git.spendlik.sk | Self-hosted Git (v1.22.6, code indexer enabled) |
| 110 | windows11 (VM) | 192.168.1.227 | — | RTX 4060 passthrough, Rhino 7 + Sunshine/Moonlight |
| 111 | paperless | 192.168.1.111 | paperless.spendlik.sk | Document management (6-lang OCR, media+data on NAS) |
| 112 | mcp-server | 192.168.1.100 | mcp.spendlik.sk | MCP bridge — Proxmox + Gitea tools for Claude |
| 113 | stirling-pdf | 192.168.1.113 | pdf.spendlik.sk | PDF toolkit — preprocessing for Paperless pipeline |
| 115 | vaultwarden | 192.168.1.115 | vault.spendlik.sk | Password manager (Vaultwarden, Docker, Bitwarden-compatible) |
> ⚠️ CT 114 (Koillection) and CT 117 (Radicale) have deployment guides written but are **NOT yet deployed** — do not treat as live infrastructure. They will be added to this table once physically provisioned.
> Next available CT ID: **116** (Bookmark Manager, undecided tool) · CT 114 and 117 reserved for Koillection / Radicale respectively.
---
## 🌐 WebSupport DNS Record IDs
Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map: `secrets-index.md`.
| Subdomain | Record ID |
|---|---|
| spendlik.sk | 12631197 |
| *.spendlik.sk | 12631200 |
| automation.spendlik.sk | 306256338 |
| matrix.spendlik.sk | 307776273 |
| email.spendlik.sk | 308845857 |
| auth.spendlik.sk | 308994393 |
| books.spendlik.sk | 311013228 |
| jellyfin.spendlik.sk | 311384664 |
| git.spendlik.sk | 323271195 |
| mcp.spendlik.sk | 327475181 |
| paperless.spendlik.sk | 328109687 |
| vault.spendlik.sk | 330343277 |
| pdf.spendlik.sk | *(add after DNS record created in WebSupport)* |
| collections.spendlik.sk | *(add after DNS record created in WebSupport — Koillection not yet deployed)* |
| cal.spendlik.sk | *(add after DNS record created in WebSupport — Radicale not yet deployed)* |
> ⚠️ When adding a new subdomain: (1) create A record in WebSupport admin, (2) add to DDNS script with record ID, (3) add nginx vhost in CT 101, (4) run certbot, (5) inspect nginx config after certbot.
---
## 💻 Devices
| Device | OS | Key Detail |
|---|---|---|
| Main PC | CachyOS (Arch), KDE Plasma 6 / Wayland | i7-13700K, RTX 4060 Ti, 32GB DDR5 |
| Galaxy S25 | Android | WireGuard VPN client; MGit for Obsidian sync; Bitwarden |
| Galaxy Tab S9 | Android | MGit for Obsidian sync; Bitwarden |
| Bambu A1 + AMS Lite | — | LAN Only Mode, OrcaSlicer |
---
## 📁 Documentation Map
| File | Covers |
|---|---|
| `homelab-overview.md` | Hardware specs, full container/VM table, NAS mounts, network diagram |
| `cachy-overview.md` | CachyOS main PC — hardware, software, kernel, services, keyboard customisation |
| `services.json` | Structured inventory of all containers/VMs — IPs, ports, stacks, compose paths |
| `secrets-index.md` | Map of service credentials and WHERE they are stored (no actual secrets) |
| `111_paperless_deployment.md` | CT 111 — Paperless-ngx Docker deploy, NAS migration, OCR, troubleshooting |
| `113_stirling_pdf_deployment.md` | CT 113 — Stirling PDF Docker deploy, nginx, SSL, n8n API integration |
| `114_koillection_deployment.md` | CT 114 — Koillection Docker deploy, NAS uploads mount, collection setup — **guide only, not yet deployed** |
| `115_vaultwarden_deployment.md` | CT 115 — Vaultwarden Docker deploy, nginx, SSL |
| `117_radicale_deployment.md` | CT 117 — Radicale CalDAV/CardDAV deploy, nginx, SSL, Thunderbird/DAVx⁵ clients — **guide only, not yet deployed** |
> 💡 Load only the file(s) relevant to the current task. Do not load all files by default.
> 💡 Use `gitea_search_content` to find relevant files by keyword instead of guessing filenames.
> 💡 Files `01_` through `11_` referenced previously do not exist — they were placeholders never written.
> 💡 For "is CT X running/deployed right now" questions, don't read docs — call `proxmox_list_containers` directly (single cheap live call, always accurate).
---
## 🔑 Key Gotchas
| Area | Warning |
|---|---|
| **nginx / certbot** | Certbot corrupts configs — always inspect after issuance; check for duplicate `server_name` and missing closing braces |
| **NFS mounts** | Use `soft,timeo=30,retrans=3` — hard NFS can freeze Proxmox host |
| **DDNS script** | `/tmp/ddns_last_ip` cache persists at runtime; cleared on reboot |
| **WebSupport DNS** | Two separate management pages — missing the second caused an outage. DNS A record must exist before certbot can verify. Always update both pages. |
| **Gitea writes** | Always read file content before writing — writes replace entire file |
| **Proxmox kernel** | PINNED to `6.14.11-5-pve`. Do NOT unpin or upgrade without verifying NVIDIA 550 DKMS support first |
| **OpenRGB** | Uninstalled — SMBus interaction with ADATA XPG GAMMIX D35 poses hardware risk. Do not reinstall. |
| **Hairpin NAT** | Slovak Telekom router blocks hairpin — test external domains from mobile data, not LAN |
| **WebSupport API auth** | HMAC-SHA1 signed requests; `X-Date` header in `YYYYMMDDTHHmmSSZ` format; service ID is numeric `15056760` |
| **kocka-novinky.sk** | Wordfence blocks login — keep disabled. wp-config.php WP_SITEURL/WP_HOME hardcoded. Zen browser Content-Encoding issue — use Firefox/Chrome. |
| **Paperless consume** | File watcher only detects new files — use `document_consumer --oneshot` for bulk imports |
| **LXC Docker** | Requires `--unprivileged 0 --features nesting=1` for Docker to work inside container |
| **Stirling PDF nginx** | Set `client_max_body_size 100M` — large PDFs will be rejected without it |
| **Stirling PDF + Authelia** | Add `/api/*` bypass rule before catch-all 2FA rule — required for n8n API access |
| **Koillection HTTPS** | Set `HTTPS_ENABLED=1` in `.env` and restart the container after SSL is in place — otherwise redirect loops |
| **Koillection upgrades** | Always back up PostgreSQL DB before upgrading — data migrations can have edge cases |
| **Radicale + Authelia** | CalDAV clients use Basic Auth on every request, not browser SSO — bypass Authelia for `cal.spendlik.sk`, rely on Radicale htpasswd + HTTPS instead |
| **pveproxy crash** | `Can't call method "process" on an undefined value at pveproxy.pm line 304` — seen 2026-07-28, likely NFS-cascade freeze (host + SSH fully unresponsive). Fix: physical power cycle. Confirmed **all CTs (100115) + VM 110 now set to "Start at boot"** as of 2026-07-28, so recovery should be automatic next time. |
---
## 🔄 Active Projects (as of 2026-07-28)
| Project | Next Action | Reference |
|---|---|---|
| kocka-novinky.sk automation | Build n8n POC: Brickset → Claude API → WordPress lego-set + post | CT 100 |
| Paperless-ngx | ~730 docs processing; next: Gemini post-processing setup | CT 111 |
| Gemini post-processing | Get Gemini API key → install Python package in CT 111 | CT 111 |
| WireGuard DDNS | Add `vpn.spendlik.sk` DNS record + update CT 108 script | CT 107/108 |
| Bookmark manager | Decide tool → deploy CT 116 | CT 116 (free) |
| Authelia enforcement | Extend 2FA to Jellyfin, Audiobookshelf, Gitea | CT 102/101 |
| Koillection | Guide written (`114_koillection_deployment.md`) — not yet deployed | CT 114 |
| Radicale (CalDAV) | Guide written (`117_radicale_deployment.md`) — not yet deployed | CT 117 |
| Investigate pveproxy/NFS crash | Check dmesg/NFS logs around 2026-07-28 16:4517:40 UTC to confirm root cause | Proxmox host |
> Full task list: `obsidian-vault/Tasks.md`
---
## 🧠 Life OS — Obsidian Vault Structure
| Folder | Purpose |
|---|---|
| `00 Inbox` | Capture everything first |
| `01 Goals` | Long-term goals |
| `02 Projects` | Active projects (each has its own `.md`) |
| `03 Areas` | Ongoing responsibilities (Homelab, Main PC, Personal Admin) |
| `04 Daily Notes` | Daily log |
| `05 Resources` | Reference material |
| `06 Archive` | Completed projects |
| `Tasks.md` | Master task dashboard (hand-curated) |
**Sync**: Obsidian Git plugin on PC → Gitea `spendlik/obsidian-vault`; MGit on Android
### 📋 Vault Quick Reference — Known File Paths
| File | Purpose |
|---|---|
| `Tasks.md` | Live task dashboard |
| `05 Resources/Possible Purchases.md` | Purchase wishlist |
| `05 Resources/3D Print Queue.md` | 3D print job queue |
| `05 Resources/Proxmox LXC Templates.md` | LXC template reference |
| `03 Areas/Personal Admin.md` | Personal admin tasks |
| `03 Areas/Homelab.md` | Homelab recurring tasks |
| `03 Areas/Main PC.md` | CachyOS main PC tasks |
---
## 🛠️ Automation & Tools Stack
| Layer | Tool | Location |
|---|---|---|
| Scheduling / plumbing | n8n | CT 100 / automation.spendlik.sk |
| AI content generation | Claude API (claude-sonnet-4-20250514) | via n8n HTTP node |
| Agentic coding assistant | Claude Code 2.1.173 | CachyOS / VSCodium extension |
| MCP tools | Proxmox + Gitea + search | CT 112 / mcp.spendlik.sk |
| Notifications | Matrix | CT 103 / matrix.spendlik.sk |
| DNS management | WebSupport REST API v2 | CT 108 |
| Password manager | Vaultwarden | CT 115 / vault.spendlik.sk |
| Affiliate site | WordPress on WebSupport | kocka-novinky.sk |
### MCP Tools Available
| Tool | Description |
|---|---|
| `proxmox_list_containers` | List all LXC/VMs with status |
| `proxmox_get_resources` | Node CPU/RAM/disk usage |
| `proxmox_get_container_status` | Status of specific CT by vmid |
| `proxmox_start_container` | Start a stopped CT |
| `proxmox_stop_container` | Stop a running CT |
| `gitea_list_repos` | List repos for a user |
| `gitea_read_file` | Read file from any repo |
| `gitea_write_file` | Write/update file in any repo |
| `gitea_list_files` | List files in a repo directory |
| `gitea_search_content` | Full-text search across all .md files in a repo |
---
## 🗃️ Gitea Repositories
| Repo | Visibility | Purpose |
|---|---|---|
| `Claude_Homelab` | Public | Infrastructure docs, deploy guides, this index |
| `obsidian-vault` | Private | Life OS / second brain / task dashboard |