mirror of
https://github.com/morten-olsen/homelab-apps.git
synced 2026-02-07 17:26:27 +01:00
add paperless-ngx
This commit is contained in:
7
apps/charts/paperless-ngx/Chart.yaml
Normal file
7
apps/charts/paperless-ngx/Chart.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
apiVersion: v2
|
||||
version: 1.0.0
|
||||
name: paperless-ngx
|
||||
dependencies:
|
||||
- name: common
|
||||
version: 1.0.0
|
||||
repository: file://../../common
|
||||
1
apps/charts/paperless-ngx/templates/client.yaml
Normal file
1
apps/charts/paperless-ngx/templates/client.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.oidc" . }}
|
||||
1
apps/charts/paperless-ngx/templates/database.yaml
Normal file
1
apps/charts/paperless-ngx/templates/database.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.database" . }}
|
||||
105
apps/charts/paperless-ngx/templates/deployment.yaml
Normal file
105
apps/charts/paperless-ngx/templates/deployment.yaml
Normal file
@@ -0,0 +1,105 @@
|
||||
{{- if .Values.deployment }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "common.fullname" . }}
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
spec:
|
||||
strategy:
|
||||
type: {{ include "common.deploymentStrategy" . }}
|
||||
{{- if hasKey .Values.deployment "replicas" }}
|
||||
replicas: {{ .Values.deployment.replicas }}
|
||||
{{- else }}
|
||||
replicas: {{ .Values.deployment.replicas }}
|
||||
{{- end }}
|
||||
{{- if hasKey .Values.deployment "revisionHistoryLimit" }}
|
||||
revisionHistoryLimit: {{ .Values.deployment.revisionHistoryLimit }}
|
||||
{{- else }}
|
||||
revisionHistoryLimit: 2
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "common.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
{{- if .Values.deployment.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml .Values.deployment.podAnnotations | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "common.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
{{- if .Values.oidc.enabled }}
|
||||
serviceAccountName: {{ include "common.fullname" . }}-oidc-config
|
||||
{{- else if .Values.deployment.serviceAccountName }}
|
||||
serviceAccountName: {{ .Values.deployment.serviceAccountName | replace "{release}" .Release.Name | replace "{fullname}" (include "common.fullname" .) }}
|
||||
{{- end }}
|
||||
{{- if .Values.deployment.hostNetwork }}
|
||||
hostNetwork: {{ .Values.deployment.hostNetwork }}
|
||||
{{- end }}
|
||||
{{- include "common.dnsConfig" . | nindent 6 }}
|
||||
{{- if .Values.oidc.enabled }}
|
||||
initContainers:
|
||||
- name: oidc-config-generator
|
||||
image: bitnami/kubectl:latest
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
CLIENT_ID=$(kubectl get secret {{ .Release.Name }}-oidc-credentials -o jsonpath='{.data.clientId}' | base64 -d)
|
||||
CLIENT_SECRET=$(kubectl get secret {{ .Release.Name }}-oidc-credentials -o jsonpath='{.data.clientSecret}' | base64 -d)
|
||||
ISSUER=$(kubectl get secret {{ .Release.Name }}-oidc-credentials -o jsonpath='{.data.issuer}' | base64 -d)
|
||||
# Construct well-known URL from issuer
|
||||
SERVER_URL="${ISSUER}/.well-known/openid-configuration"
|
||||
JSON="{\"openid_connect\":{\"OAUTH_PKCE_ENABLED\":true,\"APPS\":[{\"provider_id\":\"authentik\",\"name\":\"authentik\",\"client_id\":\"$CLIENT_ID\",\"secret\":\"$CLIENT_SECRET\",\"settings\":{\"server_url\":\"$SERVER_URL\"}}]}"
|
||||
kubectl create secret generic {{ include "common.fullname" . }}-oidc-providers --from-literal=providers="$JSON" --dry-run=client -o yaml | kubectl apply -f -
|
||||
env:
|
||||
- name: KUBERNETES_SERVICE_HOST
|
||||
value: "kubernetes.default.svc"
|
||||
- name: KUBERNETES_SERVICE_PORT
|
||||
value: "443"
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy | default "IfNotPresent" }}
|
||||
{{- if .Values.command }}
|
||||
command: {{- toYaml .Values.command | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.args }}
|
||||
args: {{- toYaml .Values.args | nindent 12 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
{{ include "common.containerPorts" . | indent 12 }}
|
||||
{{- if .Values.container.healthProbe }}
|
||||
livenessProbe:
|
||||
{{ include "common.healthProbe" . | indent 12 }}
|
||||
readinessProbe:
|
||||
{{ include "common.healthProbe" . | indent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.container.securityContext }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.container.securityContext | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.volumes }}
|
||||
volumeMounts:
|
||||
{{ include "common.volumeMounts" . | indent 12 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.env .Values.globals.timezone .Values.oidc.enabled }}
|
||||
env:
|
||||
{{ include "common.env" . | indent 12 }}
|
||||
{{- if .Values.oidc.enabled }}
|
||||
- name: PAPERLESS_SOCIALACCOUNT_PROVIDERS
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "common.fullname" . }}-oidc-providers
|
||||
key: providers
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.volumes }}
|
||||
volumes:
|
||||
{{- include "common.volumes" . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.oidc.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "common.fullname" . }}-oidc-providers
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
type: Opaque
|
||||
stringData:
|
||||
providers: ""
|
||||
{{- end }}
|
||||
1
apps/charts/paperless-ngx/templates/pvc.yaml
Normal file
1
apps/charts/paperless-ngx/templates/pvc.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.pvc" . }}
|
||||
15
apps/charts/paperless-ngx/templates/role.yaml
Normal file
15
apps/charts/paperless-ngx/templates/role.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
{{- if .Values.oidc.enabled }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: {{ include "common.fullname" . }}-oidc-config
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
resourceNames:
|
||||
- {{ .Release.Name }}-oidc-credentials
|
||||
- {{ include "common.fullname" . }}-oidc-providers
|
||||
verbs: ["get", "create", "update", "patch"]
|
||||
{{- end }}
|
||||
16
apps/charts/paperless-ngx/templates/rolebinding.yaml
Normal file
16
apps/charts/paperless-ngx/templates/rolebinding.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
{{- if .Values.oidc.enabled }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ include "common.fullname" . }}-oidc-config
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: {{ include "common.fullname" . }}-oidc-config
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ include "common.fullname" . }}-oidc-config
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1 @@
|
||||
{{ include "common.externalSecrets.externalSecrets" . }}
|
||||
@@ -0,0 +1 @@
|
||||
{{ include "common.externalSecrets.passwordGenerators" . }}
|
||||
1
apps/charts/paperless-ngx/templates/service.yaml
Normal file
1
apps/charts/paperless-ngx/templates/service.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.service" . }}
|
||||
8
apps/charts/paperless-ngx/templates/serviceaccount.yaml
Normal file
8
apps/charts/paperless-ngx/templates/serviceaccount.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
{{- if .Values.oidc.enabled }}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "common.fullname" . }}-oidc-config
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
{{- end }}
|
||||
1
apps/charts/paperless-ngx/templates/virtual-service.yaml
Normal file
1
apps/charts/paperless-ngx/templates/virtual-service.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.virtualService" . }}
|
||||
148
apps/charts/paperless-ngx/values.yaml
Normal file
148
apps/charts/paperless-ngx/values.yaml
Normal file
@@ -0,0 +1,148 @@
|
||||
image:
|
||||
repository: ghcr.io/paperless-ngx/paperless-ngx
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
subdomain: paperless
|
||||
|
||||
# Deployment configuration
|
||||
deployment:
|
||||
strategy: Recreate
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 0
|
||||
|
||||
# Container configuration
|
||||
container:
|
||||
port: 8000
|
||||
healthProbe:
|
||||
type: httpGet
|
||||
path: /api/
|
||||
port: http
|
||||
|
||||
# Service configuration
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
|
||||
# Volume configuration
|
||||
volumes:
|
||||
- name: data
|
||||
mountPath: /usr/src/paperless/data
|
||||
persistentVolumeClaim: data
|
||||
- name: media
|
||||
mountPath: /usr/src/paperless/media
|
||||
persistentVolumeClaim: media
|
||||
- name: consume
|
||||
mountPath: /usr/src/paperless/consume
|
||||
persistentVolumeClaim: consume
|
||||
- name: export
|
||||
mountPath: /usr/src/paperless/export
|
||||
persistentVolumeClaim: export
|
||||
|
||||
# Persistent volume claims
|
||||
persistentVolumeClaims:
|
||||
- name: data
|
||||
size: 10Gi
|
||||
storageClassName: persistent
|
||||
- name: media
|
||||
size: 50Gi
|
||||
storageClassName: persistent
|
||||
- name: consume
|
||||
size: 5Gi
|
||||
storageClassName: persistent
|
||||
- name: export
|
||||
size: 5Gi
|
||||
storageClassName: persistent
|
||||
|
||||
# VirtualService configuration
|
||||
virtualService:
|
||||
enabled: true
|
||||
gateways:
|
||||
public: true
|
||||
private: true
|
||||
|
||||
# OIDC client configuration
|
||||
oidc:
|
||||
enabled: true
|
||||
redirectUris:
|
||||
- "/accounts/oidc/authentik/login/callback/"
|
||||
subjectMode: user_username
|
||||
|
||||
# Database configuration
|
||||
database:
|
||||
enabled: true
|
||||
|
||||
# External Secrets configuration
|
||||
externalSecrets:
|
||||
- name: "{release}-secrets"
|
||||
passwords:
|
||||
- name: secretkey
|
||||
length: 64
|
||||
encoding: hex
|
||||
allowRepeat: false
|
||||
secretKeys:
|
||||
- secretkey
|
||||
|
||||
# Environment variables
|
||||
env:
|
||||
TZ:
|
||||
value: "{timezone}"
|
||||
PAPERLESS_URL:
|
||||
value: "https://{subdomain}.{domain}"
|
||||
PAPERLESS_SECRET_KEY:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-secrets"
|
||||
key: secretkey
|
||||
# Database configuration
|
||||
PAPERLESS_DBENGINE: postgresql
|
||||
PAPERLESS_DBHOST:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-connection"
|
||||
key: host
|
||||
PAPERLESS_DBPORT:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-connection"
|
||||
key: port
|
||||
PAPERLESS_DBNAME:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-connection"
|
||||
key: database
|
||||
PAPERLESS_DBUSER:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-connection"
|
||||
key: user
|
||||
PAPERLESS_DBPASS:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-connection"
|
||||
key: password
|
||||
# Redis configuration (external Redis required)
|
||||
# Update these values to point to your Redis instance
|
||||
PAPERLESS_REDIS: redis://redis.shared.svc.cluster.local:6379
|
||||
# OIDC configuration using django-allauth
|
||||
PAPERLESS_ENABLE_ALLAUTH: "true"
|
||||
PAPERLESS_APPS: "allauth.socialaccount.providers.openid_connect"
|
||||
# PAPERLESS_SOCIALACCOUNT_PROVIDERS is set via init container (see deployment.yaml)
|
||||
PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS: "true"
|
||||
PAPERLESS_SOCIAL_AUTO_SIGNUP: "true"
|
||||
# OIDC credentials for init container (will be used to construct JSON)
|
||||
PAPERLESS_OIDC_CLIENT_ID:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-oidc-credentials"
|
||||
key: clientId
|
||||
PAPERLESS_OIDC_CLIENT_SECRET:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-oidc-credentials"
|
||||
key: clientSecret
|
||||
PAPERLESS_OIDC_ISSUER_URL:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: "{release}-oidc-credentials"
|
||||
key: issuer
|
||||
Reference in New Issue
Block a user