about summary refs log tree commit diff
path: root/bundles/cal
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/cal')
-rw-r--r--bundles/cal/files/kube.yaml115
-rw-r--r--bundles/cal/files/radicale.conf7
-rw-r--r--bundles/cal/files/secret.yaml9
-rw-r--r--bundles/cal/items.py20
-rw-r--r--bundles/cal/metadata.py11
5 files changed, 162 insertions, 0 deletions
diff --git a/bundles/cal/files/kube.yaml b/bundles/cal/files/kube.yaml
new file mode 100644
index 0000000..eece518
--- /dev/null
+++ b/bundles/cal/files/kube.yaml
@@ -0,0 +1,115 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: cal
+data:
+  NEXTAUTH_URL: https://cal.gzr.im/web/
+  NEXT_PUBLIC_APP_URL: https://cal.gzr.im/web/
+  NEXT_PUBLIC_SITE_URL: https://cal.gzr.im/web/
+  NEXT_PUBLIC_ENABLE_SAAS_FEATURES: false
+---
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cal
+  labels:
+    traefik.enable: true
+    # radicale
+    traefik.http.routers.radicale.tls: true
+    traefik.http.routers.radicale.tls.certresolver: le
+    traefik.http.routers.radicale.entrypoints: http,https
+    traefik.http.routers.radicale.rule: Host(`cal.gzr.im`) && PathPrefix(`/dav`)
+    traefik.http.middlewares.radicale-headers.headers.customrequestheaders.X-Script-Name: /dav
+    traefik.http.middlewares.radicale-stripprefix.stripprefix.prefixes: /dav
+    traefik.http.routers.radicale.middlewares: radicale-stripprefix@docker
+    traefik.http.routers.radicale.service: radicale
+    traefik.http.services.radicale.loadbalancer.server.port: 5232
+    # fluidcal
+    traefik.http.routers.fluidcal.tls: true
+    traefik.http.routers.fluidcal.tls.certresolver: le
+    traefik.http.routers.fluidcal.entrypoints: http,https
+    traefik.http.routers.fluidcal.rule: Host(`cal.gzr.im`) && PathPrefix(`/`)
+    traefik.http.routers.fluidcal.service: fluidcal
+    traefik.http.services.fluidcal.loadbalancer.server.port: 3000
+    # well-known
+    traefik.http.middlewares.wellknowncarddav-redirect.redirectregex.regex: ^https://cal.gzr.im/.well-known/carddav
+    traefik.http.middlewares.wellknowncarddav-redirect.redirectregex.replacement: https://cal.gzr.im/dav/
+    traefik.http.middlewares.wellknowncaldav-redirect.redirectregex.regex: ^https://cal.gzr.im/.well-known/caldav
+    traefik.http.middlewares.wellknowncaldav-redirect.redirectregex.replacement: https://cal.gzr.im/dav/
+    traefik.http.routers.fluidcal.middlewares: wellknowncarddav-redirect,wellknowncaldav-redirect
+spec:
+  restartPolicy: Never
+  dnsPolicy: Default
+  containers:
+    - name: radicale
+      image: index.docker.io/grepular/radicale:3.5
+      volumeMounts:
+        - name: radicale-config
+          mountPath: /etc/radicale
+          readOnly: true
+        - name: radicale-data
+          mountPath: /var/lib/radicale
+      ports:
+        - containerPort: 5232
+          protocol: TCP
+      # livenessProbe:
+      #   httpGet:
+      #     path: /
+      #     port: 5232
+      resources:
+        requests:
+          cpu: 10m
+          memory: 25Mi
+        limits:
+          cpu: 100m
+          memory: 128Mi
+
+    # - name: fluidcal
+    #   image: index.docker.io/eibrahim/fluid-calendar:1.4
+    #   ports:
+    #     - containerPort: 3000
+    #       protocol: TCP
+    #   envFrom:
+    #   - configMapRef:
+    #       name: cal
+    #   - secretRef:
+    #       name: cal
+    #   livenessProbe:
+    #     httpGet:
+    #       path: /
+    #       port: 3000
+    #   # resources:
+    #   #   limits:
+    #   #     cpu: 100m
+    #   #     memory: 128Mi
+    #
+    # - name: postgres
+    #   image: docker.io/library/postgres:15-alpine
+    #   volumeMounts:
+    #   - name: pg-data
+    #     mountPath: /var/lib/postgresql/data
+    #   envFrom:
+    #   - secretRef:
+    #       name: cal
+    #   livenessProbe:
+    #     exec:
+    #       command: ["pg_isready", "-U", "cal"]
+    #     initialDelaySeconds: 5
+    #   # resources:
+    #   #   limits:
+    #   #     cpu: 100m
+    #   #     memory: 128Mi
+
+  volumes:
+  - name: radicale-config
+    hostPath:
+      path: /etc/radicale
+      type: DirectoryOrCreate
+  - name: radicale-data
+    hostPath:
+      path: /var/lib/radicale
+      type: DirectoryOrCreate
+  - name: pg-data
+    hostPath:
+      path: /var/lib/fluidcal
+      type: DirectoryOrCreate
diff --git a/bundles/cal/files/radicale.conf b/bundles/cal/files/radicale.conf
new file mode 100644
index 0000000..e5933ee
--- /dev/null
+++ b/bundles/cal/files/radicale.conf
@@ -0,0 +1,7 @@
+[server]
+# Bind all addresses
+hosts = 0.0.0.0:5232, [::]:5232
+script_name = /dav
+
+[auth]
+type = none
diff --git a/bundles/cal/files/secret.yaml b/bundles/cal/files/secret.yaml
new file mode 100644
index 0000000..ddf91fe
--- /dev/null
+++ b/bundles/cal/files/secret.yaml
@@ -0,0 +1,9 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: cal
+data:
+  NEXTAUTH_SECRET: ${repo.vault.password_for("cal_fluidcalendar_secret").b64encode().value}
+  POSTGRES_USER:  ${repo.libs.util.base64("cal")}
+  POSTGRES_PASSWORD: ${repo.vault.password_for("cal_db_pw").b64encode().value}
+  DATABASE_URL: ${repo.libs.util.base64(f"postgresql://cal:{repo.vault.password_for("cal_db_pw")}@localhost/fluid_calendar")}
diff --git a/bundles/cal/items.py b/bundles/cal/items.py
new file mode 100644
index 0000000..5836213
--- /dev/null
+++ b/bundles/cal/items.py
@@ -0,0 +1,20 @@
+directories = {
+    "/var/lib/radicale/collections": {
+        "owner": "1000",
+        "group": "1000",
+    },
+}
+files = {
+    "/etc/deployments/cal/kube.yaml": {
+        "triggers": {"svc_s6rc:cal:restart"},
+    },
+    "/etc/deployments/cal/secret.yaml": {
+        "content_type": "mako",
+        "mode": "0600",
+        "triggers": {"svc_s6rc:cal:restart"},
+    },
+    "/etc/radicale/config": {
+        "source": "radicale.conf",
+        "triggers": {"svc_s6rc:cal:restart"},
+    },
+}
diff --git a/bundles/cal/metadata.py b/bundles/cal/metadata.py
new file mode 100644
index 0000000..7021b95
--- /dev/null
+++ b/bundles/cal/metadata.py
@@ -0,0 +1,11 @@
+defaults = {
+    "backup": {
+        "includes": {
+            "/var/lib/radicale",
+            # "/var/lib/fluidcal",
+        }
+    },
+    "containers": {
+        "cal": {},
+    },
+}