apiVersion: v1 kind: Namespace metadata: name: paperless-ngx --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redis-data namespace: paperless-ngx spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: v1 kind: ConfigMap metadata: name: paperless-config namespace: paperless-ngx data: PAPERLESS_REDIS: "redis://redis:6379" PAPERLESS_URL: "https://${PAPERLESS_HOST}" PAPERLESS_TIME_ZONE: "Europe/Helsinki" PAPERLESS_OCR_LANGUAGE: "eng" PAPERLESS_SECRET_KEY: "change-me-to-a-secure-secret-key" PAPERLESS_CSRF_TRUSTED_ORIGINS: "https://${PAPERLESS_HOST}" PAPERLESS_USE_X_FORWARD_HOST: "true" PAPERLESS_USE_X_FORWARD_PORT: "true" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: paperless-data namespace: paperless-ngx spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: paperless-media namespace: paperless-ngx spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: paperless-ngx spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:7 ports: - containerPort: 6379 volumeMounts: - name: redis-data mountPath: /data resources: requests: memory: "128Mi" cpu: "50m" limits: memory: "256Mi" cpu: "200m" volumes: - name: redis-data persistentVolumeClaim: claimName: redis-data --- apiVersion: apps/v1 kind: Deployment metadata: name: paperless-ngx namespace: paperless-ngx spec: replicas: 1 selector: matchLabels: app: paperless-ngx template: metadata: labels: app: paperless-ngx spec: containers: - name: paperless-ngx image: ghcr.io/paperless-ngx/paperless-ngx:latest ports: - containerPort: 8000 envFrom: - configMapRef: name: paperless-config volumeMounts: - name: paperless-data mountPath: /usr/src/paperless/data - name: paperless-media mountPath: /usr/src/paperless/media resources: requests: memory: "512Mi" cpu: "200m" limits: memory: "2Gi" cpu: "1000m" livenessProbe: httpGet: path: / port: 8000 initialDelaySeconds: 60 periodSeconds: 30 readinessProbe: httpGet: path: / port: 8000 initialDelaySeconds: 30 periodSeconds: 10 volumes: - name: paperless-data persistentVolumeClaim: claimName: paperless-data - name: paperless-media persistentVolumeClaim: claimName: paperless-media --- apiVersion: v1 kind: Service metadata: name: redis namespace: paperless-ngx spec: selector: app: redis ports: - port: 6379 targetPort: 6379 --- apiVersion: v1 kind: Service metadata: name: paperless-ngx namespace: paperless-ngx spec: selector: app: paperless-ngx ports: - port: 8000 targetPort: 8000 type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: paperless-ngx-ingress namespace: paperless-ngx annotations: cert-manager.io/cluster-issuer: "acme-issuer" spec: ingressClassName: nginx tls: - hosts: - "${PAPERLESS_HOST}" secretName: paperless-tls rules: - host: "${PAPERLESS_HOST}" http: paths: - path: / pathType: Prefix backend: service: name: paperless-ngx port: number: 8000