Commit graph

160 commits

Author SHA1 Message Date
Brian Pooe
2fa6de1d4c feat(immich): add external library volume mount for NAS photo recovery
Adds IMMICH_EXTERNAL_LIBRARY volume (mounted read-only at /mnt/external
in the container) so existing photos stored outside the upload folder
can be imported as an external library without triggering Immich's
upload-folder restriction.

Documents the API-based external library creation workflow in README.
2026-06-27 12:10:25 +02:00
Brian Pooe
ac6726c880 fix(immich): fix duplicate reservations key in machine-learning deploy block 2026-06-27 11:18:40 +02:00
Brian Pooe
6099da80f8 fix(immich): add DISABLE_PASSWORD_LOGIN, fix OIDC_AUTO_REDIRECT default, document PKCE 2026-06-27 11:17:22 +02:00
Brian Pooe
c1403bf9b3 fix(immich): align template and docs with official install guide
- Fix upload container path: /usr/src/app/upload -> /data
- Update Redis image: redis:6.2-alpine -> valkey/valkey:9
- Update DB image: tensorchord/pgvecto-rs -> ghcr.io/immich-app/postgres vectorchord
- Fix DB_HOSTNAME: immich-postgres -> database (Docker service name)
- Fix REDIS_HOSTNAME: immich-redis -> redis (Docker service name)
- Replace DOCKERCONFDIR with dedicated IMMICH_DATA_DIR variable
2026-06-27 11:08:09 +02:00
Brian Pooe
f2466096f1 docs(immich): remove arr-stack references, use /opt/immich/appdata paths 2026-06-27 11:00:54 +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
4db6fdc36b Fix WebSocket for UDM and UNAS by stripping Origin header
UniFi devices validate the Origin header on WebSocket upgrades and reject
connections where it doesn't match their own hostname, causing real-time
dashboard stats to show N/A. Add unifi-upstream snippet that strips Origin
before forwarding, and apply it to both udm and unas proxy blocks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:15:22 +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
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
adf98ff727 Move arr-stack from Synology (10.0.10.24) to LXC 101 (10.0.10.20)
Update all media stack reverse proxy upstreams from .24 to .20 and rename
the section header from "Synology Media Stack" to "Arr Stack (LXC 101, 10.0.10.20)".

On the Caddy host: git pull, re-render Caddyfile, validate, and reload:
  ./substitute_env.sh docker-compose-files/caddy/Caddyfile_template docker-compose-files/caddy/Caddyfile .env
  chmod 644 docker-compose-files/caddy/Caddyfile
  docker compose -f docker-compose.caddy.yml exec caddy caddy validate --config /etc/caddy/Caddyfile
  docker compose -f docker-compose.caddy.yml exec caddy caddy reload --config /etc/caddy/Caddyfile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 15:39:07 +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
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
2bedd9f7b2 Update Immich data share naming to immich_data 2026-06-16 17:52:03 +02:00
Brian Pooe
fccb2220ad Update Immich configuration for dedicated UNAS share 2026-06-16 17:51:19 +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
396df066d4 Document Recyclarr bootstrap sequence 2026-06-15 22:16:56 +02:00
Brian Pooe
b0730b342f Align Arr Stack storage with TRaSH Guides 2026-06-15 22:12:17 +02:00
Brian Pooe
21db349dbd Document Arr Stack environment variables 2026-06-15 21:54:29 +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
Brian Pooe
1a851eb5dd Document VLAN DNS DNAT rules and Caddy client VLAN access
Add exact UniFi 9.x NAT panel steps for DNS DNAT redirect (FAMILY, MEDIA,
IOT, GUEST) and verification procedure to the zone migration guide. Add
Client VLAN Access section to the Caddy README with firewall rules for
FAMILY and MEDIA to reach Caddy over HTTPS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 18:40:23 +02:00
Brian Pooe
1ac9c72619 Clarify latest Technitium UDM setup 2026-06-15 16:08:52 +02:00
Brian Pooe
beb6eb1ed3 Document UDM Technitium DNS rollout 2026-06-15 11:27:32 +02:00
Brian Pooe
7628ddac36 Update DNS host deployment details 2026-06-15 11:19:21 +02:00
Brian Pooe
708f260cfc Standardize stack deployment guides 2026-06-15 10:53:29 +02:00
Brian Pooe
40cd9f6788 Simplify Technitium deployment guide 2026-06-15 10:39:59 +02:00
Brian Pooe
50ed8305d5 Simplify Caddy deployment guide 2026-06-15 10:32:52 +02:00
Brian Pooe
02f061f238 Feature-slice Caddy configuration 2026-06-13 17:47:19 +02:00
Brian Pooe
a2fe91b125 feat: caddy setup 2026-06-13 17:41:31 +02:00
Brian Pooe
6b343a593c Add Raspberry Pi Caddy deployment 2026-06-13 17:25:27 +02:00
Brian Pooe
71f4b838fd Document phased UDM Pro SE zone migration 2026-06-13 17:09:02 +02:00
Brian Pooe
5148bbe47f Update Technitium deployment documentation 2026-06-13 16:15:32 +02:00
Brian Pooe
d99d21263a fix: documentation alignment to new hardware 2026-06-12 18:14:16 +02:00
Brian Pooe
ad260360dc feat: adapt arr storage for Proxmox LXC 2026-06-11 21:20:58 +02:00
Brian Pooe
5b28d31107 fix: persist zigbee2mqtt network config and device names across restarts
- Replace GENERATE placeholders with actual pan_id/network_key values
- Add known devices with friendly names to template
- Setup script now skips zigbee2mqtt config copy if file already exists,
  preventing configuration-adapter mismatch on redeploy
2026-04-05 13:31:23 +02:00
Brian Pooe
42be903bb6 feat: added mobile app integration 2026-04-05 10:18:04 +02:00
Brian Pooe
7bea9a1787 fix: use absolute build context path so docker compose finds the Dockerfile
The compose file is generated one level above the repo, so a relative
path like ./docker-compose-files/node-red resolves to the wrong directory.
The setup script now injects the absolute path to the Dockerfile directory
as NODE_RED_BUILD_CONTEXT at generation time.
2026-04-04 15:17:11 +02:00
Brian Pooe
3069b90de4 fix: track Dockerfile in git and add gitignore exception
The gitignore pattern for docker-compose-files excluded all files except
templates and config dirs — Dockerfile was silently ignored. Added
!docker-compose-files/**/Dockerfile exception so custom images are tracked.
2026-04-04 15:02:57 +02:00
Brian Pooe
faa3bcdfae feat: add standalone Node-RED stack with Home Assistant integration
- Custom Dockerfile installs node-red-contrib-home-assistant-websocket
  into the base image (not /data) to avoid volume mount conflicts
- Joins ha-network so Node-RED reaches homeassistant:8123 by container name
- HA_URL and HA_TOKEN passed as env vars so the token stays out of flow files;
  use $(HA_URL) and $(HA_TOKEN) when configuring the server node in the editor
- credentialSecret substituted at setup time via setup-node-red.sh, consistent
  with the rest of the project; auto-generates NODE_RED_CREDENTIAL_SECRET if absent
- appdata/node-red owned by uid 1000 to match the container user
- README updated with stack docs, env vars, and deployment steps
2026-04-04 15:01:53 +02:00
Brian Pooe
995628cd41 fix: correct adapter for SLZB-06U 2026-04-01 22:30:06 +02:00
Brian Pooe
e24006dd49 refactor: remove all Synology-specific labels, comments, and references 2026-03-31 19:36:24 +02:00
Brian Pooe
c8341768eb refactor: make socket-proxy generic, remove synology-specific labels and comments 2026-03-30 22:20:06 +02:00