feat(paperless-ngx): add paperless-ngx - #29
Merged
Merged
Conversation
Contributor
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: media/paperless-ngx
+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: media/paperless-ngx
@@ -0,0 +1,52 @@
+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+ labels:
+ kustomize.toolkit.fluxcd.io/name: cluster-apps
+ kustomize.toolkit.fluxcd.io/namespace: flux-system
+ name: paperless-ngx
+ namespace: media
+spec:
+ decryption:
+ provider: sops
+ deletionPolicy: WaitForTermination
+ interval: 1h
+ patches:
+ - patch: |-
+ apiVersion: helm.toolkit.fluxcd.io/v2
+ kind: HelmRelease
+ metadata:
+ name: _
+ spec:
+ install:
+ crds: CreateReplace
+ strategy:
+ name: RetryOnFailure
+ rollback:
+ cleanupOnFail: true
+ recreate: true
+ upgrade:
+ cleanupOnFail: true
+ crds: CreateReplace
+ strategy:
+ name: RemediateOnFailure
+ remediation:
+ remediateLastFailure: true
+ retries: 2
+ target:
+ group: helm.toolkit.fluxcd.io
+ kind: HelmRelease
+ path: ./kubernetes/apps/media/paperless-ngx/app
+ postBuild:
+ substituteFrom:
+ - kind: Secret
+ name: cluster-secrets
+ prune: true
+ sourceRef:
+ kind: GitRepository
+ name: flux-system
+ namespace: flux-system
+ targetNamespace: media
+ wait: true
+
--- kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx HelmRelease: media/paperless-ngx
+++ kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx HelmRelease: media/paperless-ngx
@@ -0,0 +1,102 @@
+---
+apiVersion: helm.toolkit.fluxcd.io/v2
+kind: HelmRelease
+metadata:
+ labels:
+ kustomize.toolkit.fluxcd.io/name: paperless-ngx
+ kustomize.toolkit.fluxcd.io/namespace: media
+ name: paperless-ngx
+ namespace: media
+spec:
+ chartRef:
+ kind: OCIRepository
+ name: paperless-ngx
+ install:
+ crds: CreateReplace
+ createNamespace: true
+ remediation:
+ retries: 3
+ strategy:
+ name: RetryOnFailure
+ interval: 1h
+ maxHistory: 3
+ rollback:
+ cleanupOnFail: true
+ recreate: true
+ timeout: 20m
+ uninstall:
+ keepHistory: false
+ upgrade:
+ cleanupOnFail: true
+ crds: CreateReplace
+ remediation:
+ remediateLastFailure: true
+ retries: 2
+ strategy:
+ name: RemediateOnFailure
+ values:
+ cnpg:
+ main:
+ backups:
+ credentials: s3
+ enabled: true
+ cluster:
+ singleNode: true
+ mode: recovery
+ recovery:
+ credentials: s3
+ method: object_store
+ credentials:
+ s3:
+ accessKey: ..PLACEHOLDER_S3ID..
+ bucket: ..PLACEHOLDER_S3PREFIX..-paperless
+ encrKey: ..PLACEHOLDER_S3KEY..
+ secretKey: ..PLACEHOLDER_S3KEY..
+ type: s3
+ url: https://placeholder.example
+ global:
+ stopAll: true
+ persistence:
+ consume:
+ enabled: true
+ mountPath: /consume
+ path: /mnt/media/filing/consume
+ server: 192.168.50.118
+ type: nfs
+ data:
+ volsync:
+ - credentials: s3
+ dest:
+ enabled: true
+ name: data
+ src:
+ enabled: true
+ trigger:
+ schedule: 30 1 * * *
+ type: restic
+ media:
+ enabled: true
+ mountPath: /media
+ path: /mnt/media/filing/store
+ server: 192.168.50.118
+ type: nfs
+ resources:
+ limits:
+ cpu: 5000m
+ memory: 10Gi
+ workload:
+ main:
+ podSpec:
+ containers:
+ main:
+ env:
+ PAPERLESS_ADMIN_MAIL: ..PLACEHOLDER_PSADMINE..
+ PAPERLESS_ADMIN_PASSWORD: ..PLACEHOLDER_PSADMINP..
+ PAPERLESS_ADMIN_USER: ..PLACEHOLDER_PSADMINU..
+ PAPERLESS_ENABLE_HTTP_REMOTE_USER: true
+ PAPERLESS_LOGOUT_REDIRECT_URL: ..PLACEHOLDER_PSLOURL..
+ PAPERLESS_OCR_LANGUAGE: eng
+ PAPERLESS_OCR_LANGUAGES: eng fra deu spa ita
+ PAPERLESS_URL: ..PLACEHOLDER_PSURL..
+ PAPERLESS_WEBSERVER_WORKERS: 2
+
--- kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx OCIRepository: media/paperless-ngx
+++ kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx OCIRepository: media/paperless-ngx
@@ -0,0 +1,18 @@
+---
+apiVersion: source.toolkit.fluxcd.io/v1
+kind: OCIRepository
+metadata:
+ labels:
+ kustomize.toolkit.fluxcd.io/name: paperless-ngx
+ kustomize.toolkit.fluxcd.io/namespace: media
+ name: paperless-ngx
+ namespace: media
+spec:
+ interval: 15m
+ layerSelector:
+ mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
+ operation: copy
+ ref:
+ tag: 11.35.1
+ url: oci://oci.trueforge.org/truecharts/paperless-ngx
+
--- kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx HTTPRoute: media/paperless-ngx
+++ kubernetes/apps/media/paperless-ngx/app Kustomization: media/paperless-ngx HTTPRoute: media/paperless-ngx
@@ -0,0 +1,25 @@
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+ annotations:
+ gatus.home-operations.com/endpoint: |
+ client:
+ dns-resolver: tcp://..PLACEHOLDER_UNIFI_HOST..:53
+ labels:
+ kustomize.toolkit.fluxcd.io/name: paperless-ngx
+ kustomize.toolkit.fluxcd.io/namespace: media
+ name: paperless-ngx
+ namespace: media
+spec:
+ hostnames:
+ - filing...PLACEHOLDER_SECRET_DOMAIN..
+ parentRefs:
+ - name: envoy-internal
+ namespace: network
+ sectionName: https
+ rules:
+ - backendRefs:
+ - name: paperless-ngx
+ port: 10140
+ |
Contributor
--- HelmRelease: media/paperless-ngx ConfigMap: media/paperless-ngx-redis-health
+++ HelmRelease: media/paperless-ngx ConfigMap: media/paperless-ngx-redis-health
@@ -0,0 +1,82 @@
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: paperless-ngx-redis-health
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: redis
+ helm-revision: '1'
+ release: paperless-ngx
+data:
+ ping_liveness_local.sh: |-
+ #!/bin/bash
+ [[ -n "$REDIS_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_PASSWORD"
+ response=$(
+ timeout -s 3 $1 \
+ redis-cli \
+ -h localhost \
+ -p $REDIS_PORT \
+ ping
+ )
+ if [ "$response" != "PONG" ] && [ "$response" != "LOADING Redis is loading the dataset in memory" ]; then
+ echo "$response"
+ exit 1
+ fi
+ ping_liveness_local_and_master.sh: |-
+ script_dir="$(dirname "$0")"
+ exit_status=0
+ "$script_dir/ping_liveness_local.sh" $1 || exit_status=$?
+ "$script_dir/ping_liveness_master.sh" $1 || exit_status=$?
+ exit $exit_status
+ ping_liveness_master.sh: |-
+ #!/bin/bash
+ [[ -n "$REDIS_MASTER_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_MASTER_PASSWORD"
+ response=$(
+ timeout -s 3 $1 \
+ redis-cli \
+ -h $REDIS_MASTER_HOST \
+ -p $REDIS_MASTER_PORT_NUMBER \
+ ping
+ )
+ if [ "$response" != "PONG" ] && [ "$response" != "LOADING Redis is loading the dataset in memory" ]; then
+ echo "$response"
+ exit 1
+ fi
+ ping_readiness_local.sh: |-
+ #!/bin/bash
+ [[ -n "$REDIS_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_PASSWORD"
+ response=$(
+ timeout -s 3 $1 \
+ redis-cli \
+ -h localhost \
+ -p $REDIS_PORT \
+ ping
+ )
+ if [ "$response" != "PONG" ]; then
+ echo "failed to connect using password: $REDIS_PASSWORD response: $response"
+ exit 1
+ fi
+ ping_readiness_local_and_master.sh: |-
+ script_dir="$(dirname "$0")"
+ exit_status=0
+ "$script_dir/ping_readiness_local.sh" $1 || exit_status=$?
+ "$script_dir/ping_readiness_master.sh" $1 || exit_status=$?
+ exit $exit_status
+ ping_readiness_master.sh: |-
+ #!/bin/bash
+ [[ -n "$REDIS_MASTER_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_MASTER_PASSWORD"
+ response=$(
+ timeout -s 3 $1 \
+ redis-cli \
+ -h $REDIS_MASTER_HOST \
+ -p $REDIS_MASTER_PORT_NUMBER \
+ ping
+ )
+ if [ "$response" != "PONG" ]; then
+ echo "$response"
+ exit 1
+ fi
+
--- HelmRelease: media/paperless-ngx PersistentVolumeClaim: media/paperless-ngx-data
+++ HelmRelease: media/paperless-ngx PersistentVolumeClaim: media/paperless-ngx-data
@@ -0,0 +1,23 @@
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: paperless-ngx-data
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 100Gi
+ dataSourceRef:
+ kind: ReplicationDestination
+ name: paperless-ngx-data-data-dest
+ apiGroup: volsync.backube
+
--- HelmRelease: media/paperless-ngx Service: media/paperless-ngx-redis
+++ HelmRelease: media/paperless-ngx Service: media/paperless-ngx-redis
@@ -0,0 +1,26 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: paperless-ngx-redis
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: redis
+ helm-revision: '1'
+ release: paperless-ngx
+ service.name: main
+spec:
+ type: ClusterIP
+ publishNotReadyAddresses: false
+ ports:
+ - name: main
+ port: 6379
+ protocol: TCP
+ targetPort: 6379
+ selector:
+ pod.name: main
+ app.kubernetes.io/name: redis
+ app.kubernetes.io/instance: paperless-ngx
+
--- HelmRelease: media/paperless-ngx Service: media/paperless-ngx
+++ HelmRelease: media/paperless-ngx Service: media/paperless-ngx
@@ -0,0 +1,26 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: paperless-ngx
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+ service.name: main
+spec:
+ type: ClusterIP
+ publishNotReadyAddresses: false
+ ports:
+ - name: main
+ port: 10140
+ protocol: TCP
+ targetPort: 8000
+ selector:
+ pod.name: main
+ app.kubernetes.io/name: paperless-ngx
+ app.kubernetes.io/instance: paperless-ngx
+
--- HelmRelease: media/paperless-ngx Deployment: media/paperless-ngx
+++ HelmRelease: media/paperless-ngx Deployment: media/paperless-ngx
@@ -0,0 +1,447 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: paperless-ngx
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ replicas: 0
+ revisionHistoryLimit: 3
+ strategy:
+ type: Recreate
+ selector:
+ matchLabels:
+ pod.name: main
+ app.kubernetes.io/name: paperless-ngx
+ app.kubernetes.io/instance: paperless-ngx
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ pod.lifecycle: permanent
+ pod.name: main
+ release: paperless-ngx
+ truecharts.org/pvc: data
+ annotations:
+ checksum/cnpg: 09206ce3d3e9134dd5c00dcb44cc7e42f8a27ef3aca82e6e4a55a8498897a2f8
+ checksum/configmaps: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
+ checksum/mariadb: 09c85576cb45b1eecd1467732b11ea8fa3363b0105c465f02a6ad64991521d52
+ checksum/mongodb: 09c85576cb45b1eecd1467732b11ea8fa3363b0105c465f02a6ad64991521d52
+ checksum/persistence: 2077067821cf55dfa4782466af07eb973a41c110e59bbd0b7f59765673524fe7
+ checksum/services: 7a3ebb832b2e38b5912f1803ffe219fe647b5cd1c9acac2fb62aa8ae9733b2e4
+ checksum/solr: 29c14feeaddbf7762052db593898d274941f539cee681ddc613957587686f347
+ spec:
+ serviceAccountName: default
+ automountServiceAccountToken: false
+ runtimeClassName: null
+ hostNetwork: false
+ hostPID: false
+ hostIPC: false
+ shareProcessNamespace: false
+ enableServiceLinks: false
+ restartPolicy: Always
+ nodeSelector:
+ kubernetes.io/arch: amd64
+ affinity:
+ podAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - topologyKey: kubernetes.io/hostname
+ labelSelector:
+ matchExpressions:
+ - key: truecharts.org/pvc
+ operator: In
+ values:
+ - data
+ topologySpreadConstraints:
+ - maxSkew: 1
+ whenUnsatisfiable: ScheduleAnyway
+ topologyKey: kubernetes.io/hostname
+ labelSelector:
+ matchLabels:
+ pod.name: main
+ app.kubernetes.io/name: paperless-ngx
+ app.kubernetes.io/instance: paperless-ngx
+ nodeAffinityPolicy: Honor
+ nodeTaintsPolicy: Honor
+ dnsPolicy: ClusterFirst
+ dnsConfig:
+ options:
+ - name: ndots
+ value: '1'
+ terminationGracePeriodSeconds: 60
+ securityContext:
+ fsGroup: 568
+ fsGroupChangePolicy: OnRootMismatch
+ supplementalGroups:
+ - 568
+ sysctls: []
+ hostUsers: true
+ containers:
+ - name: paperless-ngx
+ image: ghcr.io/paperless-ngx/paperless-ngx:2.20.0@sha256:8ffd737c69a569bbdadc118e7f54b0b1050ffac2868fdf9e390a68cb7c82a79d
+ imagePullPolicy: IfNotPresent
+ tty: false
+ stdin: false
+ ports:
+ - name: main
+ containerPort: 8000
+ protocol: TCP
+ hostPort: null
+ volumeMounts:
+ - name: consume
+ mountPath: /consume
+ readOnly: false
+ - name: data
+ mountPath: /data
+ readOnly: false
+ - name: devshm
+ mountPath: /dev/shm
+ readOnly: false
+ - name: media
+ mountPath: /media
+ readOnly: false
+ - name: shared
+ mountPath: /shared
+ readOnly: false
+ - name: tmp
+ mountPath: /tmp
+ readOnly: false
+ - name: varlogs
+ mountPath: /var/logs
+ readOnly: false
+ livenessProbe:
+ httpGet:
+ port: 8000
+ path: /
+ scheme: HTTP
+ httpHeaders:
+ - name: Host
+ value: localhost
+ initialDelaySeconds: 12
+ failureThreshold: 5
+ successThreshold: 1
+ timeoutSeconds: 5
+ periodSeconds: 15
+ readinessProbe:
+ httpGet:
+ port: 8000
+ path: /
+ scheme: HTTP
+ httpHeaders:
+ - name: Host
+ value: localhost
+ initialDelaySeconds: 10
+ failureThreshold: 4
+ successThreshold: 2
+ timeoutSeconds: 5
+ periodSeconds: 12
+ startupProbe:
+ httpGet:
+ port: 8000
+ path: /
+ scheme: HTTP
+ httpHeaders:
+ - name: Host
+ value: localhost
+ initialDelaySeconds: 10
+ failureThreshold: 60
+ successThreshold: 1
+ timeoutSeconds: 3
+ periodSeconds: 5
+ resources:
+ requests:
+ cpu: 75m
+ memory: 200Mi
+ limits:
+ cpu: 5000m
+ memory: 10Gi
+ securityContext:
+ runAsNonRoot: false
+ runAsUser: 0
+ runAsGroup: 0
+ readOnlyRootFilesystem: false
+ allowPrivilegeEscalation: false
+ privileged: false
+ seccompProfile:
+ type: RuntimeDefault
+ capabilities:
+ add:
+ - CHOWN
+ - SETUID
+ - SETGID
+ - FOWNER
+ - DAC_OVERRIDE
+ drop:
+ - ALL
+ env:
+ - name: TZ
+ value: UTC
+ - name: UMASK
+ value: '0022'
+ - name: UMASK_SET
+ value: '0022'
+ - name: NVIDIA_VISIBLE_DEVICES
+ value: void
+ - name: PUID
+ value: '568'
+ - name: USER_ID
+ value: '568'
+ - name: UID
+ value: '568'
+ - name: PGID
+ value: '568'
+ - name: GROUP_ID
+ value: '568'
+ - name: GID
+ value: '568'
+ - name: PAPERLESS_ADMIN_MAIL
+ value: ..PLACEHOLDER_PSADMINE..
+ - name: PAPERLESS_ADMIN_PASSWORD
+ value: ..PLACEHOLDER_PSADMINP..
+ - name: PAPERLESS_ADMIN_USER
+ value: ..PLACEHOLDER_PSADMINU..
+ - name: PAPERLESS_CONSUMPTION_DIR
+ value: /consume/
+ - name: PAPERLESS_DATA_DIR
+ value: /data/
+ - name: PAPERLESS_DBHOST
+ valueFrom:
+ secretKeyRef:
+ key: host
+ name: paperless-ngx-cnpg-main-urls
+ - name: PAPERLESS_DBNAME
+ value: paperless-ng
+ - name: PAPERLESS_DBPASS
+ valueFrom:
+ secretKeyRef:
+ key: password
+ name: paperless-ngx-cnpg-main-user
+ - name: PAPERLESS_DBPORT
+ value: '5432'
+ - name: PAPERLESS_DBUSER
+ value: paperless-ng
+ - name: PAPERLESS_ENABLE_HTTP_REMOTE_USER
+ value: 'true'
+ - name: PAPERLESS_LOGOUT_REDIRECT_URL
+ value: ..PLACEHOLDER_PSLOURL..
+ - name: PAPERLESS_MEDIA_ROOT
+ value: /media/
+ - name: PAPERLESS_OCR_LANGUAGE
+ value: eng
+ - name: PAPERLESS_OCR_LANGUAGES
+ value: eng fra deu spa ita
+ - name: PAPERLESS_PORT
+ value: '8000'
+ - name: PAPERLESS_REDIS
+ valueFrom:
+ secretKeyRef:
+ key: url
+ name: paperless-ngx-rediscreds
+ - name: PAPERLESS_SECRET_KEY
+ valueFrom:
+ secretKeyRef:
+ key: PAPERLESS_SECRET_KEY
+ name: paperless-ngx-secrets
+ - name: PAPERLESS_TIKA_ENABLED
+ value: '0'
+ - name: PAPERLESS_TIKA_ENDPOINT
+ value: http://paperless-ngx-tika:9998
+ - name: PAPERLESS_TIKA_GOTENBERG_ENDPOINT
+ value: http://paperless-ngx-gotenberg:3000
+ - name: PAPERLESS_TIME_ZONE
+ value: UTC
+ - name: PAPERLESS_URL
+ value: ..PLACEHOLDER_PSURL..
+ - name: PAPERLESS_WEBSERVER_WORKERS
+ value: '2'
+ - name: USERMAP_GID
+ value: '568'
+ - name: USERMAP_UID
+ value: '568'
+ initContainers:
+ - name: paperless-ngx-system-cnpg-wait
+ image: oci.trueforge.org/containerforge/postgresql-client:1.1.0
+ imagePullPolicy: IfNotPresent
+ tty: false
+ stdin: false
+ command:
+ - /bin/sh
+ - -c
+ - |-
+ /bin/sh <<'EOF'
+ echo "Executing DB waits..."
+ echo "Testing Database availability on [CNPG RW]"
+ until
+ echo "Testing database on url: [paperless-ngx-cnpg-main-rw]"
+ pg_isready -U paperless-ng -d paperless-ng -h paperless-ngx-cnpg-main-rw
+ do sleep 5
+ done
+ echo "Database available on url: [paperless-ngx-cnpg-main-rw]"
+ echo "Done executing DB waits..."
+ EOF
+ volumeMounts:
+ - name: devshm
+ mountPath: /dev/shm
+ readOnly: false
+ - name: shared
+ mountPath: /shared
+ readOnly: false
+ - name: tmp
+ mountPath: /tmp
+ readOnly: false
+ - name: varlogs
+ mountPath: /var/logs
+ readOnly: false
+ resources:
+ requests:
+ cpu: 10m
+ memory: 50Mi
+ limits:
+ cpu: 500m
+ memory: 512Mi
+ securityContext:
+ runAsNonRoot: true
+ runAsUser: 568
+ runAsGroup: 568
+ readOnlyRootFilesystem: true
+ allowPrivilegeEscalation: false
+ privileged: false
+ seccompProfile:
+ type: RuntimeDefault
+ capabilities:
+ add: []
+ drop:
+ - ALL
+ env:
+ - name: TZ
+ value: UTC
+ - name: UMASK
+ value: '0022'
+ - name: UMASK_SET
+ value: '0022'
+ - name: NVIDIA_VISIBLE_DEVICES
+ value: void
+ - name: S6_READ_ONLY_ROOT
[Diff truncated by flux-local]
--- HelmRelease: media/paperless-ngx StatefulSet: media/paperless-ngx-redis
+++ HelmRelease: media/paperless-ngx StatefulSet: media/paperless-ngx-redis
@@ -0,0 +1,227 @@
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: paperless-ngx-redis
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: redis
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ replicas: 0
+ revisionHistoryLimit: 3
+ serviceName: paperless-ngx-redis
+ updateStrategy:
+ type: RollingUpdate
+ selector:
+ matchLabels:
+ pod.name: main
+ app.kubernetes.io/name: redis
+ app.kubernetes.io/instance: paperless-ngx
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: redis
+ helm-revision: '1'
+ pod.lifecycle: permanent
+ pod.name: main
+ release: paperless-ngx
+ annotations:
+ checksum/cnpg: fc940fff4269c53072f7039f0811133e9b83400670af014010bf50d3f13740f4
+ checksum/configmaps: e4ff2990e1b108efb5fc391e633d1bb258a621411ef64149c58626f3a7451ff6
+ checksum/mariadb: 09c85576cb45b1eecd1467732b11ea8fa3363b0105c465f02a6ad64991521d52
+ checksum/mongodb: 09c85576cb45b1eecd1467732b11ea8fa3363b0105c465f02a6ad64991521d52
+ checksum/persistence: 596e0b956bd4bdfb4d70ff2e7dde67dc31cb5475cc00cf96d97522d423c74376
+ checksum/services: 1fbe77c7cddc2e9997579990c10c46e0224ee9bc92911122de33093d0550ad9f
+ checksum/solr: 29c14feeaddbf7762052db593898d274941f539cee681ddc613957587686f347
+ spec:
+ serviceAccountName: default
+ automountServiceAccountToken: false
+ runtimeClassName: null
+ hostNetwork: false
+ hostPID: false
+ hostIPC: false
+ shareProcessNamespace: false
+ enableServiceLinks: false
+ restartPolicy: Always
+ nodeSelector:
+ kubernetes.io/arch: amd64
+ topologySpreadConstraints:
+ - maxSkew: 1
+ whenUnsatisfiable: ScheduleAnyway
+ topologyKey: kubernetes.io/hostname
+ labelSelector:
+ matchLabels:
+ pod.name: main
+ app.kubernetes.io/name: redis
+ app.kubernetes.io/instance: paperless-ngx
+ nodeAffinityPolicy: Honor
+ nodeTaintsPolicy: Honor
+ dnsPolicy: ClusterFirst
+ dnsConfig:
+ options:
+ - name: ndots
+ value: '1'
+ terminationGracePeriodSeconds: 60
+ securityContext:
+ fsGroup: 568
+ fsGroupChangePolicy: OnRootMismatch
+ supplementalGroups:
+ - 568
+ sysctls: []
+ hostUsers: true
+ containers:
+ - name: paperless-ngx-redis
+ image: docker.io/bitnamisecure/redis:latest@sha256:c9fe12d04ead99c483a030768aa80b3bb8a96d254bb6d02d0fb30374c53077e1
+ imagePullPolicy: IfNotPresent
+ tty: false
+ stdin: false
+ ports:
+ - name: main
+ containerPort: 6379
+ protocol: TCP
+ hostPort: null
+ volumeMounts:
+ - name: devshm
+ mountPath: /dev/shm
+ readOnly: false
+ - name: redis-health
+ mountPath: /health
+ readOnly: false
+ - name: shared
+ mountPath: /shared
+ readOnly: false
+ - name: tmp
+ mountPath: /tmp
+ readOnly: false
+ - name: varlogs
+ mountPath: /var/logs
+ readOnly: false
+ - name: varrun
+ mountPath: /var/run
+ readOnly: false
+ livenessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - /health/ping_liveness_local.sh 2
+ initialDelaySeconds: 12
+ failureThreshold: 5
+ successThreshold: 1
+ timeoutSeconds: 5
+ periodSeconds: 15
+ readinessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - /health/ping_readiness_local.sh 2
+ initialDelaySeconds: 10
+ failureThreshold: 4
+ successThreshold: 2
+ timeoutSeconds: 5
+ periodSeconds: 12
+ startupProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - /health/ping_readiness_local.sh 2
+ initialDelaySeconds: 10
+ failureThreshold: 60
+ successThreshold: 1
+ timeoutSeconds: 3
+ periodSeconds: 5
+ resources:
+ requests:
+ cpu: 75m
+ memory: 200Mi
+ limits:
+ cpu: 1500m
+ memory: 2400Mi
+ securityContext:
+ runAsNonRoot: false
+ runAsUser: 568
+ runAsGroup: 0
+ readOnlyRootFilesystem: false
+ allowPrivilegeEscalation: false
+ privileged: false
+ seccompProfile:
+ type: RuntimeDefault
+ capabilities:
+ add: []
+ drop:
+ - ALL
+ env:
+ - name: TZ
+ value: UTC
+ - name: UMASK
+ value: '0022'
+ - name: UMASK_SET
+ value: '0022'
+ - name: NVIDIA_VISIBLE_DEVICES
+ value: void
+ - name: PUID
+ value: '568'
+ - name: USER_ID
+ value: '568'
+ - name: UID
+ value: '568'
+ - name: PGID
+ value: '568'
+ - name: GROUP_ID
+ value: '568'
+ - name: GID
+ value: '568'
+ - name: ALLOW_EMPTY_PASSWORD
+ value: 'yes'
+ - name: REDIS_PASSWORD
+ value: PLACEHOLDERPASSWORD
+ - name: REDIS_PORT
+ value: '6379'
+ - name: REDIS_REPLICATION_MODE
+ value: master
+ volumes:
+ - name: redis-health
+ configMap:
+ name: paperless-ngx-redis-health
+ defaultMode: 493
+ optional: false
+ items:
+ - key: ping_readiness_local.sh
+ path: ping_readiness_local.sh
+ - key: ping_liveness_local.sh
+ path: ping_liveness_local.sh
+ - key: ping_readiness_master.sh
+ path: ping_readiness_master.sh
+ - key: ping_liveness_master.sh
+ path: ping_liveness_master.sh
+ - key: ping_liveness_local_and_master.sh
+ path: ping_liveness_local_and_master.sh
+ - key: ping_readiness_local_and_master.sh
+ path: ping_readiness_local_and_master.sh
+ - name: devshm
+ emptyDir:
+ medium: Memory
+ sizeLimit: 2400Mi
+ - name: shared
+ emptyDir: {}
+ - name: tmp
+ emptyDir:
+ medium: Memory
+ sizeLimit: 2400Mi
+ - name: varlogs
+ emptyDir:
+ medium: Memory
+ sizeLimit: 2400Mi
+ - name: varrun
+ emptyDir:
+ medium: Memory
+ sizeLimit: 2400Mi
+
--- HelmRelease: media/paperless-ngx Cluster: media/paperless-ngx-cnpg-main
+++ HelmRelease: media/paperless-ngx Cluster: media/paperless-ngx-cnpg-main
@@ -0,0 +1,88 @@
+---
+apiVersion: postgresql.cnpg.io/v1
+kind: Cluster
+metadata:
+ name: paperless-ngx-cnpg-main
+ namespace: media
+ labels:
+ cnpg.io/reload: 'on'
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+ annotations:
+ cnpg.io/hibernation: 'on'
+ cnpg.io/skipEmptyWalArchiveCheck: enabled
+spec:
+ imageName: ghcr.io/cloudnative-pg/postgresql:16.11
+ postgresUID: 26
+ postgresGID: 26
+ enableSuperuserAccess: true
+ primaryUpdateStrategy: unsupervised
+ primaryUpdateMethod: switchover
+ logLevel: info
+ instances: 2
+ nodeMaintenanceWindow:
+ inProgress: true
+ reusePVC: true
+ resources:
+ requests:
+ cpu: 75m
+ memory: 200Mi
+ limits:
+ cpu: 5000m
+ memory: 10Gi
+ storage:
+ pvcTemplate:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 100Gi
+ walStorage:
+ pvcTemplate:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 100Gi
+ bootstrap:
+ recovery:
+ secret:
+ name: paperless-ngx-cnpg-main-user
+ database: paperless-ng
+ owner: paperless-ng
+ source: paperless-ngx-cnpg-main
+ externalClusters:
+ - name: paperless-ngx-cnpg-main
+ barmanObjectStore:
+ endpointURL: https://placeholder.example
+ destinationPath: s3://..PLACEHOLDER_S3PREFIX..-paperless/paperless-ngx/cnpg
+ serverName: paperless-ngx-cnpg-main
+ s3Credentials:
+ accessKeyId:
+ name: paperless-ngx-cnpg-main-provider-recovery-s3-creds
+ key: ACCESS_KEY_ID
+ secretAccessKey:
+ name: paperless-ngx-cnpg-main-provider-recovery-s3-creds
+ key: ACCESS_SECRET_KEY
+ backup:
+ retentionPolicy: 30d
+ barmanObjectStore:
+ data:
+ jobs: 2
+ compression: bzip2
+ wal:
+ compression: bzip2
+ endpointURL: https://placeholder.example
+ destinationPath: s3://..PLACEHOLDER_S3PREFIX..-paperless/paperless-ngx/cnpg
+ serverName: paperless-ngx-cnpg-main
+ s3Credentials:
+ accessKeyId:
+ name: paperless-ngx-cnpg-main-provider-backup-s3-creds
+ key: ACCESS_KEY_ID
+ secretAccessKey:
+ name: paperless-ngx-cnpg-main-provider-backup-s3-creds
+ key: ACCESS_SECRET_KEY
+
--- HelmRelease: media/paperless-ngx ReplicationDestination: media/paperless-ngx-data-data-dest
+++ HelmRelease: media/paperless-ngx ReplicationDestination: media/paperless-ngx-data-data-dest
@@ -0,0 +1,29 @@
+---
+apiVersion: volsync.backube/v1alpha1
+kind: ReplicationDestination
+metadata:
+ name: paperless-ngx-data-data-dest
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ trigger:
+ manual: restore-once
+ restic:
+ repository: paperless-ngx-data-volsync-data
+ copyMethod: Snapshot
+ capacity: 100Gi
+ cleanupTempPVC: false
+ cleanupCachePVC: false
+ accessModes:
+ - ReadWriteOnce
+ cacheCapacity: 10Gi
+ moverSecurityContext:
+ runAsUser: 0
+ runAsGroup: 0
+ fsGroup: 568
+
--- HelmRelease: media/paperless-ngx ReplicationSource: media/paperless-ngx-data-data
+++ HelmRelease: media/paperless-ngx ReplicationSource: media/paperless-ngx-data-data
@@ -0,0 +1,35 @@
+---
+apiVersion: volsync.backube/v1alpha1
+kind: ReplicationSource
+metadata:
+ name: paperless-ngx-data-data
+ namespace: media
+ labels:
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ sourcePVC: paperless-ngx-data
+ trigger:
+ schedule: 30 1 * * *
+ restic:
+ repository: paperless-ngx-data-volsync-data
+ copyMethod: Snapshot
+ pruneIntervalDays: 7
+ unlock: '20251205210640'
+ retain:
+ hourly: 6
+ daily: 5
+ weekly: 4
+ monthly: 3
+ yearly: 1
+ accessModes:
+ - ReadWriteOnce
+ cacheCapacity: 10Gi
+ moverSecurityContext:
+ runAsUser: 0
+ runAsGroup: 0
+ fsGroup: 568
+
--- HelmRelease: media/paperless-ngx ScheduledBackup: media/paperless-ngx-cnpg-main-sched-backup-daily-backup
+++ HelmRelease: media/paperless-ngx ScheduledBackup: media/paperless-ngx-cnpg-main-sched-backup-daily-backup
@@ -0,0 +1,21 @@
+---
+apiVersion: postgresql.cnpg.io/v1
+kind: ScheduledBackup
+metadata:
+ name: paperless-ngx-cnpg-main-sched-backup-daily-backup
+ namespace: media
+ labels:
+ cnpg.io/cluster: paperless-ngx-cnpg-main
+ app.kubernetes.io/instance: paperless-ngx
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: paperless-ngx
+ helm-revision: '1'
+ release: paperless-ngx
+spec:
+ schedule: 0 0 0 * * *
+ backupOwnerReference: self
+ suspend: true
+ immediate: true
+ cluster:
+ name: paperless-ngx-cnpg-main
+ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Manual Pull Request
🚀 Summary
📦 Affected Areas
✅ Checklist
./repositories/helm🧠 Notes for Myself