diff --git a/clusters/homelab/apps/davis.yaml b/clusters/homelab/apps/davis.yaml new file mode 100644 index 0000000..0fd77dc --- /dev/null +++ b/clusters/homelab/apps/davis.yaml @@ -0,0 +1,16 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: davis + namespace: flux-system +spec: + interval: 10m0s + path: ./clusters/homelab/davis + prune: true + sourceRef: + kind: GitRepository + name: flux-system + decryption: + provider: sops + secretRef: + name: sops-age diff --git a/clusters/homelab/apps/davis/cnpg-cluster.yaml b/clusters/homelab/apps/davis/cnpg-cluster.yaml new file mode 100644 index 0000000..707d9e2 --- /dev/null +++ b/clusters/homelab/apps/davis/cnpg-cluster.yaml @@ -0,0 +1,26 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: Cluster +metadata: + name: davis-db + namespace: davis +spec: + instances: 3 + storage: + size: 1Gi + storageClass: longhorn + backup: + barmanObjectStore: + destinationPath: s3://cnpg-backups/davis + endpointURL: http://192.168.2.107:9010 + s3Credentials: + accessKeyId: + name: minio-cnpg-credentials + key: ACCESS_KEY_ID + secretAccessKey: + name: minio-cnpg-credentials + key: ACCESS_SECRET_KEY + retentionPolicy: "30d" + bootstrap: + initdb: + database: davis + owner: davis diff --git a/clusters/homelab/apps/davis/cnpg-scheduledbackup.yaml b/clusters/homelab/apps/davis/cnpg-scheduledbackup.yaml new file mode 100644 index 0000000..30a92c6 --- /dev/null +++ b/clusters/homelab/apps/davis/cnpg-scheduledbackup.yaml @@ -0,0 +1,10 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: ScheduledBackup +metadata: + name: davis-db-backup + namespace: davis +spec: + schedule: "0 3 * * *" + backupOwnerReference: self + cluster: + name: davis-db diff --git a/clusters/homelab/apps/davis/deployment.yaml b/clusters/homelab/apps/davis/deployment.yaml new file mode 100644 index 0000000..57b974b --- /dev/null +++ b/clusters/homelab/apps/davis/deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: davis + namespace: davis +spec: + replicas: 1 + selector: + matchLabels: + app: davis + template: + metadata: + labels: + app: davis + spec: + containers: + - name: davis + image: ghcr.io/tchapi/davis:latest + ports: + - containerPort: 8080 + env: + - name: APP_ENV + valueFrom: + secretKeyRef: + name: davis-config + key: APP_ENV + - name: DATABASE_DRIVER + valueFrom: + secretKeyRef: + name: davis-config + key: DATABASE_DRIVER + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: davis-db-app + key: uri + - name: ADMIN_LOGIN + valueFrom: + secretKeyRef: + name: davis-config + key: ADMIN_LOGIN + - name: ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: davis-config + key: ADMIN_PASSWORD + resources: + requests: + memory: "128Mi" + cpu: "10m" + limits: + memory: "256Mi" + cpu: "200m" diff --git a/clusters/homelab/apps/davis/kustomization.yaml b/clusters/homelab/apps/davis/kustomization.yaml new file mode 100644 index 0000000..a43b217 --- /dev/null +++ b/clusters/homelab/apps/davis/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - namespace.yaml + - secret.sops.yaml + - minio-secret.sops.yaml + - cnpg-cluster.yaml + - cnpg-scheduledbackup.yaml + - deployment.yaml + - service.yaml diff --git a/clusters/homelab/apps/davis/minio-secret.sops.yaml b/clusters/homelab/apps/davis/minio-secret.sops.yaml new file mode 100644 index 0000000..daa0a80 --- /dev/null +++ b/clusters/homelab/apps/davis/minio-secret.sops.yaml @@ -0,0 +1,28 @@ +apiVersion: ENC[AES256_GCM,data:bBc=,iv:2uC2W3v/ukx8ywtBXMJsZH6mVDc/EKUzuB6c2DJw2Ek=,tag:6AmF0PKY8qk9JGKdMh9rAQ==,type:str] +kind: ENC[AES256_GCM,data:Afeveqjf,iv:p71Ckk4gJsOUH/FfGo8dtm2QfsRaMDE9gPntUqs67x8=,tag:jPMuvgELtkIoeRv+ML/sJA==,type:str] +metadata: + name: ENC[AES256_GCM,data:6/qB0+8z+VOvYvfh3OLYPnpjfz4FCA==,iv:g5ObGpS79q3MB3iEyXiOuOtZe4DB8exdPpoeuTu4+ag=,tag:dv5wECCCdE7PkJPCuLm8hw==,type:str] + namespace: ENC[AES256_GCM,data:0mq47nY=,iv:RNXXj7BQVQrx+drIh3wi0X4JwFjgUyy1bC95jZdvzOg=,tag:1QibgU+vuXTMqL5wfXC2FQ==,type:str] +stringData: + ACCESS_KEY_ID: ENC[AES256_GCM,data:5Qyouwe/SYduMBYkfeDmGl6xyDc=,iv:HFGnaGbZKDfodULpQ23uicMo2tpeeNT8OR+lkgiHh78=,tag:QpOyRCWE50gl2LlNw7ljew==,type:str] + ACCESS_SECRET_KEY: ENC[AES256_GCM,data:Gkgmc9WfBxvE7qDqh1cXbJkdTSUzGSDOWWIpdiObG7Sc0OR5gBsZdA==,iv:aOt4HgtzEq3WfPd/p0IJv8xK3gZwig1NgXPgb8Iu5SE=,tag:iotGoO37jTwQM9Ggsz93JQ==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJR2RpVGJPaUpncDRRMHNJ + b012TTRGR3c3R3dqOERVSytGQWRSV3Bwd0JNCnlzYkxRaXd6WXg0bk1hUXlRMlNp + L3FJTjExaGZRVG1kaElZYlkrVVlPQ0kKLS0tIGV0TjlsWkkxcVhJK2o0cnhvbkZ1 + TW83ZVVjalpaZEVVNkU1TEhyS25lbTQK/V6y5Y6E+sEPryKXTJAA4j5Uw0kJs55E + gdVLhPxsf7VXkgMunMJdQnQoXN8uGbUQXkQhLC+r943JJMOfJqzDrg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-03-22T09:04:40Z" + mac: ENC[AES256_GCM,data:PM2SjFzjhSZ7nD8g3MjfiYw2MpyhM5JVd0Uc6yLzhx5tGe9BSv0zV6BE7nTXZ9wDDqKoEDDpMWyHfh9zrXZ8CukqJBHSl/ULyN3WNmTZ5UwpDtpVloBA5KLp+YbVemlJzWb9aAg/6vXRn+0xOIcBhOGpC7fntw+Wm70bOhdlOhs=,iv:nHC3ubPWZn20wLsaXHBh4SypGp10Ot9PxzK23UyInrc=,tag:Va2BmQxQNlrSNtjvGXoSTQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.4 diff --git a/clusters/homelab/apps/davis/namespace.yaml b/clusters/homelab/apps/davis/namespace.yaml new file mode 100644 index 0000000..438f507 --- /dev/null +++ b/clusters/homelab/apps/davis/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: davis diff --git a/clusters/homelab/apps/davis/secret.sops.yaml b/clusters/homelab/apps/davis/secret.sops.yaml new file mode 100644 index 0000000..ca8cdfe --- /dev/null +++ b/clusters/homelab/apps/davis/secret.sops.yaml @@ -0,0 +1,30 @@ +apiVersion: ENC[AES256_GCM,data:o2U=,iv:+95NyE+T6sQykvRtd96UOfjBPxMLrPzQAV2WtD/S7a4=,tag:zn2x59gAXlclp8t5q0utcQ==,type:str] +kind: ENC[AES256_GCM,data:XJT/EqB8,iv:4MBf0lKUWlrgtVmjFG6vau9NeCf1RDc4Ck41ApeW6Zc=,tag:AFLtvsP2p44CbD/K9Xiisw==,type:str] +metadata: + name: ENC[AES256_GCM,data:aoPvyszUeC7nDjsr,iv:KfOt9OMXHn1T7O4oEUUrLQ3l3Uyvaf07FzuUcnDUMC0=,tag:UQbXGHgNZMeY0/pfjQpyUQ==,type:str] + namespace: ENC[AES256_GCM,data:tcBqol0=,iv:RzzwtqUWIG8cqwjPIDwcaRcK4iAekBGSSol3T5vPltE=,tag:jYjBX0OkS9iitLP+zZ1JcA==,type:str] +stringData: + APP_ENV: ENC[AES256_GCM,data:bLA9smgzQW71lA==,iv:c4LTqfKQPSDEfxYA9nbDqTEUXf0yIOOiKDkJJKkpIs8=,tag:eczIHWoh5mXxLDTKE4ws4Q==,type:str] + DATABASE_DRIVER: ENC[AES256_GCM,data:3+6YyPOGIARDhg==,iv:RbYe2qPN1138QyVstle0DHIRAoEX6QQnuQ5y2gkAMlc=,tag:nXLLowH5fmY76leT9rN2qQ==,type:str] + ADMIN_LOGIN: ENC[AES256_GCM,data:l9QGSnk=,iv:MqpNoLkpfZzoFNLBXWXHtrmsQvHCgDu+sOZ/6RYGiJk=,tag:aMD3fFGTyqqLqGxDe6wsnA==,type:str] + ADMIN_PASSWORD: ENC[AES256_GCM,data:8l3+w0REMpA=,iv:LXCoa+fLokIHXcsi979GKA003ke1U2IeN5JDw4n7AnU=,tag:avKceDXABHW1N+2KKZ3uOg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1rydfcalt7pu4jnmh298lgjlasxyjldyaz3xyssk7v54lpu30fv0qna96ea + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3ZFYrOHczd0JhM2dsT3Rk + QktaK1o4dnVnakh6YjVWNWRyKzhSSXd5RnpNCngrZjBHR2p3REtwajVoM0M1Tmg3 + TzQ4eHBOU2REVTVLMmxEK0tzMWF3cmsKLS0tIFNUVG0vNTg0SFJDUCtRWjF2RnpP + YVFmNU5CMHZkRzlHOGZzUVBXYlZnRE0KMKh5h7nPWiBKXC0QApxIAvpvY/mMwNRC + ahN/fLtQwwtDBtepIGnC7x8Ad5vWBumL7S22oJLCHXqXxmffutKzQA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-03-22T09:05:17Z" + mac: ENC[AES256_GCM,data:p4oSaUiAYp5723/1B+XtREMWCl0TV11CVErMDP7AILXEj9OuAsUWLbeLL6jAWgDIKrJgCZisCLBpuJDWb32fGmJZrPhSEkBV3L0sfn25P9Cg77uj9iPHkRiOXgD7ySNBpI06vETenydPFK+ib93JOTbOVYEe4an3yo05LYkjX/A=,iv:o8L+sNSjszzCajroXva1DDi2TZ5J/11HlA5PAqQz/bg=,tag:rSMO9DOw/Mybi6CI73ZmHg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.4 diff --git a/clusters/homelab/apps/davis/service.yaml b/clusters/homelab/apps/davis/service.yaml new file mode 100644 index 0000000..621770e --- /dev/null +++ b/clusters/homelab/apps/davis/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: davis + namespace: davis +spec: + selector: + app: davis + ports: + - port: 8080 + targetPort: 8080