Compare commits

..
Author SHA1 Message Date
forust 41e4a72836 feat(streaming): public routes jelly/seerr via forust.xyz
renovate-ci / validate-renovate (push) Skipped
ci / lint-shellcheck (push) Successful in 9s
ci / lint-prettier (push) Successful in 14s
ci / lint-ruff (push) Successful in 5s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 7s
ci / lint-compose (push) Successful in 9s
ci / lint-actionlint (push) Successful in 5s
ci / lint-yaml (push) Successful in 8s
ci / build (push) Skipped
2026-10-05 00:23:40 +02:00
forust 5f483e7090 merge: fold abandoned feat/streaming experiments into streaming stack
renovate-ci / validate-renovate (push) Skipped
ci / lint-compose (push) Successful in 9s
ci / lint-actionlint (push) Successful in 4s
ci / lint-shellcheck (push) Successful in 6s
ci / lint-prettier (push) Successful in 14s
ci / lint-ruff (push) Successful in 7s
ci / lint-yaml (push) Successful in 10s
ci / lint-dockerfiles (push) Successful in 6s
ci / validate (push) Successful in 7s
ci / build (push) Skipped
2026-10-04 20:43:48 +02:00
forust aad73bf9e8 feat(streaming): persist lampac passwd/init.conf via seed volume
ci / lint-actionlint (push) Successful in 5s
ci / lint-shellcheck (push) Successful in 7s
ci / lint-prettier (push) Successful in 15s
ci / lint-ruff (push) Successful in 7s
ci / lint-yaml (push) Successful in 11s
renovate-ci / validate-renovate (push) Skipped
ci / lint-compose (push) Successful in 10s
ci / lint-dockerfiles (push) Successful in 6s
ci / validate (push) Successful in 7s
ci / build (push) Skipped
2026-10-04 19:18:40 +02:00
forust 4093888749 feat(streaming): add lampac online-viewing backend
ci / lint-shellcheck (push) Successful in 7s
ci / lint-prettier (push) Successful in 16s
ci / lint-ruff (push) Successful in 8s
ci / lint-dockerfiles (push) Successful in 8s
ci / validate (push) Successful in 8s
ci / build (push) Skipped
renovate-ci / validate-renovate (push) Skipped
ci / lint-compose (push) Successful in 9s
ci / lint-actionlint (push) Successful in 4s
ci / lint-yaml (push) Successful in 9s
2026-10-04 19:13:20 +02:00
forust 50a27873c1 feat(streaming): replace dead jellyseerr with seerr-team/seerr (jellyfin 12 auth fix)
renovate-ci / validate-renovate (push) Skipped
ci / lint-compose (push) Successful in 10s
ci / lint-actionlint (push) Successful in 5s
ci / lint-shellcheck (push) Successful in 7s
ci / lint-prettier (push) Successful in 15s
ci / lint-ruff (push) Successful in 7s
ci / lint-yaml (push) Successful in 11s
ci / lint-dockerfiles (push) Successful in 6s
ci / validate (push) Successful in 6s
ci / build (push) Skipped
2026-10-04 18:52:57 +02:00
forust 3be9556eb4 feat: add radarr 2026-01-19 20:50:08 +01:00
forust e952c8161a feat: add qbittorrent 2026-01-19 20:39:29 +01:00
forust 8d665a7f34 feat: jellyfin (starting from scratch) 2026-01-19 20:19:12 +01:00
forust 6e4f8c06b4 Merge branch 'main' into feat/streaming 2026-01-19 18:47:22 +01:00
forust 8cd122d50d feat: prowlarr service 2025-11-27 22:50:21 +01:00
forust f531393481 feat: qbittorrent 2025-11-27 22:21:51 +01:00
forust ce43b34ce0 chore: better readability 2025-11-27 20:17:52 +01:00
forust ddb755e7e5 feat: sonarr service 2025-11-27 20:14:11 +01:00
forust 682a5b949f chore: ignore sonarr, radarr, data files 2025-11-27 20:12:41 +01:00
forust 6c72acc59e refactor: change directory mappings, readability 2025-11-27 20:12:17 +01:00
forust b381c7b012 feat: jellyseerr service 2025-11-27 11:57:08 +01:00
forust a3c12855fe chore: volumes best-practices for jellyfin, ports for pre-traefik debugging 2025-11-27 01:56:38 +01:00
forust bbd374590e chore: gitingore jellyfin's config files 2025-11-27 01:51:20 +01:00
forust fd72b415c5 fix: add traefik-proxy network for jellyfin 2025-11-27 01:47:56 +01:00
forust 97f6aeb538 feat: basic jellyfin service 2025-11-27 01:46:25 +01:00
17 changed files with 151 additions and 100 deletions

No files matched your search

+1 -1
View File
@@ -18,7 +18,7 @@ spec:
spec: spec:
containers: containers:
- name: cloudflared - name: cloudflared
image: cloudflare/cloudflared:2026.10.0 image: cloudflare/cloudflared:2026.9.3
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
args: args:
- tunnel - tunnel
+1 -1
View File
@@ -1,4 +1,4 @@
FROM python:3.14-slim FROM python:3.11-slim
WORKDIR /app WORKDIR /app
+1 -1
View File
@@ -1,4 +1,4 @@
FROM python:3.14-slim FROM python:3.11-slim
WORKDIR /app WORKDIR /app
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
n8n: n8n:
image: docker.n8n.io/n8nio/n8n:2.42.3 image: docker.n8n.io/n8nio/n8n:2.42.2
container_name: n8n container_name: n8n
restart: unless-stopped restart: unless-stopped
environment: environment:
+1 -1
View File
@@ -29,7 +29,7 @@ spec:
spec: spec:
containers: containers:
- name: n8n - name: n8n
image: docker.n8n.io/n8nio/n8n:2.42.3 image: docker.n8n.io/n8nio/n8n:2.42.2
envFrom: envFrom:
- configMapRef: - configMapRef:
name: n8n-config name: n8n-config
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
netronome: netronome:
image: ghcr.io/autobrr/netronome:v0.16.0 image: ghcr.io/autobrr/netronome:v0.15.0
restart: unless-stopped restart: unless-stopped
container_name: netronome container_name: netronome
ports: ports:
+1 -1
View File
@@ -32,7 +32,7 @@ spec:
spec: spec:
containers: containers:
- name: netronome - name: netronome
image: ghcr.io/autobrr/netronome:v0.16.0 image: ghcr.io/autobrr/netronome:v0.15.0
ports: ports:
- name: netronome-port - name: netronome-port
protocol: TCP protocol: TCP
-28
View File
@@ -218,34 +218,6 @@ data:
"matchUpdateTypes": ["patch"], "matchUpdateTypes": ["patch"],
"groupName": "all patch updates", "groupName": "all patch updates",
"groupSlug": "all-patch" "groupSlug": "all-patch"
},
{
"description": "Python Y-bumps break compat (3.11->3.12->3.13->3.14) - keep the base image out of the shared minor/patch groups, review every bump separately. Placed last so its groupName wins.",
"matchDatasources": ["docker"],
"matchPackageNames": ["python"],
"groupName": "python base image",
"groupSlug": "python",
"automerge": false
},
{
"description": "Rolling/floating tags (streaming stack, nextcloud beta, kubectl latest) - never automerge, every bump is a manual review. Placed last so automerge:false wins over the shared digest/patch rule.",
"matchDatasources": ["docker"],
"matchPackageNames": [
"lscr.io/linuxserver/jellyfin",
"lscr.io/linuxserver/qbittorrent",
"lscr.io/linuxserver/sonarr",
"lscr.io/linuxserver/radarr",
"lscr.io/linuxserver/prowlarr",
"lscr.io/linuxserver/bazarr",
"ghcr.io/seerr-team/seerr",
"fallenbagel/jellyseerr",
"ghcr.io/lampac-nextgen/lampac",
"ghcr.io/nextcloud-releases/all-in-one",
"alpine/kubectl"
],
"groupName": "floating images - manual",
"groupSlug": "floating-manual",
"automerge": false
} }
] ]
} }
+1 -1
View File
@@ -19,7 +19,7 @@ spec:
restartPolicy: Never restartPolicy: Never
containers: containers:
- name: renovate - name: renovate
image: renovate/renovate:44.136.0 image: renovate/renovate:44.132.2
env: env:
- name: RENOVATE_PLATFORM - name: RENOVATE_PLATFORM
value: gitea value: gitea
-28
View File
@@ -207,34 +207,6 @@
"matchUpdateTypes": ["patch"], "matchUpdateTypes": ["patch"],
"groupName": "all patch updates", "groupName": "all patch updates",
"groupSlug": "all-patch" "groupSlug": "all-patch"
},
{
"description": "Python Y-bumps break compat (3.11->3.12->3.13->3.14) - keep the base image out of the shared minor/patch groups, review every bump separately. Placed last so its groupName wins.",
"matchDatasources": ["docker"],
"matchPackageNames": ["python"],
"groupName": "python base image",
"groupSlug": "python",
"automerge": false
},
{
"description": "Rolling/floating tags (streaming stack, nextcloud beta, kubectl latest) - never automerge, every bump is a manual review. Placed last so automerge:false wins over the shared digest/patch rule.",
"matchDatasources": ["docker"],
"matchPackageNames": [
"lscr.io/linuxserver/jellyfin",
"lscr.io/linuxserver/qbittorrent",
"lscr.io/linuxserver/sonarr",
"lscr.io/linuxserver/radarr",
"lscr.io/linuxserver/prowlarr",
"lscr.io/linuxserver/bazarr",
"ghcr.io/seerr-team/seerr",
"fallenbagel/jellyseerr",
"ghcr.io/lampac-nextgen/lampac",
"ghcr.io/nextcloud-releases/all-in-one",
"alpine/kubectl"
],
"groupName": "floating images - manual",
"groupSlug": "floating-manual",
"automerge": false
} }
] ]
} }
+36 -7
View File
@@ -1,6 +1,6 @@
services: services:
jellyfin: jellyfin:
image: lscr.io/linuxserver/jellyfin:version-12.1ubu2604 image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin container_name: jellyfin
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -19,7 +19,7 @@ services:
- streaming - streaming
qbittorrent: qbittorrent:
image: lscr.io/linuxserver/qbittorrent:5.2.4 image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent container_name: qbittorrent
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -38,7 +38,7 @@ services:
- streaming - streaming
sonarr: sonarr:
image: lscr.io/linuxserver/sonarr:4.0.20 image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr container_name: sonarr
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -55,7 +55,7 @@ services:
- streaming - streaming
radarr: radarr:
image: lscr.io/linuxserver/radarr:6.4.4 image: lscr.io/linuxserver/radarr:latest
container_name: radarr container_name: radarr
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -72,7 +72,7 @@ services:
- streaming - streaming
prowlarr: prowlarr:
image: lscr.io/linuxserver/prowlarr:2.6.5 image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr container_name: prowlarr
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -87,8 +87,9 @@ services:
- streaming - streaming
jellyseerr: jellyseerr:
image: fallenbagel/jellyseerr:latest image: ghcr.io/seerr-team/seerr:latest
container_name: jellyseerr container_name: jellyseerr
init: true
restart: unless-stopped restart: unless-stopped
environment: environment:
- TZ=${TZ:-Europe/Berlin} - TZ=${TZ:-Europe/Berlin}
@@ -100,7 +101,7 @@ services:
- streaming - streaming
bazarr: bazarr:
image: lscr.io/linuxserver/bazarr:1.6.2 image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr container_name: bazarr
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -116,6 +117,31 @@ services:
networks: networks:
- streaming - streaming
lampac:
image: ghcr.io/lampac-nextgen/lampac:latest
container_name: lampac
restart: unless-stopped
shm_size: 1024mb
# Restore persisted passwd/init.conf from seed volume before start,
# so config survives container recreation (upstream entrypoint is
# ENTRYPOINT ["dotnet", "Core.dll"], WORKDIR /lampac, USER lampac).
entrypoint:
[
"/bin/sh",
"-c",
"if [ -f /seed/passwd ] && [ ! -f /lampac/passwd ]; then cp /seed/passwd /lampac/passwd; fi; if [ -f /seed/init.conf ] && [ ! -f /lampac/init.conf ]; then cp /seed/init.conf /lampac/init.conf; fi; exec /usr/share/dotnet/dotnet Core.dll",
]
environment:
- TZ=${TZ:-Europe/Berlin}
volumes:
- lampac-seed:/seed
- lampac-cache:/lampac/cache
- lampac-db:/lampac/database
ports:
- "19118:9118"
networks:
- streaming
volumes: volumes:
jellyfin-cfg: jellyfin-cfg:
qbittorrent-cfg: qbittorrent-cfg:
@@ -124,6 +150,9 @@ volumes:
prowlarr-cfg: prowlarr-cfg:
jellyseerr-cfg: jellyseerr-cfg:
bazarr-cfg: bazarr-cfg:
lampac-seed:
lampac-cache:
lampac-db:
downloads: downloads:
movies: movies:
tv: tv:
+26 -26
View File
@@ -13,19 +13,32 @@ spec:
issuerRef: issuerRef:
name: internal-ca name: internal-ca
kind: ClusterIssuer kind: ClusterIssuer
# --- ---
# apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
# kind: Certificate kind: Certificate
# metadata: metadata:
# name: jellyfin-prod-tls name: jelly-prod-tls
# namespace: streaming namespace: streaming
# spec: spec:
# secretName: jellyfin-prod-tls secretName: jelly-prod-tls
# dnsNames: dnsNames:
# - jellyfin.forust.xyz - jelly.forust.xyz
# issuerRef: issuerRef:
# name: letsencrypt-prod name: letsencrypt-prod
# kind: ClusterIssuer kind: ClusterIssuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: seerr-prod-tls
namespace: streaming
spec:
secretName: seerr-prod-tls
dnsNames:
- seerr.forust.xyz
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
# --- # ---
# apiVersion: cert-manager.io/v1 # apiVersion: cert-manager.io/v1
# kind: Certificate # kind: Certificate
@@ -78,16 +91,3 @@ spec:
# issuerRef: # issuerRef:
# name: letsencrypt-prod # name: letsencrypt-prod
# kind: ClusterIssuer # kind: ClusterIssuer
# ---
# apiVersion: cert-manager.io/v1
# kind: Certificate
# metadata:
# name: jellyseerr-prod-tls
# namespace: streaming
# spec:
# secretName: jellyseerr-prod-tls
# dnsNames:
# - jellyseerr.forust.xyz
# issuerRef:
# name: letsencrypt-prod
# kind: ClusterIssuer
@@ -186,3 +186,30 @@ endpoints:
- "192.168.88.100" - "192.168.88.100"
conditions: conditions:
ready: true ready: true
---
apiVersion: v1
kind: Service
metadata:
name: lampac
namespace: streaming
spec:
ports:
- port: 19118
targetPort: 19118
---
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: lampac
namespace: streaming
labels:
kubernetes.io/service-name: lampac
addressType: IPv4
ports:
- port: 19118
protocol: TCP
endpoints:
- addresses:
- "192.168.88.100"
conditions:
ready: true
+51
View File
@@ -116,3 +116,54 @@ spec:
port: 16767 port: 16767
tls: tls:
secretName: internal-wildcard-tls secretName: internal-wildcard-tls
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: lampac-local
namespace: streaming
spec:
entryPoints:
- websecure
routes:
- match: Host(`lampac.workstation.internal`)
kind: Rule
services:
- name: lampac
port: 19118
tls:
secretName: internal-wildcard-tls
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: jellyfin-prod
namespace: streaming
spec:
entryPoints:
- websecure
routes:
- match: Host(`jelly.forust.xyz`)
kind: Rule
services:
- name: jellyfin
port: 18096
tls:
secretName: jelly-prod-tls
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: seerr-prod
namespace: streaming
spec:
entryPoints:
- websecure
routes:
- match: Host(`seerr.forust.xyz`)
kind: Rule
services:
- name: jellyseerr
port: 15055
tls:
secretName: seerr-prod-tls
+1 -1
View File
@@ -1,6 +1,6 @@
services: services:
termix: termix:
image: ghcr.io/lukegus/termix:2.9.1 image: ghcr.io/lukegus/termix:2.9.0
container_name: termix container_name: termix
restart: unless-stopped restart: unless-stopped
# ports: # ports:
+1 -1
View File
@@ -29,7 +29,7 @@ spec:
spec: spec:
containers: containers:
- name: termix - name: termix
image: ghcr.io/lukegus/termix:2.9.1 image: ghcr.io/lukegus/termix:2.9.0
envFrom: envFrom:
- configMapRef: - configMapRef:
name: termix-config name: termix-config
+1 -1
View File
@@ -36,7 +36,7 @@ spec:
spec: spec:
containers: containers:
- name: xui - name: xui
image: ghcr.io/mhsanaei/3x-ui:v3.9.0 image: ghcr.io/mhsanaei/3x-ui:v3.8.5
envFrom: envFrom:
- configMapRef: - configMapRef:
name: xui-config name: xui-config