Ship homelab quick wins: Recyclarr, infra pins, jd.ginnoir.com, and LAN lockdown.
Deploy to valhalla / deploy (push) Has been cancelled

Add Recyclarr to the media stack, pin database/object-store/Caddy/Vault images with Watchtower disabled, expose JDownloader at jd.ginnoir.com, and restrict minio/homarr/docs to internal_only. Mark TB-002–004 and TB-033 complete; bundle batch-3 OIDC env for FreshRSS, ownCloud, and Reactive Resume.
This commit is contained in:
ginnoir
2026-06-11 02:28:06 -05:00
parent 1ce63153ab
commit 51acb44322
34 changed files with 392 additions and 105 deletions
+4
View File
@@ -51,6 +51,8 @@ services:
container_name: postgres_authentik
image: postgres:16-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [authentik]
env_file:
- stack.env
@@ -66,6 +68,8 @@ services:
container_name: redis_authentik
image: redis:7-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [authentik]
command: --save 60 1 --loglevel warning
volumes:
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""Apply TB-006 forward_auth proxy providers (admin batch 1 + media batch 2).
"""Apply TB-006 forward_auth proxy providers (batches 13).
Native OAuth/OIDC apps (bookstack, gitea, portainer, minio, homarr) use
setup-batch1-oidc.py instead. Run this via: ak shell -c exec(open(...).read())
@@ -17,6 +17,12 @@ OIDC_APPS = [
("gitea", "gitea", ["https://gitea.ginnoir.com/user/oauth2/Authentik/callback"]),
("portainer", "portainer", ["https://portainer.ginnoir.com/"]),
("minio", "minio-console", ["https://minio.ginnoir.com/oauth_callback"]),
("owncloud", "owncloud-web", [
"https://files.ginnoir.com/index.php/apps/openidconnect/redirect",
"https://files.ginnoir.com/apps/openidconnect/redirect",
]),
("resume", "reactive-resume", ["https://resume.ginnoir.com/api/auth/oauth2/callback/custom"]),
("freshrss", "freshrss", ["https://freshrss.ginnoir.com/i/oidc/"]),
]
native_slugs = []
@@ -63,6 +69,9 @@ PROXY_NAMES = {
"gitea": "homelab-gitea",
"portainer": "homelab-portainer",
"minio": "homelab-minio",
"owncloud": "homelab-files",
"resume": "homelab-resume",
"freshrss": "homelab-freshrss",
}
outpost = Outpost.objects.get(name="authentik Embedded Outpost")
for slug in native_slugs:
@@ -1,4 +1,4 @@
"""Update proxy providers for forward_auth apps (admin batch 1 + media batch 2)."""
"""Update proxy providers for forward_auth apps (batches 13)."""
from authentik.core.models import Application
from authentik.flows.models import Flow
from authentik.outposts.models import Outpost, OutpostType
+12 -2
View File
@@ -55,6 +55,8 @@ services:
container_name: postgres_gitea
image: postgres:16-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [dev]
env_file:
- stack.env
@@ -162,8 +164,10 @@ services:
mariadb_bookstack:
container_name: mariadb_bookstack
image: lscr.io/linuxserver/mariadb:latest
image: lscr.io/linuxserver/mariadb:11.4.7
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [dev]
env_file:
- stack.env
@@ -336,6 +340,8 @@ services:
container_name: postgres_plane
image: postgres:16-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [dev]
env_file:
- stack.env
@@ -355,6 +361,8 @@ services:
container_name: redis_plane
image: redis:7-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [dev]
command: --save 60 1 --loglevel warning
volumes:
@@ -367,8 +375,10 @@ services:
plane-minio:
container_name: plane_minio
image: minio/minio:latest
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [dev]
command: server /data --console-address ":9001"
env_file:
+5 -1
View File
@@ -31,6 +31,8 @@ services:
container_name: postgres_famapp
image: postgres:16-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [famapp]
env_file:
- stack.env
@@ -44,9 +46,11 @@ services:
famapp-minio:
container_name: minio_famapp
image: minio/minio:latest
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
command: server /data --console-address ":9003"
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [famapp]
env_file:
- stack.env
+11
View File
@@ -158,6 +158,17 @@ services:
ports:
- "6969:6969"
recyclarr:
image: ghcr.io/recyclarr/recyclarr:8
container_name: recyclarr
restart: unless-stopped
networks: [media]
user: 1000:1000
env_file:
- stack.env
volumes:
- ./recyclarr:/config
stash:
image: stashapp/stash:latest
container_name: stash
+25
View File
@@ -0,0 +1,25 @@
# TRaSH Guides sync — WEB-1080p (Sonarr) + HD Bluray + WEB (Radarr).
# Run manually: docker exec recyclarr recyclarr sync
sonarr:
main:
base_url: http://sonarr:8989
api_key: !secret sonarr_api_key
delete_old_custom_formats: true
quality_definition:
type: series
quality_profiles:
- trash_id: 72dae194fc92bf828f32cde74482a9dde
reset_unmatched_scores:
enabled: true
radarr:
main:
base_url: http://radarr:7878
api_key: !secret radarr_api_key
delete_old_custom_formats: true
quality_definition:
type: movie
quality_profiles:
- trash_id: d1d67249d3890e49bc12e275d989a7e9
reset_unmatched_scores:
enabled: true
+2
View File
@@ -0,0 +1,2 @@
sonarr_api_key: "383c9489253e445baf8514013a4e37a4"
radarr_api_key: "94159a19beef48f185bd3e330f8dde3a"
+3 -1
View File
@@ -22,8 +22,10 @@
services:
couchdb:
container_name: couchdb
image: couchdb:3
image: couchdb:3.4
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [notes, edge]
env_file:
- stack.env
+5
View File
@@ -62,6 +62,11 @@ services:
- CRON_MIN=3,33
- TRUSTED_PROXY=172.16.0.1/12 192.168.0.1/16
- FRESHRSS_INSTALL=--default-user ginnoir --api-enabled --base-url https://freshrss.ginnoir.com
- OIDC_ENABLED=1
- OIDC_PROVIDER_METADATA_URL=https://auth.ginnoir.com/application/o/freshrss/.well-known/openid-configuration
- OIDC_REMOTE_USER_CLAIM=preferred_username
- OIDC_SCOPES=openid profile email
- OIDC_X_FORWARDED_HEADERS=X-Forwarded-Host X-Forwarded-Proto
vigilant:
container_name: vigilant
+3
View File
@@ -3,3 +3,6 @@ TZ=America/Chicago
# FreshRSS first-run user bootstrap (the container reads FRESHRSS_USER as the
# full CLI argument string for its install script).
FRESHRSS_USER=--api-password d0fet0th3x --email 3nigma.matt@gmail.com --password d0fet0th3x --user ginnoir
OIDC_CLIENT_ID=5DYeBheXidDAErkLTTMFBB4xdC734MoHQ2xNyVWp
OIDC_CLIENT_SECRET=4s9uiOgTla9euoVlvEgYNpqSGLOaxm0WG4tchUhzHYCjNyOeYQ2s426OaBAwV0YtXDXplCUhkCKNm6q0GCfpSZADhJo2L6nkRuCqFtuA3454Wpjf8ArRVYKwJqdGQePH
OIDC_CLIENT_CRYPTO_KEY=7f3a9c2e1b8d4f6a0e5c8b2d9f1a4e7
+6 -2
View File
@@ -37,9 +37,11 @@ services:
- /storage1/ROMs:/mnt/roms
mariadb:
image: mariadb:latest
image: mariadb:12.3
container_name: owncloud_mariadb
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [owncloud]
env_file:
- stack.env
@@ -56,9 +58,11 @@ services:
- /config/mysql:/var/lib/mysql
redis:
image: redis:latest
image: redis:7-alpine
container_name: owncloud_redis
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [owncloud]
command: ["--databases", "1"]
healthcheck:
+2
View File
@@ -9,3 +9,5 @@ OWNCLOUD_ADMIN_PASSWORD=d0fet0th3x
MYSQL_ROOT_PASSWORD=d0fet0th3x
MYSQL_USER=ginnoir
MYSQL_PASSWORD=d0fet0th3x
OWNCLOUD_OIDC_CLIENT_ID=kVTZzTn4ho1lfD8ghtYHYsW84jLBzVQJBzZ7klHB
OWNCLOUD_OIDC_CLIENT_SECRET=ZvNY4bLkBsbSfo1rUBnX9nSwPzcP5R2Ya18z7IND45KmoPwUOMjnTOI6QjtQuLrzoSJ8ym03rLQLZoNb7Cdp4PtVlPPTMZYKwJBtK7DNWt8zllHLT97gbqWKQGTMxqKF
+3 -1
View File
@@ -15,8 +15,10 @@
services:
caddy:
container_name: caddy
image: serfriz/caddy-cloudflare-ddns:latest
image: serfriz/caddy-cloudflare-ddns:2.11.3
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks:
- edge
ports:
+9 -1
View File
@@ -11,6 +11,8 @@ services:
container_name: postgres_resume
image: postgres:16-alpine
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [resume]
volumes:
- /config/resume/postgres:/var/lib/postgresql/data
@@ -27,8 +29,10 @@ services:
resume-minio:
container_name: minio_resume
image: minio/minio:latest
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [resume, edge]
command: server /data --console-address :9001
ports:
@@ -93,6 +97,10 @@ services:
- STORAGE_BUCKET=default
- STORAGE_USE_SSL=false
- STORAGE_SKIP_BUCKET_CHECK=false
- OAUTH_PROVIDER_NAME=Authentik
- OAUTH_DISCOVERY_URL=https://auth.ginnoir.com/application/o/resume/.well-known/openid-configuration
- FLAG_DISABLE_EMAIL_AUTH=true
- FLAG_DISABLE_SIGNUPS=true
networks:
resume:
+2
View File
@@ -24,3 +24,5 @@ STORAGE_SECRET_KEY=minioadmin
# Pinned to the running value so recreating the container keeps sessions valid.
# Rotate with: openssl rand -hex 64
AUTH_SECRET=1b7e96f61f080d04d4bf673d9ea1d9349eb7693cddee5772b6c3f153c88032db5b97efd8570087bc6f340d2cd874aabc1e5c681bc22889921240d6a23738bc7f
OAUTH_CLIENT_ID=YpMFNp9q5mGbN8ADM5rUol0ERHmSiTDClJKIVOxK
OAUTH_CLIENT_SECRET=mzwjSt0Xtibo156km61T7VYerT48K6ZTa79cEek4mgdky6t1Sjaddlshw2QcJL8727N6qWzddi2ihxNGSpUVMXUBbjNgx4jtkHAy5xtmvqdk9ouIFclyhCgXh9fzjMCA
+3 -1
View File
@@ -46,9 +46,11 @@ services:
- "8997:8080"
romm-db:
image: mariadb:latest
image: mariadb:12.3
container_name: romm-db
restart: unless-stopped
labels:
- "com.centurylabs.watchtower.enable=false"
networks: [roms]
env_file:
- stack.env