From 7695e4e38a19c04ad2e6e8bcfcbd415c916f1680 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 25 Oct 2026 12:47:48 +0100 Subject: [PATCH] Provision Paperless PostgreSQL with CloudNativePG --- .../paperless-postgresql/cluster/cluster.yaml | 40 +++++++++++++++++++ .../cluster/kustomization.yaml | 4 ++ .../service/kustomization.yaml | 4 ++ .../paperless-postgresql/service/service.yaml | 15 +++++++ bootstrap/kustomization.yaml | 1 + bootstrap/paperless-cnpg.yaml | 21 ++++++++++ bootstrap/paperless-project.yaml | 1 + 7 files changed, 86 insertions(+) create mode 100644 apps/paperless-postgresql/cluster/cluster.yaml create mode 100644 apps/paperless-postgresql/cluster/kustomization.yaml create mode 100644 apps/paperless-postgresql/service/kustomization.yaml create mode 100644 apps/paperless-postgresql/service/service.yaml create mode 100644 bootstrap/paperless-cnpg.yaml diff --git a/apps/paperless-postgresql/cluster/cluster.yaml b/apps/paperless-postgresql/cluster/cluster.yaml new file mode 100644 index 0000000..7bc4966 --- /dev/null +++ b/apps/paperless-postgresql/cluster/cluster.yaml @@ -0,0 +1,40 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: Cluster +metadata: + name: paperless-cnpg + namespace: paperless-ngx +spec: + instances: 1 + enableSuperuserAccess: true + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - odroid-h3-00 + - odroid-h3-01 + - odroid-h3-02 + - odroid-h3-03 + - odroid-h3-04 + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - odroid-h3-00 + - odroid-h3-03 + imageName: ghcr.io/cloudnative-pg/postgresql:17.11-standard-trixie + bootstrap: + initdb: + database: paperless + owner: paperless + secret: + name: paperless-cnpg-bootstrap + storage: + size: 8Gi + storageClass: rook-ceph-block-ec diff --git a/apps/paperless-postgresql/cluster/kustomization.yaml b/apps/paperless-postgresql/cluster/kustomization.yaml new file mode 100644 index 0000000..993fbde --- /dev/null +++ b/apps/paperless-postgresql/cluster/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - cluster.yaml diff --git a/apps/paperless-postgresql/service/kustomization.yaml b/apps/paperless-postgresql/service/kustomization.yaml new file mode 100644 index 0000000..9bb4d07 --- /dev/null +++ b/apps/paperless-postgresql/service/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - service.yaml diff --git a/apps/paperless-postgresql/service/service.yaml b/apps/paperless-postgresql/service/service.yaml new file mode 100644 index 0000000..c4a78a7 --- /dev/null +++ b/apps/paperless-postgresql/service/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgresql + namespace: paperless-ngx +spec: + ports: + - name: postgresql + port: 5432 + protocol: TCP + targetPort: 5432 + selector: + cnpg.io/cluster: paperless-cnpg + cnpg.io/instanceRole: primary + type: ClusterIP diff --git a/bootstrap/kustomization.yaml b/bootstrap/kustomization.yaml index 31ee82c..147a2c5 100644 --- a/bootstrap/kustomization.yaml +++ b/bootstrap/kustomization.yaml @@ -96,6 +96,7 @@ resources: - plex.yaml - jellyfin.yaml - paperless-project.yaml +- paperless-cnpg.yaml - paperless-storage.yaml - pdf-editor.yaml - scanner.yaml diff --git a/bootstrap/paperless-cnpg.yaml b/bootstrap/paperless-cnpg.yaml new file mode 100644 index 0000000..19cedb5 --- /dev/null +++ b/bootstrap/paperless-cnpg.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: paperless-cnpg + namespace: argocd + annotations: + argocd.argoproj.io/sync-wave: "0" +spec: + project: paperless + source: + repoURL: https://code.brunner.ninja/feedc0de/homelab-gitops.git + targetRevision: main + path: apps/paperless-postgresql/cluster + destination: + server: https://kubernetes.default.svc + namespace: paperless-ngx + syncPolicy: + automated: + enabled: true + prune: true + selfHeal: true diff --git a/bootstrap/paperless-project.yaml b/bootstrap/paperless-project.yaml index 2d59a32..ae4d71c 100644 --- a/bootstrap/paperless-project.yaml +++ b/bootstrap/paperless-project.yaml @@ -20,4 +20,5 @@ spec: - {group: "", kind: ServiceAccount} - {group: apps, kind: Deployment} - {group: apps, kind: StatefulSet} + - {group: postgresql.cnpg.io, kind: Cluster} - {group: networking.k8s.io, kind: Ingress}