60 Commits

Author SHA1 Message Date
7a64863ead fix: rewrite Filebar's malformed auth header to unblock login (temporary)
Some checks failed
validate / lint (push) Failing after 1s
Filebar sends its auth only on the legacy X-Emby-Authorization header,
with unquoted values (Client=Filebar instead of Client="Filebar"), and
never sends the Authorization header Jellyfin 12.0 requires to resolve
request.App -- causing every login to 400. Switches the debug proxy to
OpenResty and adds a Lua shim that rewrites just Filebar's requests into
the header format Jellyfin expects (matching SenPlayer's working
requests); everything else passes through unchanged.

This is a workaround for a Filebar bug, not a permanent fix -- see the
TODO in jellyfin-header-debug.yaml to remove it once Filebar ships a
corrected release.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016EQrGkfXFae4PZG9QfPRf4
2026-09-14 16:05:22 +09:00
2c46ae33c9 debug: temporarily route Jellyfin ingress through header-capture proxy
Some checks failed
validate / lint (push) Failing after 1s
Adds a transparent nginx passthrough that logs auth-related request
headers (Authorization, X-Emby-Authorization, X-Emby-Token,
X-MediaBrowser-Token, User-Agent) to diagnose why the Filebar iOS app
gets 400s on /Users/AuthenticateByName against Jellyfin 12.0. All
traffic still reaches the real jellyfin Service unchanged. Revert the
Ingress backend and remove jellyfin-header-debug.yaml once captured.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016EQrGkfXFae4PZG9QfPRf4
2026-09-14 15:51:07 +09:00
40f6d05c4b fix: revert Jellyfin to 12.0 after 10.11.11 rollback broke DB compatibility
Some checks failed
validate / lint (push) Failing after 1s
10.11.11 can't read the schema Jellyfin 12.0 already migrated the config
DB to (SQLite errors on every user query), which broke login entirely.
Pin to 12.0 instead of :latest to restore service and stop future
silent version jumps.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016EQrGkfXFae4PZG9QfPRf4
2026-09-14 15:45:39 +09:00
b995b9f5c4 fix: update Jellyfin image to version 10.11.11
Some checks failed
validate / lint (push) Failing after 8s
2026-09-14 15:42:09 +09:00
663337f818 feat: add workaround for qBittorrent 5.2.0 stale lock issue with init container
Some checks failed
validate / lint (push) Failing after 1s
2026-08-25 22:27:47 +09:00
6f6c3cf0eb feat: decommission legacy gluetun-proxy in favor of browser-vpn-proxy
Some checks failed
validate / lint (push) Failing after 0s
manifests/media/gluetun-proxy.yaml (the standalone Gluetun/OpenVPN
HTTP proxy, NodePort 30888) is now fully replaced by
manifests/multus/30-browser-vpn-proxy.yaml, live and validated
end-to-end (connectivity, DNS-through-proxy, PIA egress, fail-closed
kill switch). Removing the file from git - the live Deployment/Service
still need a separate kubectl delete, since media has prune: false.

Note gluetun.home.arpa (the dashy VPN-IP-banner hostname, and the
Certificate/IngressRoute in qbittorrent.yaml routing it to that pod's
ip-reporter sidecar) is unrelated and unaffected - it never pointed at
this standalone proxy.

Update the root README's VLAN 50 status table with browser-vpn-proxy
and this removal, including the exact commit to restore the old file
from if ever needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 23:48:31 +09:00
9b799c5ea2 docs: drop stale rollback-file references now that rollback/ is removed
Some checks failed
validate / lint (push) Failing after 1s
qbittorrent.yaml and jdownloader.yaml's own header comments still
pointed at manifests/media/rollback/*-gluetun.yaml and described the
migration as pending approval/preconditions - both are live and
validated now, and that directory is being removed (no kept on-disk
Gluetun copy). Rewrite both headers as a status note instead, pointing
rollback at git history (with the exact pre-migration commit) to match
the root README's rollback table, which gets the same exact-commit
treatment here instead of the vaguer reference from the previous
commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 23:00:40 +09:00
756fa120b3 feat: update JDownloader deployment for VLAN 50 migration with enhanced network configuration and egress guard
Some checks failed
validate / lint (push) Failing after 1s
2026-08-24 22:45:08 +09:00
2f7ec5f5b1 feat: migrate qBittorrent deployment to VLAN 50 with Multus integration and enhanced configuration
Some checks failed
validate / lint (push) Failing after 0s
2026-08-24 22:33:45 +09:00
53d02b7522 feat: configure K3s DNS resolver and update firewall rules for new subnet
Some checks failed
validate / lint (push) Failing after 7s
2026-08-23 14:07:49 +09:00
12b3b48e8d fix: update SERVER_REGIONS environment variable for Gluetun to include additional locations
Some checks failed
validate / lint (push) Has been cancelled
2026-08-23 05:53:12 +09:00
7a8c73d78a fix: update fleet IPs after subnet migration to 10.10.40.0/24
Some checks failed
validate / lint (push) Has been cancelled
minisforum, debian, mac-mini, and gpu-node all moved from
192.168.7.0/24 to 10.10.40.0/24. Updates K3s server/agent config and
node IPs (including gpu-node's host_vars override), NFS export
allow-list and exports template, Pi-hole DNS records and
kube-vip/loadBalancerIP pins, WireGuard's pushed DNS/AllowedIPs, and
the NFS server IP baked into Jellyfin/Kavita/gitea-backup PVs and the
Ollama URL used by ai-gateway/Dashy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 05:52:41 +09:00
abc316d7f8 fix: update Gluetun image version to v3.41 for Gluetun, JDownloader, and qBittorrent deployments
Some checks failed
validate / lint (push) Failing after 1s
2026-08-19 01:23:34 +09:00
5512735770 fix: update VPN server regions to use JP Tokyo format for Gluetun, JDownloader, and qBittorrent
Some checks failed
validate / lint (push) Failing after 1s
2026-08-19 01:13:51 +09:00
db862df82c fix: update VPN server regions to include Japan for Gluetun, JDownloader, and qBittorrent
Some checks failed
validate / lint (push) Failing after 1s
2026-08-19 01:11:27 +09:00
36ac94ccf3 fix: increase memory requests and limits for kavita2 deployment
Some checks failed
validate / lint (push) Failing after 0s
2026-08-02 18:10:01 +09:00
0a997367f0 fix: update VPN server regions for JDownloader deployment
Some checks failed
validate / lint (push) Failing after 1s
2026-08-02 03:05:05 +09:00
d31f85f4b3 fix: increase failureThreshold for livenessProbe in Gluetun and qBittorrent deployments
Some checks failed
validate / lint (push) Failing after 0s
2026-08-02 02:32:51 +09:00
bcc697db7e feat: add second Kavita instance with NFS and IngressRoute at books2.home.arpa
Some checks failed
validate / lint (push) Failing after 0s
fix: update Pi-hole configurations to include DNS entry for books2.home.arpa
2026-08-02 02:30:17 +09:00
423d9eacab feat: add Kavita e-book server configuration with NFS and IngressRoute
Some checks failed
validate / lint (push) Failing after 0s
2026-08-02 01:54:23 +09:00
d95806cd32 fix: update JDownloader script to include download password in crawljob format
Some checks failed
validate / lint (push) Failing after 1s
2026-07-26 03:10:50 +09:00
c354e6c39f feat: enhance JDownloader script to handle .torrent files and save them to output directory
Some checks failed
validate / lint (push) Failing after 1s
2026-07-26 02:20:30 +09:00
fb3e2976e2 feat: add documentation for JDownloader integration and package naming
Some checks failed
validate / lint (push) Failing after 1s
2026-07-26 01:47:07 +09:00
c625461e30 fix: update JDownloader script to extract package name from URL for crawljob
Some checks failed
validate / lint (push) Failing after 2s
2026-07-26 01:37:03 +09:00
9dc4bbe249 fix: update JDownloader script to write 'text' instead of 'url' for crawljob
Some checks failed
validate / lint (push) Failing after 1s
2026-07-26 01:29:16 +09:00
a70a3a8014 fix: update cnl-bridge container and service ports from 9666 to 9667
Some checks failed
validate / lint (push) Failing after 1s
2026-07-26 01:01:01 +09:00
f006090fea fix: remove Immich entirely
Some checks failed
validate / lint (push) Failing after 1s
Not used enough to justify chasing the stale-NFS-handle issue on its
photos-art mount. Removes manifests/media/immich.yaml (Namespace, PVCs,
Deployments, Service, Certificate, IngressRoute), its secret script and
sealed secret, immich.home.arpa from both Pi-hole values files, its Dashy
dashboard tile, and all other repo references (READMEs, secrets-leak-scanner
scope, regen-sealed-secret example, .env.example).

Per explicit confirmation: this also means the live namespace's PVCs
(immich-library 50Gi, immich-postgres-data 20Gi, immich-ml-cache 10Gi, all
local-path with Delete reclaim policy) are intended to be deleted along with
it -- any photos actually uploaded to Immich's own library are gone once the
namespace is deleted, separately from the read-only NFS folders it browsed
(untouched either way, those live independently on nik-debian).

Git removal alone does not delete the live cluster resources -- the media
Application has prune: false. Manual `kubectl delete namespace immich` still
needed to actually free the namespace/PVCs/data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 20:21:05 +09:00
a93818146a fix: qbittorrent/jdownloader crash-loop from today's rollout
Some checks failed
validate / lint (push) Failing after 1s
Both Deployments' rolling update briefly ran an old+new pod pair on the same
node (node-role: storage), sharing the same config storage (qbittorrent's PVC,
jdownloader's hostPath) -- both apps are effectively singletons that lock
their config directory, so the new instance conflicted with the still-running
old one:

- qbittorrent: hit a known qbittorrent:5.2.0 image bug (linuxserver/
  docker-qbittorrent#432) where a stale WebUI lockfile prevents the server
  from ever binding its port while a second instance is present -- surfaced
  as the new pod's readiness probe getting "connection refused" indefinitely.
  On top of that, my livenessProbe (30s/30s) was killing the container
  (exitCode 137) before qbittorrent had any chance to come up at all. Dropped
  the livenessProbe (readiness alone can never kill a container, only mark it
  not-ready) and loosened the readinessProbe timing.
- jdownloader: the new pod's app process detected the old instance's lock in
  the shared /data/jdownloader hostPath and exited cleanly (exitCode 0) rather
  than run a duplicate copy -- nothing to do with probe timing.

Both Deployments now use `strategy: Recreate` instead of the RollingUpdate
default, so any future rollout fully stops the old pod before starting the
new one -- this is the actual fix (matches the pattern immich.yaml already
used). Applying this will briefly restart both currently-running pods to
verify it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 19:15:54 +09:00
d44295f569 fix: add resource requests/limits and probes to workloads that had none
Stage 7 of REFACTOR_PLAN.md (findings #16). Covers dashy, glances,
ca-installer, authentik-proxy-outpost, jellyfin, qbittorrent/jdownloader main
containers (their gluetun sidecars already had probes), and all 4 Immich
Deployments -- previously none of these had any protection against one
workload starving another on this fixed-capacity cluster, nor automatic
restart on hang.

Values are sized from live `kubectl top pod` baselines gathered this session
(not guessed): e.g. Jellyfin/Immich-server were observed at ~3.1-3.3Gi
resident, so their limits give headroom above that (4Gi) rather than an
arbitrary round number. Used tcpSocket probes instead of httpGet wherever I
wasn't certain of an app's exact health-check path (Immich, Postgres/Redis),
to avoid a wrong path causing false probe failures on a live service.

This is Kubernetes-native and takes effect on next pod restart, but should
still be rolled out watching `kubectl top`/restart counts rather than pushed
and forgotten -- limits set too low can OOMKill under real load.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 18:21:03 +09:00
f80848c57e fix: update JDownloader VPN configuration to use Singapore server region 2026-05-24 17:05:53 +09:00
7a2caa824d fix: update HTTPPROXY_LISTENING_ADDRESS format to include port prefix 2026-05-16 17:28:45 +09:00
620068624d fix: update Gluetun image version to v3.41.1 in Gluetun, JDownloader, and qBittorrent deployments 2026-05-16 17:26:21 +09:00
21f3c545b9 feat: add health checks for Gluetun proxy, JDownloader, and qBittorrent deployments 2026-05-16 17:25:16 +09:00
3e0ed35e24 fix: update SERVER_REGIONS for Gluetun proxy to include South Korea and Taiwan 2026-05-16 06:59:55 +09:00
cce74a88e8 fix: update SERVER_REGIONS for JDownloader and qBittorrent to include additional locations 2026-05-16 06:58:29 +09:00
cc070cee61 feat: add Gluetun proxy deployment and service configuration 2026-05-13 22:30:26 +09:00
c373b828d1 fix: remove Photoview references from configuration and documentation 2026-05-13 00:40:15 +09:00
449b60b38f fix: improve IP retrieval logic with retry mechanism and timeout 2026-05-12 23:16:40 +09:00
367a456bcc fix: specify charset in Content-Type header for HTML response 2026-05-12 23:13:25 +09:00
8381be79e2 fix: update X-Frame-Options to Content-Security-Policy for enhanced security 2026-05-12 23:10:49 +09:00
d674fa9ddc feat: enhance IP reporter response with HTML formatting and styling 2026-05-12 23:06:33 +09:00
4c62bfa7b8 feat: replace gluetun-auth ConfigMap with ip-reporter service for public IP retrieval 2026-05-12 22:56:07 +09:00
b2024efb7e fix: correct syntax for auth configuration in gluetun ConfigMap 2026-05-12 22:46:36 +09:00
d310a8ba16 fix: update gluetun-auth ConfigMap to use correct syntax for routes 2026-05-12 22:43:36 +09:00
6e5b8fa241 feat: add gluetun authentication ConfigMap and mount it in qBittorrent deployment 2026-05-12 22:41:45 +09:00
5275c5186a Added setting to disable auth 2026-05-12 22:37:51 +09:00
8bc36e4a0b feat: add name to web port in qBittorrent service configuration 2026-05-12 22:34:02 +09:00
3209a13ed6 feat: enhance Dashy configuration with new Downloads section and integrate gluetun API for VPN IP display
feat: update qBittorrent deployment to expose gluetun API on port 8000 and add TLS certificate for secure access
feat: add gluetun DNS entry to Pi-hole configuration for improved network management
2026-05-12 22:32:20 +09:00
b9638c0ad9 feat: enable BLOCK_IPV6 in JDownloader and qBittorrent configurations 2026-05-12 20:12:07 +09:00
7742509a29 feat: update SERVER_REGIONS value to 'Hong Kong' in JDownloader and qBittorrent configurations 2026-05-12 20:06:34 +09:00