Add CT 114 (koillection) to live inventory as in-progress; document CNAME DNS architecture; add template-version gotcha; reference new Pre-Flight Verification protocol; note CT 113 discrepancy as active investigation item

This commit is contained in:
Spendlik 2026-08-11 08:54:26 +00:00
parent ba14505f2f
commit 2d1247fda2

View File

@ -1,5 +1,5 @@
# 00 — Master Index
> Last updated: 2026-08-10
> Last updated: 2026-08-11
> Quick-reference card for Claude. Read this first, then load specific files only as needed.
---
@ -36,17 +36,19 @@
| 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 |
| 114 | koillection | 192.168.1.114 | collections.spendlik.sk | Collection manager — CT created 2026-08-11, **app deployment in progress** (Docker/Koillection/nginx/SSL/DNS still pending, see `114_koillection_deployment.md`) |
| 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.
> ⚠️ CT 117 (Radicale) has a deployment guide written but is **NOT yet deployed** — do not treat as live infrastructure. It will be added to this table once physically provisioned.
> ⚠️ CT 113 (stirling-pdf) is documented elsewhere in this repo but does **not** appear in live `proxmox_list_containers` output as of 2026-08-11 — flagged for investigation, do not assume it's running without checking live state first.
> Next available CT ID: **116** (Bookmark Manager, undecided tool) · CT 117 reserved for Radicale.
---
## 🌐 WebSupport DNS Record IDs
Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map: `secrets-index.md`.
> Since 2026-08-10: all subdomains are **CNAME → spendlik.sk**; only the root record holds an IP and is updated by the DDNS script. See `homelab-overview.md` DNS architecture section.
| Subdomain | Record ID |
|---|---|
@ -63,10 +65,10 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| 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)* |
| collections.spendlik.sk | *(add after CNAME record created in WebSupport — Koillection app deployment in progress)* |
| 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.
> ⚠️ When adding a new subdomain: (1) create **CNAME** record → `spendlik.sk` in WebSupport admin (never a per-subdomain A record), (2) add nginx vhost in CT 101, (3) run certbot, (4) inspect nginx config after certbot. No DDNS script edit needed — see above.
---
@ -85,13 +87,13 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| File | Covers |
|---|---|
| `homelab-overview.md` | Hardware specs, full container/VM table, NAS mounts, network diagram |
| `homelab-overview.md` | Hardware specs, full container/VM table, NAS mounts, network diagram, **DNS architecture (CNAME-based, updated 2026-08-10)** |
| `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 |
| `PROJECT_INSTRUCTIONS.md` | Canonical behavioural/methodology reference — decision defaults, checklists, gotchas, **Pre-Flight Verification protocol (added 2026-08-11)** |
| `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** |
| `114_koillection_deployment.md` | CT 114 — Koillection Docker deploy, NAS uploads mount, collection setup — **IN PROGRESS: CT created 2026-08-11, app install pending** |
| `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** |
@ -99,6 +101,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
> 💡 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).
> 💡 Before running Phase 1 of any not-yet-executed deploy guide, verify volatile values (LXC template version, DNS record type) against `homelab-overview.md` and `obsidian-vault/05 Resources/Proxmox LXC Templates.md` — guides can go stale. See `PROJECT_INSTRUCTIONS.md` → Pre-Flight Verification.
---
@ -108,13 +111,14 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
|---|---|
| **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. |
| **WebSupport DNS — duplicate A values** | WebSupport rejects (422) writing an A record whose IP value already exists on *any other record* in the zone, regardless of hostname. You cannot have two A records pointing at the same IP anywhere in the zone. Fix: all subdomains use CNAME → `spendlik.sk`; only the root A record ever holds an IP. |
| **DDNS script** | `/tmp/ddns_last_ip` cache persists at runtime; cleared on reboot. Since 2026-08-10 only updates the root A record — no per-subdomain edits needed. |
| **WebSupport DNS** | Two separate management pages — missing the second caused an outage. DNS record must exist before certbot can verify. Always update both pages. |
| **WebSupport DNS — subdomains are CNAME-only** | Since 2026-08-10: all `*.spendlik.sk` subdomains are CNAME → `spendlik.sk`. Only the root A record ever holds an IP — WebSupport rejects (422) writing an A record whose IP value already exists on *any other record* in the zone. |
| **WebSupport API — PUT silently resets `name`** | A `PUT` to `/v2/service/{id}/dns/record/{recordId}` that omits the `name` field does NOT preserve the existing name — it silently renames the record to the bare zone apex. Always include `name` explicitly in PUT payloads, or avoid partial-field updates. |
| **WebSupport API — POST `name` is relative** | Creating a record via POST: `name` is relative to the zone, not a full FQDN. Passing `"email.spendlik.sk"` creates `email.spendlik.sk.spendlik.sk`. Use the bare subdomain only (`"email"`, `"*"`, `"git"`). |
| **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 |
| **LXC template versions** | Verify exact template filename in `obsidian-vault/05 Resources/Proxmox LXC Templates.md` (or live `pveam list local`) before every `pct create` — versions bump periodically and guides can reference stale strings. Once a container is created, template version is irrelevant — `apt upgrade` keeps it current, no need to recreate existing containers on a newer template. |
| **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` |
@ -130,19 +134,20 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
---
## 🔄 Active Projects (as of 2026-07-28)
## 🔄 Active Projects (as of 2026-08-11)
| Project | Next Action | Reference |
|---|---|---|
| Koillection | CT 114 created 2026-08-11 — continue with Phase 2 (Docker install) onward | CT 114 |
| 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 |
| Investigate CT 113 discrepancy | Documented as deployed but absent from live `proxmox_list_containers` — confirm actual state | CT 113 |
> Full task list: `obsidian-vault/Tasks.md`
@ -170,7 +175,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| `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 |
| `05 Resources/Proxmox LXC Templates.md` | LXC template reference **verify before every `pct create`** |
| `03 Areas/Personal Admin.md` | Personal admin tasks |
| `03 Areas/Homelab.md` | Homelab recurring tasks |
| `03 Areas/Main PC.md` | CachyOS main PC tasks |