Commit graph

113 commits

Author SHA1 Message Date
a7de8cec3a docs(network): document IoT->Caddy path for HA's Forgejo git access
Home Assistant now pulls homelab-blueprint from Forgejo through Caddy,
which needed both a UniFi zone rule (IoT -> CADDY) and a ufw allow on
the Caddy host itself for the IoT subnet — two independent enforcement
layers, both previously missing/misconfigured.
2026-07-19 14:36:00 +02:00
73ff919b9f feat(forgejo): remove gitea-mirror, all repos now first-class
GitHub mirroring is no longer needed now that Forgejo is the primary
remote. Drops the gitea-mirror service, its volume, env vars, Caddy
site, and firewall rule; docs updated to match.
2026-07-19 13:21:05 +02:00
d4d4500c35 docs(network): add Forgejo to Caddy firewall policy table 2026-07-18 22:41:31 +02:00
a261778b05 feat: add Forgejo stack with GitHub mirroring and Zitadel OIDC support
Self-hosted Git service (Postgres-backed) plus gitea-mirror for automatic
GitHub repo mirroring. Storage split follows the Paperless pattern: DB and
app config on local disk, git objects/LFS/attachments/avatars on the UNAS
forgejo_data share. Wired into the Makefile, root README, and UNAS NFS docs;
adds Caddy routes for git.<domain> and git-mirror.<domain>.
2026-07-18 22:39:57 +02:00
44decc4b26 feat: remove Rackula stack 2026-07-11 16:42:28 +02:00
ffb141f1f0 feat: remove SnapOtter stack 2026-07-11 16:24:34 +02:00
Brian Pooe
3a314b16d6 feat: add Koffan, Rackula, and SnapOtter stacks; expose Hermes dashboard
- new compose templates + READMEs for the three LXC apps (110-112)
- Makefile deploy targets (rackula pre-owns its data dir for uid 1001)
- Caddy vhosts for all four, incl. Hermes /auth/login redirect workaround
- firewall docs: CADDY->TRUSTED rules for LXCs 110-113
2026-07-06 20:50:34 +02:00
Brian Pooe
c8d43957c1 docs(network): add IT-Tools to public SSO exposure, note host-derived redirect 2026-07-06 19:41:03 +02:00
Brian Pooe
d8f549714e docs(network): document public app exposure with Zitadel SSO via VPS 2026-07-06 19:33:40 +02:00
Brian Pooe
5f1e762e03 docs(network): add Caddy firewall rules for the four new LXC apps
Drop the removed Drawio rule from the audit doc and fix the Gramps
upstream port to 80.
2026-07-03 18:17:46 +02:00
Brian Pooe
1815beadf4 refactor: restructure docs, sync stacks with Caddyfile, harden compose templates
- Add compose stacks for apps already proxied by Caddy: bento-pdf,
  it-tools, paperless-ngx, and beszel-hub (with Makefile targets)
- Remove the unused Vault stack and the drawio Caddyfile block
- Fix Caddyfile gramps upstream to port 80 to match the compose file
- Bring immich and gramps-web up to the shared template pattern
  (no-new-privileges, log rotation, memory limits, healthchecks)
- Single-quote vaultwarden SSO_AUDIENCE_TRUSTED so regex values like
  ^\d{18}$ render as valid YAML
- Move root docs into kebab-case topic folders, rebuild the docs index
  to cover every doc, and fix all broken links
2026-07-03 17:45:16 +02:00
Brian Pooe
e2f62deb2d Document Youtarr SMB storage mount 2026-06-28 13:40:08 +02:00
Brian Pooe
cdd4874bf1 Document and proxy Youtarr deployment 2026-06-28 11:59:59 +02:00
Brian Pooe
0fca695aa4 Add Youtarr stack and document PhotoSync storage 2026-06-28 11:47:24 +02:00
Brian Pooe
86cfe2aecc docs(immich): add phone-to-NAS mobile sync guide and wire mobile_photos share
Documents the FolderSync/PhotoSync → UNAS Pro → Immich external library
pattern as the workaround for immich-app/immich#4282 (deleted photos
re-uploading on next mobile sync). Includes all steps: UNAS share creation,
Proxmox NFS mount, LXC bind mount, docker-compose volume, Immich library
import path update, and per-app config for Android (FolderSync) and iOS
(PhotoSync).

- Adds docs/immich/mobile-sync.md with full step-by-step guide
- Adds mobile_photos to share map in docs/unas/nfs-mounts.md
- Adds IMMICH_MOBILE_SYNC_DIR volume (/mnt/mobile:ro) to template.yaml
- Documents IMMICH_MOBILE_SYNC_DIR in README.md and .env.sample
2026-06-27 15:31:08 +02:00
Brian Pooe
11935bd02a docs(immich): document OIDC-only login, external library setup, and firewall rule
- Adds OIDC disable-password-login workflow to README (enforce SSO after
  confirming Zitadel PKCE works; clarifies client secret is not needed)
- Expands external library section with user UUID lookup and warning about
  Immich blocking paths under the upload volume
- Adds Allow Caddy to Immich rule (10.0.15.5 → 10.0.10.15:2283) to
  firewall-rules.md
2026-06-27 12:18:12 +02:00
Brian Pooe
02a02498fb docs(network): add Synology NAS and IoT intra-zone firewall rules
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 18:23:28 +02:00
Brian Pooe
d8c31a29c5 docs(arr-stack): document qBittorrent warning fix, TBA import block, and Prowlarr indexer setup
Adds three new troubleshooting sections:
- 5k: qBittorrent ShareLimitAction=Remove warning — config file edit required
  (hotio image API does not persist max_ratio_act to disk)
- 5l: Sonarr TBA title import block — episodeTitleRequired bulkSeasonReleases fix
  and manual rename procedure via pct exec + RescanSeries
- 5m: Prowlarr indexer recommendations — usenet retention gaps, public torrent
  fallback indexers (EZTV, 1337x, Knaben, TPB), FlareSolverr requirement for
  Cloudflare-protected indexers, and priority ordering

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 15:15:20 +02:00
Brian Pooe
3554f11f9c docs(network): replace rack layout ASCII with Mermaid, drop zones migration doc
Updated rack order reflects current hardware (UDM Pro SE in place, dual Pi 4B shelf,
USW-Lite moved to shelf 9). Removed udm-pro-zones-migration.md — migration complete.
README links updated to point to firewall-rules.md instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 22:32:39 +02:00
Brian Pooe
781b75d7ac docs(network): update firewall policies with verified custom rules, return traffic states, and seerr ports 2026-06-21 22:10:53 +02:00
Brian Pooe
bba03c675a Fix arr-stack OOM kills and decluttarr auth for 25 GB downloads
- qbittorrent memory limit 1G → 3G: piece-verification buffers for 25 GB+
  torrents exceed 1G and trigger cgroup OOM kill mid-download
- bazarr, prowlarr, seerr limits 512M → 1G: all three were at 40-67% at
  idle with insufficient headroom for subtitle batch events, RSS floods,
  and Emby library syncs respectively
- Add *media-data-mount and storage-guard dependency to decluttarr so
  detect_deletions can access /data/media paths
- Fix decluttarr auth ban loop: add Docker bridge 172.18.0.0/16 to
  qBittorrent WebUI auth subnet whitelist (applied live via API)
- Update README mount table (Decluttarr now gets /data/media), memory
  limit table with per-service rationale sized for 25 GB average files
- Add TROUBLESHOOTING sections 5e-5j covering qBittorrent path issues,
  OOM kill pattern, and decluttarr auth ban loop with fixes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 17:52:19 +02:00
Brian Pooe
de3a23c990 Add NVIDIA device init to LXC boot dependency doc
nvidia-smi must run before LXC 101 starts to create /dev/nvidia0 and
/dev/nvidia-caps/*. Without it emby fails with nvml insufficient
permissions even though kernel modules are loaded. Documents the
nvidia-init.service and the updated LXC 101 drop-in that requires both
NFS and NVIDIA to be ready before the container starts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 12:04:48 +02:00
Brian Pooe
2e7ce470b5 Document NFS LXC boot dependency fix for UNAS-backed containers
arr-stack (LXC 101) failed to start on boot because the UNAS NFS mount
was not ready when the Proxmox pre-start hook ran. Documents the root
cause, the global fstab timeout fix, and the per-container systemd
drop-in pattern with a checklist for future containers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 11:58:25 +02:00
Brian Pooe
b75a82a979 Correct intra-zone rule advice — keep TRUSTED and IoT Any rules
Removing Allow TRUSTED to TRUSTED Any broke SSH to Technitium,
proving UniFi custom zones do not get the default intra-zone allow.
Mark both intra-zone rules as required, not redundant.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 11:44:21 +02:00
Brian Pooe
d52245f5c6 Add immediate cleanup section to Caddy firewall policy doc
Redundant rules to delete (TRUSTED to TRUSTED, IoT to IoT, CADDY to
Gateway DNS), the FAMILY to CADDY action fix, and a review table for
the direct Emby pinholes that bypass Caddy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:46:37 +02:00
Brian Pooe
3029d2ef66 Add Caddy firewall policy audit doc
Documents the missing and incorrect UniFi policies found during zone
policy review: FAMILY to CADDY action fix, all CADDY to TRUSTED backend
app policies, CADDY to IoT policies, and public DNS block policies per
zone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:42:15 +02:00
Brian Pooe
230e3808bb Rename DMZ zone to CADDY throughout network docs
Reflects the actual deployed zone name in UniFi. Preserves the one
reference to UniFi's built-in DMZ zone in the defaults list (§4).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:31:45 +02:00
Brian Pooe
c4b6fd0783 Add UDM Pro SE and UNAS Pro to Caddyfile
Both use self-signed TLS backends so they get the office-admin-upstream
snippet (tls_insecure_skip_verify). Update firewall backend policy table
in network docs to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 21:43:01 +02:00
Brian Pooe
59f41d8964 Update Caddyfile: switchlite8poe IP, remove tplink16de and speedtest
- switchlite8poe moved to 10.0.1.6
- tplink16de removed (device no longer exists)
- speedtest removed (no longer needed)
- Update firewall backend policy table in network docs to match

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 21:37:32 +02:00
Brian Pooe
7a5e3d562e Document UFW rule ordering requirement for Caddy host hardening
Explicit ufw deny 22/tcp is dangerous — if run before the targeted
allows it lands at the top of the list and locks out SSH. Replace with
default deny incoming policy, consolidate all UFW commands into a single
ordered sequence, and add verification steps and a note explaining why
order matters.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 21:28:54 +02:00
Brian Pooe
34da2eb196 Document deployment lessons from arr-stack LXC build
Four issues encountered during the arr-stack LXC 101 deployment that were not
covered or not clear enough in existing docs:

PROXMOX-NVIDIA-LXC.md — expanded Section 4 into four explicit sub-steps:
  4a: copy installer into LXC via pct push (it lives on the Proxmox host)
  4b: install userspace libs with --no-kernel-module then run ldconfig
  4c: install Container Toolkit (must come after libs, not before)
  4d: switch runtime mode auto→legacy with clear explanation of why CDI fails
      in an LXC even after the libraries are installed

TROUBLESHOOTING.md — new section 5c for the stale gluetun namespace error:
  "joining network namespace of container: No such container"
  Cause: gluetun recreated with new container ID, qbittorrent holds old ID
  Fix: docker rm -f qbittorrent && docker compose up -d qbittorrent
  Renumbered old 5c (HTTPS 502) to 5d

arr-stack README.md — AirVPN preshared key warning in the Installation section:
  AirVPN generates per-server preshared keys; the built-in airvpn provider
  selects a server dynamically so the key never matches → silent VPN failure.
  Documents when and how to use VPN_SERVICE_PROVIDER=custom with a pinned server.

DEPLOYMENT.md — two new sections:
  Section 9: Set a Static IP — via Proxmox .conf net0 line, not inside the LXC
  Section 10: Rename a Container (VMID change) — lvrename + conf file swap

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 15:44:30 +02:00
Brian Pooe
8b546ac123 Support Gluetun custom provider and document NVIDIA legacy mode for LXC
- Add optional WIREGUARD_PUBLIC_KEY, WIREGUARD_ENDPOINT_IP, WIREGUARD_ENDPOINT_PORT
  to gluetun template so custom provider renders cleanly without manual patching
- Make SERVER_COUNTRIES optional (:-) so re-renders don't fail for custom provider
- Document the required mode = "legacy" change in /etc/nvidia-container-runtime/config.toml
  for NVIDIA Container Toolkit in a privileged LXC; the default "auto" CDI mode fails
  until userspace libraries are installed and the mode is explicitly set to legacy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 15:20:54 +02:00
Brian Pooe
e02f79092f Fix arr-stack docs for real-world UNAS NFSv3 constraints
Correct DEPLOYMENT.md fstab entry (vers=3, UUID path, 10.0.10.25) and
add No Root Squash requirement note to the chown step. Fix arr-stack
README to document host-side chown from a privileged LXC instead of
the incorrect unprivileged-LXC warning. Also carries forward nfs-mounts.md
from the previous session.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 14:23:25 +02:00
Brian Pooe
16a5194085 Document persistent NFS mounts for all six UNAS Pro shares and point DOCKERSTORAGEDIR at arr_data
- Add docs/unas/nfs-mounts.md: step-by-step guide covering the UUID-based
  volume path structure, enabling NFS per share in UniFi Drive 4.3.6,
  fstab entries for all six shares, per-LXC bind mount commands, and
  PBS datastore setup for pbs_backup
- Update DOCKERSTORAGEDIR in .env.sample to /mnt/unas/arr_data (was the
  generic /mnt/storage placeholder)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:51:15 +02:00
Brian Pooe
99c4ec1ca2 Document U-NAS in-pool reflink moves 2026-06-18 21:44:23 +02:00
Brian Pooe
b67c32c2e9 Harden strict substitution workflow 2026-06-17 22:15:54 +02:00
Brian Pooe
78f42fc7ca Remove Node-RED stack and associated configurations 2026-06-17 18:42:57 +02:00
Brian Pooe
fc2d5b24ca Standardize UNAS share naming to underscores (arr_data) 2026-06-16 18:08:58 +02:00
Brian Pooe
7dd49a94ab Streamline documentation for privileged LXC and GPU support 2026-06-16 18:01:02 +02:00
Brian Pooe
b972e3fe07 Add Immich template with NVIDIA GPU acceleration support 2026-06-16 17:48:36 +02:00
Brian Pooe
a8c22c8267 Integrate NVIDIA GPU passthrough for Proxmox 9 and arr-stack 2026-06-16 17:15:53 +02:00
Brian Pooe
1ea3c8f8a3 Correct Proxmox storage cleanup order 2026-06-16 13:06:44 +02:00
Brian Pooe
b34d656915 Document duplicate Proxmox storage cleanup 2026-06-16 12:54:59 +02:00
Brian Pooe
72637e3792 Document leftover Proxmox LVM cleanup 2026-06-16 12:50:41 +02:00
Brian Pooe
8e56625726 Document Proxmox NVMe storage layout 2026-06-16 12:40:43 +02:00
Brian Pooe
b0730b342f Align Arr Stack storage with TRaSH Guides 2026-06-15 22:12:17 +02:00
Brian Pooe
2547531125 Document LXC sizing and Gateway exceptions 2026-06-15 21:49:28 +02:00
Brian Pooe
20e4ad095d Use named volumes for application state 2026-06-15 20:07:48 +02:00
Brian Pooe
7de1c4dd60 Document Caddyfile read permissions 2026-06-15 19:53:13 +02:00
Brian Pooe
84be803d1a Correct UniFi DNS enforcement guidance 2026-06-15 19:49:52 +02:00