31 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
cce74a88e8 fix: update SERVER_REGIONS for JDownloader and qBittorrent to include additional locations 2026-05-16 06:58:29 +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
95b27c4eb2 feat: update SERVER_REGIONS value to 'JP Tokyo' in JDownloader and qBittorrent configurations 2026-05-12 20:00:25 +09:00
d2b36080a6 feat: update VPN_TYPE to openvpn in JDownloader and qBittorrent configurations 2026-05-12 19:59:05 +09:00
cfce656854 feat: add gluetun VPN container and pia-credentials management for secure connections 2026-05-12 19:52:56 +09:00
0aa886b6a2 feat: update qBittorrent image version to 5.2.0 2026-05-10 01:32:10 +09:00
83f46c9748 feat(gitea): add backup CronJob with RBAC and NFS support
feat(gitea): create PersistentVolume and PersistentVolumeClaim for Gitea

feat(gitea): add script to create Gitea runner registration token secret

feat(gitea): deploy Gitea Actions runner with Docker socket access

feat(media): deploy JDownloader with Ingress configuration

feat(media): set up Jellyfin media server with NFS and Ingress

feat(media): configure qBittorrent deployment with Ingress

feat(monitoring): add Grafana Loki datasource ConfigMap

feat(monitoring): create Grafana admin credentials secret

feat(monitoring): define PersistentVolumes for monitoring stack

feat(network): implement DDNS CronJob for Porkbun DNS updates

feat(network): create secret for Porkbun DDNS API credentials

feat(network): set up Glances service and Ingress for Debian node

fix(network): patch Pi-hole DNS services with external IPs

feat(network): configure Traefik dashboard Ingress with Authentik auth

feat(network): set up Watch Party service and Ingress for Mac Mini

refactor(values): update Helm values files for various services
2026-03-12 21:56:32 +09:00