From b831c4eb4e4fd2d245393979df60f8b83eeba353 Mon Sep 17 00:00:00 2001 From: Roger Sikorski Date: Fri, 5 Dec 2025 22:14:45 +0100 Subject: [PATCH] feature/jdownloader --- .../ImageAutomation/ImagePolicy.yaml | 15 +++ .../ImageAutomation/ImageRepository.yaml | 11 +++ .../jdownloader/IngressRoute.yaml | 37 ++++++++ .../jdownloader/configmap/filebot-script.yaml | 15 +++ .../jdownloader/configmap/jdownloader.yaml | 16 ++++ .../jdownloader/deployment.yaml | 95 +++++++++++++++++++ .../apps/plex-and-tools/jdownloader/pvc.yaml | 15 +++ .../jdownloader/secret/secret.yaml.dist | 12 +++ .../plex-and-tools/jdownloader/service.yaml | 15 +++ 9 files changed, 231 insertions(+) create mode 100644 cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImagePolicy.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImageRepository.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/IngressRoute.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/configmap/filebot-script.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/configmap/jdownloader.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/deployment.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/pvc.yaml create mode 100644 cluster/apps/plex-and-tools/jdownloader/secret/secret.yaml.dist create mode 100644 cluster/apps/plex-and-tools/jdownloader/service.yaml diff --git a/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImagePolicy.yaml b/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImagePolicy.yaml new file mode 100644 index 0000000..ba2e1ae --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImagePolicy.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: image.toolkit.fluxcd.io/v1 +kind: ImagePolicy +metadata: + name: jdownloader2 + namespace: plex-and-tools +spec: + imageRepositoryRef: + # https://hub.docker.com/r/jlesage/jdownloader-2 + name: jdownloader2 + policy: + # semver: + # range: '>=vx.x.x' + alphabetical: + order: asc diff --git a/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImageRepository.yaml b/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImageRepository.yaml new file mode 100644 index 0000000..839ed01 --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/ImageAutomation/ImageRepository.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: image.toolkit.fluxcd.io/v1 +kind: ImageRepository +metadata: + name: jdownloader2 + namespace: plex-and-tools +spec: + image: jlesage/jdownloader-2 + interval: 24h + exclusionList: + - latest diff --git a/cluster/apps/plex-and-tools/jdownloader/IngressRoute.yaml b/cluster/apps/plex-and-tools/jdownloader/IngressRoute.yaml new file mode 100644 index 0000000..db5dbff --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/IngressRoute.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: jdownloader + namespace: plex-and-tools + labels: + app: jdownloader +spec: + entryPoints: + - websecure + routes: + - match: Host(`jdownloader.example.org`) + kind: Rule + services: + - name: jdownloader + port: 5800 + middlewares: + - name: authentik-proxy + namespace: authentik + - name: security + namespace: traefik + + - match: Host(`jdownloader.example.org`) && PathPrefix(`/outpost.goauthentik.io`) + kind: Rule + services: + - name: authentik-proxy + namespace: authentik + port: http + middlewares: + - name: security + namespace: traefik + tls: + secretName: jdownloader.example.org + options: + name: tls-security + namespace: traefik diff --git a/cluster/apps/plex-and-tools/jdownloader/configmap/filebot-script.yaml b/cluster/apps/plex-and-tools/jdownloader/configmap/filebot-script.yaml new file mode 100644 index 0000000..f0dccb4 --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/configmap/filebot-script.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: jdownloader-filebot-script + namespace: plex-and-tools + labels: + app: jdownloader +data: + jdownloader-postprocess.sh: | + #!/bin/sh -xu + + # container has curl + # apk add curl + + curl -X GET http://filebot-node.plex-and-tools:5452/task?id=42 diff --git a/cluster/apps/plex-and-tools/jdownloader/configmap/jdownloader.yaml b/cluster/apps/plex-and-tools/jdownloader/configmap/jdownloader.yaml new file mode 100644 index 0000000..df1dd9a --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/configmap/jdownloader.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: jdownloader + namespace: plex-and-tools + labels: + app: jdownloader +data: + # https://github.com/jlesage/docker-jdownloader-2?tab=readme-ov-file#environment-variables + KEEP_APP_RUNNING: '1' + MYJDOWNLOADER_DEVICE_NAME: 'k8s' + JDOWNLOADER_HEADLESS: '0' + JDOWNLOADER_MAX_MEM: '2G' + INSTALL_PACKAGES: 'curl' + DARK_MODE: '1' diff --git a/cluster/apps/plex-and-tools/jdownloader/deployment.yaml b/cluster/apps/plex-and-tools/jdownloader/deployment.yaml new file mode 100644 index 0000000..37e9ffe --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/deployment.yaml @@ -0,0 +1,95 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jdownloader + namespace: plex-and-tools + annotations: + reloader.stakater.com/auto: 'true' + labels: + app: jdownloader + unraid.nfs: 'true' +spec: + replicas: 1 + selector: + matchLabels: + app: jdownloader + strategy: + type: Recreate # because of pvc + template: + metadata: + labels: + app: jdownloader + spec: + automountServiceAccountToken: false + # CURRENLTY hostNetwork disabled because we use https://jdownloader.sikorski.cloud/ + # dnsPolicy: ClusterFirstWithHostNet + # hostNetwork: true # direct connection for better web ui performance + containers: + - name: jdownloader + # https://hub.docker.com/r/jlesage/jdownloader-2 + # https://github.com/jlesage/docker-jdownloader-2/releases + image: jlesage/jdownloader-2:v25.02.1 # {"$imagepolicy": "flux-system:jdownloader2"} + imagePullPolicy: IfNotPresent + resources: + limits: + memory: 8Gi + requests: + memory: 2Gi + cpu: 1000m + ports: + - name: http + containerPort: 5800 + protocol: TCP + envFrom: + - configMapRef: + name: plex-and-tools + - configMapRef: + name: jdownloader + optional: false + - secretRef: + name: jdownloader + optional: false + securityContext: + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + runAsNonRoot: false + volumeMounts: + # config + - name: jdownloader + mountPath: /config + # emptyDir Logs + - name: jdownloader-nginx-log + mountPath: /config/log + - name: jdownloader-logs + mountPath: /config/logs + # configMap scripts + - name: jdownloader-filebot-script + mountPath: /config/scripts/jdownloader-postprocess.sh + subPath: jdownloader-postprocess.sh + # NFS shares + - name: plex-media + mountPath: /mnt/plex-media/ + + imagePullSecrets: + - name: registry-dockerhub + volumes: + # app + - name: jdownloader + persistentVolumeClaim: + claimName: jdownloader-longhorn + # emptyDir Logs + - name: jdownloader-nginx-log + emptyDir: + sizeLimit: 500Mi + - name: jdownloader-logs + emptyDir: + sizeLimit: 500Mi + # NFS shares + - name: plex-media + persistentVolumeClaim: + claimName: plex-media + # configmap + - name: jdownloader-filebot-script + configMap: + name: jdownloader-filebot-script + defaultMode: 0777 diff --git a/cluster/apps/plex-and-tools/jdownloader/pvc.yaml b/cluster/apps/plex-and-tools/jdownloader/pvc.yaml new file mode 100644 index 0000000..a08b22e --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/pvc.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: jdownloader-longhorn + namespace: plex-and-tools + labels: + app: jdownloader +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 1Gi diff --git a/cluster/apps/plex-and-tools/jdownloader/secret/secret.yaml.dist b/cluster/apps/plex-and-tools/jdownloader/secret/secret.yaml.dist new file mode 100644 index 0000000..ddcad66 --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/secret/secret.yaml.dist @@ -0,0 +1,12 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: jdownloader + namespace: plex-and-tools + labels: + app: jdownloader +type: Opaque +stringData: + MYJDOWNLOADER_EMAIL: change_me@example.org + MYJDOWNLOADER_PASSWORD: CHANGE_ME diff --git a/cluster/apps/plex-and-tools/jdownloader/service.yaml b/cluster/apps/plex-and-tools/jdownloader/service.yaml new file mode 100644 index 0000000..6721639 --- /dev/null +++ b/cluster/apps/plex-and-tools/jdownloader/service.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: jdownloader + namespace: plex-and-tools + labels: + app: jdownloader +spec: + ports: + - name: http + targetPort: 5800 + port: 5800 + selector: + app: jdownloader