Decision log
Every committed call, tagged by state.
① Host public side-projects on a deploy platform. ② Host self-hosted Google Photos with backups. Everything else (smart home, media) is phase 2.
The public edge runs at home, not on a rented server. Committed; specs decided later.
Confirmed: the Istanbul line has a public IP; a static one is obtainable if needed. Gate resolved — Pangolin-at-home is viable.
Docker-Compose-native PaaS for side projects (git-deploy, DBs, built-in backups). No Kubernetes for real workloads; k3s stays a learning sandbox option.
One write-active instance in Istanbul. No dual-write / split-brain. Tallinn holds copies, never a second writer.
1 active Istanbul · 1 passive Istanbul (LAN restic) · 2 passive Tallinn (offsite restic + LAN copy). Passive boxes are dumb storage — cheap hardware.
Dedup + client-side encryption. Multi-target job: pg_dump → NAS 2 (LAN) + NAS 3 (mesh); NAS 4 copies NAS 3 on brother’s LAN. Initial full sync is the one-time bandwidth cost.
Pangolin covers edge + mesh + device access. Headscale/Tailscale dropped. Accepted tradeoff: Pangolin down = public access + backup pipe down.
Uptime Kuma + Grafana/Prometheus for services; healthchecks-style pings on backup jobs. Backup failure alerts are mandatory.
Pangolin + Dokploy + Immich on NAS 1. Pangolin kept as an isolated compose project so the A→B migration (dedicated edge box) stays a ~1h job. Exit path preserved.
The homelab documentation lives as a static site — free tier, auto-HTTPS, custom domain via the DNS already needed.
CPU / RAM / disks per box not yet sized. Contract: NAS 1 needs headroom (Immich ML + Dokploy + edge); NAS 2–4 are dumb storage.
Registrar + DNS provider for the public edge (e.g. app.yourdomain.com). TBD.
First full library push Istanbul → Tallinn is days on residential upload. Plan as a scheduled one-time transfer before daily deltas.
Evaluating. TrueNAS SCALE as the base OS: ZFS checksums, snapshots, web UI, SMART alerts. The active box runs Dokploy / Pangolin / Immich on top — workable, but TrueNAS adds an app-management layer to integrate with. 3-disk mirror = triple RAID-1: survives two disk failures, uses 1/3 of raw capacity. Not yet committed.
restic multi-target scales beyond the 4 NAS: Backblaze B2 / Cloudflare R2 adds a true third failure domain (client-side encrypted); another homelab or friend’s box adds another offsite leg. Each copy is a full-capacity repo — dedup is per-repo. Cost/benefit to size before committing.
Family photos reachable from any browser at a public URL, gated by “Login with Google” (OAuth2) at the Pangolin edge — optionally restricted to specific Google accounts or a domain. Photos join the public exposure zone: patching, monitoring, and auth review are now mandatory for them.