apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: ddb-cluster namespace: ddb labels: app: postgresql layer: data spec: # 3-replica cluster — distributed across control-plane nodes (cp-1, cp-2, cp-3) # Provides HA for Forgejo and other stateful apps using shared DDB instances: 3 # PostgreSQL 16.2 imageName: ghcr.io/cloudnative-pg/postgresql:16.2 # Bootstrap: create app database + extensions bootstrap: initdb: database: app owner: app encoding: UTF8 localeCollate: C localeCType: C postInitApplicationSQL: - CREATE EXTENSION IF NOT EXISTS vector; - CREATE EXTENSION IF NOT EXISTS pgcrypto; - CREATE EXTENSION IF NOT EXISTS pg_trgm; # Simple ownership model: all apps use 'app' bootstrap user. # Isolation via separate database names, not separate roles. # Aligns with CNPG design (single cluster, multiple databases). # managed.roles removed - no per-app roles needed. # Disable superuser (security) enableSuperuserAccess: false # PostgreSQL configuration postgresql: parameters: shared_buffers: "256MB" max_parallel_workers: "4" max_parallel_workers_per_gather: "4" # WAL archiving for backups archive_mode: "on" archive_timeout: "5min" log_destination: "csvlog" log_directory: "/controller/log" log_filename: "postgres" log_rotation_age: "0" dynamic_shared_memory_type: "posix" # Storage on Longhorn storage: size: 10Gi storageClass: longhorn # Monitoring monitoring: enablePodMonitor: false disableDefaultQueries: false customQueriesConfigMap: - name: cnpg-default-monitoring key: queries # Pod anti-affinity for spreading replicas affinity: podAntiAffinityType: preferred