diff --git a/k8s/apps/paperless/kustomization.yaml b/k8s/apps/paperless/kustomization.yaml index b59b1f8..b9de4fe 100644 --- a/k8s/apps/paperless/kustomization.yaml +++ b/k8s/apps/paperless/kustomization.yaml @@ -11,6 +11,7 @@ resources: - backup-cronjob.yaml - adapter-configmap.yaml - rbac.yaml + - paperless-ai.yaml # postgres: paperless-db CNPG Cluster, deployed by k8s/infra/databases (wave 2, # before this app at wave 8) - not duplicated here. Same for the paperless-oidc # and paperless-minio-creds Secrets, written by PostSync provisioning Jobs in diff --git a/k8s/apps/paperless/paperless-ai.yaml b/k8s/apps/paperless/paperless-ai.yaml new file mode 100644 index 0000000..b21555e --- /dev/null +++ b/k8s/apps/paperless/paperless-ai.yaml @@ -0,0 +1,62 @@ +# Secret paperless-ai-config managed via SOPS (argocd/secrets/paperless-ai-secrets.enc.yaml) +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: paperless-ai + namespace: paperless + labels: + app.kubernetes.io/name: paperless-ai +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: paperless-ai + template: + metadata: + labels: + app.kubernetes.io/name: paperless-ai + spec: + tolerations: + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + containers: + - name: paperless-ai + image: clusterzx/paperless-ai:latest + env: + # Paperless-ngx connection + - name: PAPERLESS_API_URL + value: "http://paperless.paperless.svc.cluster.local:8000" + - name: PAPERLESS_API_TOKEN + valueFrom: + secretKeyRef: + name: paperless-ai-config + key: PAPERLESS_API_TOKEN + # LLM API — local gateway, no auth required (phase 3 not built yet) + - name: AI_PROVIDER + value: "custom" + - name: CUSTOM_BASE_URL + value: "http://api-gateway.api.svc.cluster.local:8080/v1" + - name: CUSTOM_API_KEY + value: "not-required" + - name: CUSTOM_MODEL + value: "reasoning" + # Behavior + - name: SCAN_INTERVAL + value: "300" + - name: PROCESS_PREDEFINED_DOCUMENTS + value: "no" + - name: ADD_AI_TAG + value: "yes" + - name: AI_TAG_NAME + value: "ai-processed" + - name: USE_PROMPT_TAGS + value: "yes" + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi diff --git a/k8s/argocd/secrets/paperless-ai-secrets.enc.yaml b/k8s/argocd/secrets/paperless-ai-secrets.enc.yaml new file mode 100644 index 0000000..d9249ff --- /dev/null +++ b/k8s/argocd/secrets/paperless-ai-secrets.enc.yaml @@ -0,0 +1,23 @@ +apiVersion: ENC[AES256_GCM,data:l7I=,iv:NZY7r3JVW3zVwxeiScvWKpAQUDa9+nckHd0qWVrGU88=,tag:qpowp5OILdYKtTux/nlWpg==,type:str] +kind: ENC[AES256_GCM,data:6oeEbuIk,iv:5flI9TtcYQ961wOYPBPhvQpitHFYAf8yMdNBXqytbJs=,tag:WNhlbKmSeZEqZ9ZgiB/BYg==,type:str] +metadata: + name: ENC[AES256_GCM,data:fvJMsgy+wPZqMCdxm9hoV3n/+Q==,iv:I3rVtHIJBOME+bxhPws58Zjhj5i+KT5UtB9o7Vus5EU=,tag:6h4FnUu7PGxlQPIQxPYCRg==,type:str] + namespace: ENC[AES256_GCM,data:CDriLoLovROW,iv:rHXcN1xm5+t2D/Tq/2sx9lQFF8anD5jH24ZntPuBA8U=,tag:XstJAz6S8IM1c/pp9Cg0Ww==,type:str] +type: ENC[AES256_GCM,data:JdTwBbag,iv:9Ys15Ketl0ghNK0u0N8IOpUt7+KoloutiG5M9zHPXxw=,tag:teau/udf41Ty34A5wLAm6Q==,type:str] +stringData: + PAPERLESS_API_TOKEN: ENC[AES256_GCM,data:TuQeDx8po3h4loTRABlItVYQJ7gFjnmIn3zQQGtUcoNFMKpkqLK/GQ==,iv:TDg0stpca5pDtatqu8DFU7R0Bm/S/BI9ZoiG4K8mCT4=,tag:BfjX25V5gL7AeIsscClRAg==,type:str] +sops: + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKVDN3aFVqVmFXY1VQVXZP + OUsrNHdNdlRvRFgvTDQrNE5uL2xaazVENTBjCkNPbGR5Vk16RXNDOW15OGNTRmFR + U0JOeTllaWU1dzNVY3lBbEVyVG5tOEkKLS0tIEZvajlvcUtJdFNNUkkzV3FKOFRj + UUE2TDBzT0xVc2E1NlUvQXAyZytMZEUKBv+ChaoQCstA742L3Bq5mBJlW/UC4Pyw + ZvFAyYbs1NaEqhjtHq+4T62jTWcH/St/vKgUuFQ9LCUQhYd8DUzAow== + -----END AGE ENCRYPTED FILE----- + recipient: age1e5fq3hwxy78psus2nfvmtmua36g0u3suk78ephw6246l974d2utsvn0hla + lastmodified: "2026-09-12T21:04:26Z" + mac: ENC[AES256_GCM,data:0ks96xQzOa8ygNDDYfKV8EJ8dWLBaC0PCnLG73NinMByF/KoWkCdwMDPC34W9xxVoTD2NiF1i/3pgCG4QFezTE7tPHPPKdYcQfwda9fkooiXW4Nh2M/sgbq/xgsy9N3qpHD/O5iILgpehb9y0DuErOyxcn2AIYizynU7m8e63pc=,iv:fvPWBsfE6YHskKzdlxJidp14dUgRR0XdMkEu6IxMMSo=,tag:5FiuIrFOg/GXvlQVy7drJQ==,type:str] + unencrypted_suffix: _unencrypted + version: 3.13.2 diff --git a/k8s/argocd/secrets/secret-generator.yaml b/k8s/argocd/secrets/secret-generator.yaml index 3d3c7de..625c0a9 100644 --- a/k8s/argocd/secrets/secret-generator.yaml +++ b/k8s/argocd/secrets/secret-generator.yaml @@ -31,3 +31,4 @@ files: - gotify-tokens-secrets.enc.yaml - gotify-smtp-secrets.enc.yaml - forgejo-smtp-secrets.enc.yaml + - paperless-ai-secrets.enc.yaml