From 6e58b240d2d7ae831df47fecaf0998ea9f8774e3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 19 Oct 2026 21:21:54 +0200 Subject: [PATCH] Stage Paperless, scanner and PDF editor GitOps sources --- apps/paperless/storage/pvc.yaml | 27 ++++++++++++++++++ apps/paperless/values.yaml | 47 ++++++++++++++++++++++++++++++++ apps/pdf-editor/values.yaml | 13 +++++++++ apps/scanner/values.yaml | 17 ++++++++++++ bootstrap/paperless-project.yaml | 24 ++++++++++++++++ bootstrap/paperless-storage.yaml | 19 +++++++++++++ bootstrap/paperless.yaml | 25 +++++++++++++++++ bootstrap/pdf-editor.yaml | 25 +++++++++++++++++ bootstrap/scanner.yaml | 25 +++++++++++++++++ 9 files changed, 222 insertions(+) create mode 100644 apps/paperless/storage/pvc.yaml create mode 100644 apps/paperless/values.yaml create mode 100644 apps/pdf-editor/values.yaml create mode 100644 apps/scanner/values.yaml create mode 100644 bootstrap/paperless-project.yaml create mode 100644 bootstrap/paperless-storage.yaml create mode 100644 bootstrap/paperless.yaml create mode 100644 bootstrap/pdf-editor.yaml create mode 100644 bootstrap/scanner.yaml diff --git a/apps/paperless/storage/pvc.yaml b/apps/paperless/storage/pvc.yaml new file mode 100644 index 0000000..ce57452 --- /dev/null +++ b/apps/paperless/storage/pvc.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: paperless-data + namespace: paperless-ngx + annotations: + argocd.argoproj.io/sync-options: Prune=false +spec: + accessModes: [ReadWriteMany] + storageClassName: rook-cephfs-ec + resources: + requests: + storage: 20Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: paperless-runtime + namespace: paperless-ngx + annotations: + argocd.argoproj.io/sync-options: Prune=false +spec: + accessModes: [ReadWriteOnce] + storageClassName: rook-ceph-block-ec + resources: + requests: + storage: 4Gi diff --git a/apps/paperless/values.yaml b/apps/paperless/values.yaml new file mode 100644 index 0000000..acc7087 --- /dev/null +++ b/apps/paperless/values.yaml @@ -0,0 +1,47 @@ +url: https://paper.brunner.ninja +timeZone: Europe/Vienna +ocrLanguage: deu+eng +taskWorkers: 24 +threadsPerWorker: 1 +consumerPollingInterval: 5 +database: + host: postgresql + name: paperless + user: paperless + passwordSecretName: paperless-postgres +cache: + url: redis://valkey:6379 +secretKey: + secretName: paperless-secret-key +oidc: + enabled: true + providersSecretName: paperless-oidc + adminGroup: Paperless Admins +persistence: + data: + existingClaim: paperless-data + runtime: + existingClaim: paperless-runtime +ingress: + enabled: true + className: traefik + host: paper.brunner.ninja + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure +tolerations: + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: [arschrock] +resources: + requests: + cpu: 100m + memory: 1Gi diff --git a/apps/pdf-editor/values.yaml b/apps/pdf-editor/values.yaml new file mode 100644 index 0000000..0d512db --- /dev/null +++ b/apps/pdf-editor/values.yaml @@ -0,0 +1,13 @@ +ingress: + enabled: true + className: traefik + host: pdfeditor.brunner.ninja + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + traefik.ingress.kubernetes.io/router.middlewares: default-authentik@kubernetescrd +resources: + requests: + cpu: 100m + memory: 512Mi + limits: + memory: 2Gi diff --git a/apps/scanner/values.yaml b/apps/scanner/values.yaml new file mode 100644 index 0000000..d48a76d --- /dev/null +++ b/apps/scanner/values.yaml @@ -0,0 +1,17 @@ +persistence: + existingClaim: paperless-data +scanner: + airscanDevices: '"HP OfficeJet Pro 8020" = http://192.168.4.189:8080/eSCL, eSCL' + outputSubPath: scanner-staging + consumeSubPath: consume +ingress: + enabled: true + className: traefik + host: scanner.brunner.ninja + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + traefik.ingress.kubernetes.io/router.middlewares: default-authentik@kubernetescrd +resources: + requests: + cpu: 100m + memory: 256Mi diff --git a/bootstrap/paperless-project.yaml b/bootstrap/paperless-project.yaml new file mode 100644 index 0000000..d1d062f --- /dev/null +++ b/bootstrap/paperless-project.yaml @@ -0,0 +1,24 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + name: paperless + namespace: argocd +spec: + description: Paperless document stack with separately released scanner and PDF editor + sourceRepos: + - https://brunner.ninja/charts + - https://code.brunner.ninja/feedc0de/homelab-gitops.git + - https://groundhog2k.github.io/helm-charts/ + - https://valkey.io/valkey-helm/ + destinations: + - namespace: paperless-ngx + server: https://kubernetes.default.svc + namespaceResourceWhitelist: + - {group: "", kind: ConfigMap} + - {group: "", kind: PersistentVolumeClaim} + - {group: "", kind: Secret} + - {group: "", kind: Service} + - {group: "", kind: ServiceAccount} + - {group: apps, kind: Deployment} + - {group: apps, kind: StatefulSet} + - {group: networking.k8s.io, kind: Ingress} diff --git a/bootstrap/paperless-storage.yaml b/bootstrap/paperless-storage.yaml new file mode 100644 index 0000000..548504a --- /dev/null +++ b/bootstrap/paperless-storage.yaml @@ -0,0 +1,19 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: paperless-storage + namespace: argocd +spec: + project: paperless + source: + repoURL: https://code.brunner.ninja/feedc0de/homelab-gitops.git + targetRevision: main + path: apps/paperless/storage + destination: + server: https://kubernetes.default.svc + namespace: paperless-ngx + syncPolicy: + automated: + enabled: true + prune: false + selfHeal: true diff --git a/bootstrap/paperless.yaml b/bootstrap/paperless.yaml new file mode 100644 index 0000000..3a2d242 --- /dev/null +++ b/bootstrap/paperless.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: paperless + namespace: argocd +spec: + project: paperless + sources: + - repoURL: https://brunner.ninja/charts + chart: paperless-ngx + targetRevision: 3.3.2 + helm: + releaseName: paperless + valueFiles: [$values/apps/paperless/values.yaml] + - repoURL: https://code.brunner.ninja/feedc0de/homelab-gitops.git + targetRevision: main + ref: values + destination: + server: https://kubernetes.default.svc + namespace: paperless-ngx + syncPolicy: + automated: + enabled: true + prune: false + selfHeal: true diff --git a/bootstrap/pdf-editor.yaml b/bootstrap/pdf-editor.yaml new file mode 100644 index 0000000..966f497 --- /dev/null +++ b/bootstrap/pdf-editor.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: pdf-editor + namespace: argocd +spec: + project: paperless + sources: + - repoURL: https://brunner.ninja/charts + chart: stirling-pdf + targetRevision: 3.2.0-ultra-lite + helm: + releaseName: pdf-editor + valueFiles: [$values/apps/pdf-editor/values.yaml] + - repoURL: https://code.brunner.ninja/feedc0de/homelab-gitops.git + targetRevision: main + ref: values + destination: + server: https://kubernetes.default.svc + namespace: paperless-ngx + syncPolicy: + automated: + enabled: true + prune: false + selfHeal: true diff --git a/bootstrap/scanner.yaml b/bootstrap/scanner.yaml new file mode 100644 index 0000000..d6e9b4b --- /dev/null +++ b/bootstrap/scanner.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: scanner + namespace: argocd +spec: + project: paperless + sources: + - repoURL: https://brunner.ninja/charts + chart: scanservjs + targetRevision: 3.3.0 + helm: + releaseName: scanner + valueFiles: [$values/apps/scanner/values.yaml] + - repoURL: https://code.brunner.ninja/feedc0de/homelab-gitops.git + targetRevision: main + ref: values + destination: + server: https://kubernetes.default.svc + namespace: paperless-ngx + syncPolicy: + automated: + enabled: true + prune: false + selfHeal: true