feat: add davis caldav

This commit is contained in:
2026-03-22 10:11:51 +01:00
parent 0f4f587d7f
commit 31a652fbee
9 changed files with 188 additions and 0 deletions
+16
View File
@@ -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
@@ -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
@@ -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
@@ -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"
@@ -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
@@ -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
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: davis
@@ -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
+11
View File
@@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: davis
namespace: davis
spec:
selector:
app: davis
ports:
- port: 8080
targetPort: 8080