diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4fd5876..c30c727 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -54,6 +54,7 @@ updates: - "/kubernetes/personal/media/photoprism" - "/kubernetes/personal/notes/notesnook" - "/kubernetes/production/buildpath" + - "/kubernetes/production/semery-fr" - "/kubernetes/production/umami" - "/kubernetes/production/vhaudiquet-fr" - "/kubernetes/system/coredns" diff --git a/kubernetes/kustomization.yaml b/kubernetes/kustomization.yaml index 51a9d73..3575f37 100644 --- a/kubernetes/kustomization.yaml +++ b/kubernetes/kustomization.yaml @@ -38,5 +38,6 @@ resources: - utilities/open-webui # Production (public-facing websites/apps) - production/buildpath + - production/semery-fr - production/umami - production/vhaudiquet-fr diff --git a/kubernetes/production/semery-fr/kustomization.yaml b/kubernetes/production/semery-fr/kustomization.yaml new file mode 100644 index 0000000..fe87b31 --- /dev/null +++ b/kubernetes/production/semery-fr/kustomization.yaml @@ -0,0 +1,13 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: semery-fr +resources: + - namespace.yaml + - repository.yaml + - release.yaml +secretGenerator: + - name: semery-fr-values + files: + - values.yaml=values.yaml +configurations: + - kustomizeconfig.yaml diff --git a/kubernetes/production/semery-fr/kustomizeconfig.yaml b/kubernetes/production/semery-fr/kustomizeconfig.yaml new file mode 100644 index 0000000..3365acc --- /dev/null +++ b/kubernetes/production/semery-fr/kustomizeconfig.yaml @@ -0,0 +1,6 @@ +nameReference: +- kind: Secret + version: v1 + fieldSpecs: + - path: spec/valuesFrom/name + kind: HelmRelease diff --git a/kubernetes/production/semery-fr/namespace.yaml b/kubernetes/production/semery-fr/namespace.yaml new file mode 100644 index 0000000..152beac --- /dev/null +++ b/kubernetes/production/semery-fr/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: semery-fr diff --git a/kubernetes/production/semery-fr/release.yaml b/kubernetes/production/semery-fr/release.yaml new file mode 100644 index 0000000..b4d40be --- /dev/null +++ b/kubernetes/production/semery-fr/release.yaml @@ -0,0 +1,19 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: semery-fr + namespace: semery-fr +spec: + interval: 1m + chart: + spec: + sourceRef: + kind: HelmRepository + name: semery-fr + namespace: semery-fr + chart: semery-fr + version: '>=0.1.0-0' + interval: 1m + valuesFrom: + - kind: Secret + name: semery-fr-values diff --git a/kubernetes/production/semery-fr/repository.yaml b/kubernetes/production/semery-fr/repository.yaml new file mode 100644 index 0000000..f661968 --- /dev/null +++ b/kubernetes/production/semery-fr/repository.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: semery-fr + namespace: semery-fr +spec: + interval: 1m + url: https://git.vhaudiquet.fr/api/packages/semerys/helm diff --git a/kubernetes/production/semery-fr/values.yaml b/kubernetes/production/semery-fr/values.yaml new file mode 100644 index 0000000..33bf817 --- /dev/null +++ b/kubernetes/production/semery-fr/values.yaml @@ -0,0 +1,69 @@ +# Number of replicas +replicaCount: 1 +# Container image configuration +image: + repository: git.vhaudiquet.fr/semerys/semery.fr + pullPolicy: IfNotPresent + # The image tag defaults to the chart appVersion (which is set to git SHA by CI). + # Override this only if you need a specific version. + tag: "" +# Image pull secrets for private registries +# (image is anonymously pullable from Gitea, same as vhaudiquet-fr) +imagePullSecrets: [] +# Ingress configuration +ingress: + enabled: true + className: "" + annotations: {} + hosts: + - host: semery.fr + paths: + - path: / + pathType: Prefix + tls: [] +# Tolerate failover nodes +tolerations: + - key: ENC[AES256_GCM,data:/CMYAKY1KdK9,iv:b+SH9zZtCwROCmMLTa90L+3BiSbLr/keSjRnBTTTWWw=,tag:es0kLEhnri8WZxxl0hEwcQ==,type:str] + operator: Equal + value: ENC[AES256_GCM,data:cFhYWTHVVUU=,iv:7NVK68CshoAzE3SLr80R02Sh2CbH4wLGt4IAS6s2mPA=,tag:1kXlilI3sJDP+nALaS9hmw==,type:str] + effect: NoSchedule + - key: ENC[AES256_GCM,data:oZsPBWoZNGlsdMKsy9a0iVyFoEv3u+QuH7w9nH+LvxMZwcqYKw==,iv:1CXgeE2ulPBvqWuHGy7MMv7YVvylVVUFkhO1C7bWTy0=,tag:YWtEmfF7/2kq7aUPpkIEig==,type:str] + operator: Exists + effect: NoSchedule +# Prefer (non-failover nodes) in normal operation +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: ENC[AES256_GCM,data:elhdFbnzEc3Hfk2WfXMMM9PJ5ZE=,iv:W+PHxb5PeCbLr7gLrysbedDZcjkQ9j9sGnL15XWhq80=,tag:pmEtrOBVmVIDEhsY0LfwsA==,type:str] + operator: NotIn + values: + - "true" +sops: + lastmodified: "2026-08-15T14:43:02Z" + mac: ENC[AES256_GCM,data:0WpSxKZk03sP+2RKDWzkb2z56eBkkUG0fOkAafQn9rxGFTNXmo0cwS4HfM0RvUTHcpEygA2ACb8YyQW3btCucMR2DFtbJ0nnks9qRI0cLTQ12rbJbkwy6+jOz2Sb5g4oD+xx+PEWyyZHKj2J+uRzsPbFjUe6+CG1HOT/lRaerR8=,iv:nhIROduhPWMrVN8yQzU2UqGlLcY7HZMR4SBA6EqMWoM=,tag:17zGcnJjQgH+0speBHymHQ==,type:str] + pgp: + - created_at: "2026-08-15T14:43:02Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hQIMA7uy4qQr71wiAQ//WPBdlE9EkPZut4QRwpGyj4oNwnKpQhlUSJ2oKxNk1Wtx + GMs7FOm8iSpE34RUoDx1UFA8aB/0bqVy5x7Uu8TLhlW+khmcW1rMkSaIOBOqLpgX + 8sRTefkDq91dC17OFTYIjg28a+7gjlDauQpF2c8ejA4yfCJGRl2Z6P2EVtzEtGpj + wKV6wdXrDlHNv+606VrhNzn0eZ/Z0e+NaL3a80rRKmPfbLQaWiRsXxD14ZpdVJLc + Vk2dZDSrLmFx/TLHSqrwr5JLOxaNMUYywIc5gZZSQ8lWLnoxZ9zaugvp0JQ5ldb1 + qQL2a6lyH4sPDK9ZexMlsd4X7PWKQju7ABE790WoLdF/F3++5jAqWAXVoD3d6esG + 2L1dJFd/4ZhG4NcHuGPwLIowCJnJzfXh8w3jNHKFeL7JAEzTMjbrlg03PHkLUGvW + lYWYkRq6HknWr59S88bbRUm31CXCbO0nXQmt9Gy9P9ActaCLfj4kmfd9zkB9rAnS + TW0TirFDpyx/I/h5AKgtltH9cp/r8dh/yT4lWp5dvosJX2aP8ux5/bUXJGIJaU8H + bU3EZYQBRsWkV/7CqcSN63uIAP027sDF9o4QsrD7N+qCL+/ED3UVXpnQ2YkEXQlN + olTO8uQg+HBg34j89a13dXL3y3uqPow4gD6Z/17+rWA5tCKCUYLaS7MjibDoizXS + XgHiv7PzHvxrVy5EmyOx0uWO2gzXyUh1oqVMFTlBqlWc+nokHnepCevYYuIWkZh1 + ePqibvEJyt8DsAnh+4w51fDD27HuYx1hmeZ0r80tmHAkJnuc1d0LEzD4tulvEJg= + =0u4g + -----END PGP MESSAGE----- + fp: DC6910268E657FF70BA7EC289974494E76938DDC + encrypted_regex: ^(password|value|ssh-key|api-key|user|username|privateKey|clientSecret|clientId|apiKey|extraArgs.*|.*Secret.*|extraEnvVars|.*SECRET.*|.*secret.*|key|.*Password|.*\.ya?ml)$ + version: 3.10.2