diff --git a/clusters/base/apps/webdav/configmap.yaml b/clusters/base/apps/webdav/configmap.yaml new file mode 100644 index 0000000..2a3a1b5 --- /dev/null +++ b/clusters/base/apps/webdav/configmap.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: webdav-config + namespace: mcp +data: + config.yml: | + address: 0.0.0.0 + port: 6065 + + directory: /data + + permissions: R + + users: + - username: "{env}WEBDAV_USERNAME" + password: "{env}WEBDAV_PASSWORD" + permissions: CRUD diff --git a/clusters/base/apps/webdav/helmrelease.yaml b/clusters/base/apps/webdav/helmrelease.yaml new file mode 100644 index 0000000..275445b --- /dev/null +++ b/clusters/base/apps/webdav/helmrelease.yaml @@ -0,0 +1,83 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: webdav + namespace: mcp +spec: + interval: 30m + chartRef: + kind: OCIRepository + name: webdav + values: + controllers: + app: + containers: + app: + image: + repository: ghcr.io/hacdias/webdav + tag: latest + args: + - "-c" + - "/config.yml" + env: + TZ: Europe/Moscow + WEBDAV_USERNAME: + valueFrom: + secretKeyRef: + name: webdav-secrets + key: WEBDAV_USERNAME + WEBDAV_PASSWORD: + valueFrom: + secretKeyRef: + name: webdav-secrets + key: WEBDAV_PASSWORD + probes: + liveness: + enabled: true + readiness: + enabled: true + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + memory: 256Mi + + service: + app: + controller: app + ports: + http: + port: 6065 + + ingress: + app: + className: traefik + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + hosts: + - host: dav.aggtaa.com + paths: + - path: / + pathType: Prefix + service: + identifier: app + port: http + tls: + - secretName: webdav-tls + hosts: + - dav.aggtaa.com + + persistence: + config-yml: + type: configMap + name: webdav-config + subPath: config.yml + globalMounts: + - path: /config.yml + readOnly: true + data: + type: persistentVolumeClaim + existingClaim: markdown-vault-mcp-vault + globalMounts: + - path: /data diff --git a/clusters/base/apps/webdav/helmrepository.yaml b/clusters/base/apps/webdav/helmrepository.yaml new file mode 100644 index 0000000..d4b09ed --- /dev/null +++ b/clusters/base/apps/webdav/helmrepository.yaml @@ -0,0 +1,10 @@ +apiVersion: source.toolkit.fluxcd.io/v1 +kind: OCIRepository +metadata: + name: webdav + namespace: mcp +spec: + interval: 1h + url: oci://ghcr.io/bjw-s-labs/helm/app-template + ref: + tag: "5.0.1" diff --git a/clusters/base/apps/webdav/kustomization.yaml b/clusters/base/apps/webdav/kustomization.yaml new file mode 100644 index 0000000..7b0a744 --- /dev/null +++ b/clusters/base/apps/webdav/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - helmrepository.yaml + - configmap.yaml + - secret.enc.yaml + - helmrelease.yaml diff --git a/clusters/base/apps/webdav/secret.enc.yaml b/clusters/base/apps/webdav/secret.enc.yaml new file mode 100644 index 0000000..033b7b7 --- /dev/null +++ b/clusters/base/apps/webdav/secret.enc.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Secret +metadata: + name: webdav-secrets + namespace: mcp +stringData: + WEBDAV_USERNAME: ENC[AES256_GCM,data:BeN5VS8=,iv:XpUr5PG9RWTRGXs7/EzDyLGwUm05Mr0YWpW7PwzNfm8=,tag:3py47tIcTeFxuuAidk2wBg==,type:str] + WEBDAV_PASSWORD: ENC[AES256_GCM,data:Rh1ryftcmxgJAHvC/N1o5QeagCvyb3XIpDS7jOTCpJm3Wb5rUcLNmtcW22f0xljw,iv:GmgQJEuzUzSEql+fx5KURKv8CnhXF/z5UlmEn4ta+K0=,tag:AZD1CEbVRm6DiBt66pB9Vg==,type:str] +sops: + age: + - recipient: age14x4jjs2fwdgw28g2pkr6jyj2yzmwc544xwmaaglrxwz5e99seutqtr8jv5 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMSHg0S0dSTC8yNUpPUk9L + blNobStHNCt1VzRWWnJRMVFSSHRuNEdRZjJVCjhwKzdpYTRVWEF4NlE2RVRKTllX + YjFRL1RZeUxuQWdrWVZQVkZLSE5rYlUKLS0tIEN3WHV5MTJiOXFsbXpVSkJiZk1m + MDRObmNYb0dDT3NQNEZMKytrRENrTm8KbtGEFVOOhofeDtcP3+ST3qtxysuVWzTb + s/z73tRmakfXnPT9qgBTq+6YcZS+kpgAp7L5krQX9SrsPISAYczdtg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-07-27T10:52:59Z" + mac: ENC[AES256_GCM,data:NjW32RRIxywpArSP6HcyicTaTb9hFDPzfMra2mgBGcrQP4Ev9Nj9IPAY0bKv7VeB2478W4F1qWJ9ImikOgjr5/16VJ3hzuEY0KVtOyP211Gf25TGqX3q05CKPezktsfPWNr6extzgNdnjIv7UicH3rQD0VMZ27Th8KqjJY6HpD4=,iv:7D8G5SMyZD9Q6MDaSZvu1Ujvotiq9i/wMmpi9n+PQnA=,tag:Wa0BoM5owdUjmOxo9k0YnA==,type:str] + encrypted_regex: ^(data|stringData)$ + version: 3.11.0 diff --git a/clusters/home/apps/kustomization.yaml b/clusters/home/apps/kustomization.yaml index d7b1140..cc4964b 100644 --- a/clusters/home/apps/kustomization.yaml +++ b/clusters/home/apps/kustomization.yaml @@ -9,3 +9,4 @@ resources: - homeassistant.yaml - openwebui.yaml - markdown-vault-mcp.yaml + - webdav.yaml diff --git a/clusters/home/apps/webdav.yaml b/clusters/home/apps/webdav.yaml new file mode 100644 index 0000000..00400bf --- /dev/null +++ b/clusters/home/apps/webdav.yaml @@ -0,0 +1,21 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: webdav + namespace: flux-system +spec: + interval: 10m + sourceRef: + kind: GitRepository + name: flux-system + path: ./clusters/base/apps/webdav + prune: true + wait: true + dependsOn: + - name: namespaces + - name: markdown-vault-mcp + retryInterval: 5s + decryption: + provider: sops + secretRef: + name: sops-age