mirror of
https://github.com/vhaudiquet/homeprod.git
synced 2026-10-15 19:56:15 +00:00
Flux HelmRelease of the saggar hub (chart saggar-hub >=0.2.0-0, CI-published on the gitea saggar org, appVersion pinned to the image commit) with the web UI. Engine on api.saggar.dev for the CLI and the docker/apt registries, UI on saggar.dev — new cert, caddy route and dns A record for the api host, TLS terminating at Caddy as usual. Login via the home Gitea as an OIDC provider; private registry and helm repo auth share one packages token.
165 lines
7.7 KiB
YAML
165 lines
7.7 KiB
YAML
# Caddy Edge Proxy
|
|
replicaCount: 2
|
|
# Listen on standard HTTP port
|
|
listenPort: 80
|
|
# Enable HTTPS
|
|
https:
|
|
enabled: true
|
|
port: 443
|
|
image:
|
|
repository: caddy
|
|
pullPolicy: IfNotPresent
|
|
tagSuffix: ""
|
|
tag: 2.11.4
|
|
service:
|
|
type: LoadBalancer
|
|
# Cluster (not Local) so any node can forward to pods on any other node.
|
|
externalTrafficPolicy: Cluster
|
|
# Disable ingress - Caddy IS the edge proxy
|
|
ingress:
|
|
enabled: false
|
|
resources:
|
|
requests:
|
|
cpu: 100m
|
|
memory: 128Mi
|
|
limits:
|
|
cpu: 500m
|
|
memory: 256Mi
|
|
# Caddy needs root to bind to ports 80/443 and write runtime data
|
|
# Using restrictive security context causes "operation not permitted"
|
|
podSecurityContext: {}
|
|
securityContext: {}
|
|
health:
|
|
path: /
|
|
port: 9999
|
|
# Extra volumes: TLS certificates from cert-manager + external routes ConfigMap
|
|
volumes:
|
|
- name: vhaudiquet-fr-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:SpOriUboZlbUXYJmQGnNOPk=,iv:QrqYhqd84W2qpSxqDRV4IkBS+8VjQI/IV+3EjreakL0=,tag:aZe2IOK2rZrE8vUH1XvhHg==,type:str]
|
|
optional: ENC[AES256_GCM,data:HDGdlQ==,iv:Iu/fSqxv5uWPGesWB9JE8LI6PaI3zeTkCC7AKbIEFGA=,tag:jIsbpSdjsFIj6LzYPzVxow==,type:bool]
|
|
- name: wildcard-vhaudiquet-fr-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:OOpMJ2GZWXpH9GSPlGxPRkHLO+uIyANsdEw=,iv:ceeKNMsu3vNthfVRvF9dx+07QeweHU5ljyskpFMSwb0=,tag:i3b7ppoW2ALoY/bp28Q44g==,type:str]
|
|
optional: ENC[AES256_GCM,data:XaMKEw==,iv:pq//askiMe+iqmkCB/LYd0Jme8pEpU6EYHvYRkoE0z0=,tag:Gk9LvLUPDkAXIOIPp026uA==,type:bool]
|
|
# semery.fr certs from cert-manager (OVH DNS-01)
|
|
- name: semery-fr-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:Qrw/Klx4eH7P2Dm7eQ==,iv:QviJIz+HklUwywWbwAdYL5sLEiHw/cX03sumVsi02d0=,tag:gDoVFTF8rAX+H2gLImRgLg==,type:str]
|
|
optional: ENC[AES256_GCM,data:lE0q7w==,iv:CdivcpbYUN9vhCeZx5LowREOzdD+eXDjGiyO1bWupQE=,tag:/pd7XLRJtFVKPxtxVEPB0g==,type:bool]
|
|
- name: wildcard-semery-fr-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:b1C11W0r1MCOg7D5L7mVK73X02J4jA==,iv:5pJknW4W3owYzo5ScMJL0FR9phdKEYf9lLNm1tOxAAw=,tag:A+dUs8Fr1tRkODuRZ104sg==,type:str]
|
|
optional: ENC[AES256_GCM,data:gUa/9Q==,iv:WfLWFM/54xeAb0OlV89BP7oQ9bwO3Nc4FLaqGYOe8Ms=,tag:6SjdQdTHwEH6hZkEExbJ7Q==,type:bool]
|
|
- name: buildpath-win-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:4yTNA5uUqJSpR7OZNTwAMiI=,iv:lEsnUetc5jJPsK7ElPLwpEUpL4/2jgRE7qe2HcrZ30Y=,tag:OPoXY3oNFzKfXztY8NoUtQ==,type:str]
|
|
optional: ENC[AES256_GCM,data:ZTDwVw==,iv:/FoV+Q/zJF2yV7Yi3WVR7BiGtzHGA6Hp0vfe5vyiZnA=,tag:Ot6IkJqyyrSxql9C8riHAA==,type:bool]
|
|
# saggar.dev cert from cert-manager (Porkbun DNS-01)
|
|
- name: saggar-dev-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:DwW0dJwcrOnikkkjchk=,iv:FN3RN4DKafzbU4UgyQmBLUxxQ4qtUnCX3wrl1MFAaoc=,tag:Imk5YlfwRSvVSBJQYjKqjQ==,type:str]
|
|
optional: ENC[AES256_GCM,data:tGW91Q==,iv:IZ+zz8YZVg0W7aUSyPDbC6fsRHbAPdUQ7ZtI1hrpf10=,tag:lPjurgxAojAiad7zkX/KUg==,type:bool]
|
|
- name: api-saggar-dev-tls
|
|
secret:
|
|
secretName: ENC[AES256_GCM,data:Ezt7Hql26w4qxjhBYnjLX7eo,iv:scYe4oHntsROQIRP8uv6ia0AJ1PCR9eDX4Wm6e0X2Bw=,tag:ysTY4RliaRx590P4ffNqjQ==,type:str]
|
|
optional: ENC[AES256_GCM,data:mdt9xw==,iv:QEVjHZU76rPJVXUacHjdrxnHQo/8cdKv4aZugvKagNQ=,tag:p1uQl03c8s37C45AyfexqA==,type:bool]
|
|
- name: routes
|
|
configMap:
|
|
name: caddy-routes
|
|
# Extra volume mounts - each secret mounted as a directory with tls.crt/tls.key
|
|
volumeMounts:
|
|
- name: vhaudiquet-fr-tls
|
|
mountPath: /etc/caddy/certs/vhaudiquet-fr
|
|
readOnly: true
|
|
- name: wildcard-vhaudiquet-fr-tls
|
|
mountPath: /etc/caddy/certs/wildcard-vhaudiquet-fr
|
|
readOnly: true
|
|
- name: semery-fr-tls
|
|
mountPath: /etc/caddy/certs/semery-fr
|
|
readOnly: true
|
|
- name: wildcard-semery-fr-tls
|
|
mountPath: /etc/caddy/certs/wildcard-semery-fr
|
|
readOnly: true
|
|
- name: buildpath-win-tls
|
|
mountPath: /etc/caddy/certs/buildpath-win
|
|
readOnly: true
|
|
- name: saggar-dev-tls
|
|
mountPath: /etc/caddy/certs/saggar-dev
|
|
readOnly: true
|
|
- name: api-saggar-dev-tls
|
|
mountPath: /etc/caddy/certs/api-saggar-dev
|
|
readOnly: true
|
|
- name: routes
|
|
mountPath: /etc/caddy/routes
|
|
readOnly: true
|
|
# Caddy configuration
|
|
config:
|
|
debug: false
|
|
# Global options (goes inside the global {} block)
|
|
global: |
|
|
auto_https off
|
|
# The main Caddyfile content - imports routes from external ConfigMap
|
|
# This keeps routes in a separate, easily editable file
|
|
caddyFile: |
|
|
:80 {
|
|
redir https://{host}{uri} permanent
|
|
}
|
|
|
|
import /etc/caddy/routes/Caddyfile
|
|
affinity:
|
|
# Prefer non-failover nodes in normal operation
|
|
nodeAffinity:
|
|
preferredDuringSchedulingIgnoredDuringExecution:
|
|
- weight: 100
|
|
preference:
|
|
matchExpressions:
|
|
- key: ENC[AES256_GCM,data:KNq9PvmPwNMneNpmmNW/ysyP3X4=,iv:gNa5O/D0ubMw0X4ru7orn36j2RrQ7iQEn77AzXonknk=,tag:9xC0JIqzIanslqpTbSLgfw==,type:str]
|
|
operator: NotIn
|
|
values:
|
|
- "true"
|
|
podAntiAffinity:
|
|
preferredDuringSchedulingIgnoredDuringExecution:
|
|
- weight: 100
|
|
podAffinityTerm:
|
|
labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: caddy
|
|
topologyKey: kubernetes.io/hostname
|
|
tolerations:
|
|
# Tolerate the failover taint so caddy CAN schedule on p330 (small-node-1).
|
|
- key: ENC[AES256_GCM,data:CfmLliVoJpWg,iv:hXn2virDViCTsig3KTpG92bIiR67J8Q1znv7EGddAPM=,tag:cmX5RIuQ52MLwsVD3fchfw==,type:str]
|
|
operator: Equal
|
|
value: ENC[AES256_GCM,data:kHylg1crZpY=,iv:BAFhKQr6MmqgwQ5sCkPjBc3E1zQwF0muukclRRctQIo=,tag:5MOgTEPhPJCYQl/fn/g9lQ==,type:str]
|
|
effect: NoSchedule
|
|
- key: ENC[AES256_GCM,data:R7iJZh/6vOXnZfJ9UFSX8fc780oWv2Lkk2APf0LFBmyYMY6JOw==,iv:6DaA3d3BQMMOUh+N5+ptOgAwwg2QZen59J2nOyyswts=,tag:WWMsIea8vT+w4nuPHA2HGw==,type:str]
|
|
operator: Exists
|
|
effect: NoSchedule
|
|
sops:
|
|
lastmodified: "2026-09-30T20:30:47Z"
|
|
mac: ENC[AES256_GCM,data:ATt+bgh+jbmu4qSP7ymZjhXBv64tKxvKXArf/CsNms95uo+5qcPnShZfH86V1FjHelIHXKxhdMaaaPlUnzzYSQmejhJKlC9t83eav0Ue1v1/vD9W07B2wI3driwfFOPKYv67wvSydBcQmOUuYp1VDuvsvfllgEgzmzJsNx+q2mI=,iv:prVWlmCM32Nu2qY3BeegEFo9IAhy2I5BU6lY9D0t84M=,tag:IsEkero8o9D1U5E2e+bdDA==,type:str]
|
|
pgp:
|
|
- created_at: "2026-09-30T20:30:47Z"
|
|
enc: |-
|
|
-----BEGIN PGP MESSAGE-----
|
|
|
|
hQIMA7uy4qQr71wiAQ/+K1pDoq5wQ34ZdW1mh1R7ltdyvV01Y3+f9Rw7jC50LhQf
|
|
3XyJnjsWIi5/BzcmEMkunIEvFvZdDgq/6md+rNces0Efheei5AvnNxhgi/OThx33
|
|
Gwuhs6jqDUzDnKEMth0kpj0dAKVxJ0NtJRiu5VF+l4zQWQmjGCAy69yHdTcF6HqB
|
|
fSicOeTmZ0O1JrlT9BF/gnwDtfAX7WwXehTvF2v03oS/KhIeNCryVzMXJ9Sda0Yv
|
|
W3V+Ds6JhDCuV7/zCY4h7PYvicibb7fDUI8Qm1pe/Bu4A/m40gjdTGUdudGVE5UB
|
|
aQGF3xusdxouv80FLfNLVjjNr+fVrAjG2L4HNqHNiUbd36KlOo7Lssicu8yKi9BL
|
|
CctICAnrSoZzX1cv7BhTb+ww0sOKazR/sDLgdNx+4w4U51BH1gwyZTt1fZTtk5gM
|
|
12meU0t2CZguy8GIBqe54SPYgHWBhR61HhZX/6M5rO4+LQL41K77Sp4ApWtfZvLZ
|
|
sbaVA3vwUKCl+YLBwog3T5OSj7cJisiCkHj4vQtZad7MafRr2pAYXdSInjvGsPtf
|
|
BTTYMzAcy4m1ctSi+LdNFr5vRn2M8d1GHaeAIEaKyFMaCuJDGOjx5pBmZzGLEEHt
|
|
08HeZjxmkPvYFWlHypvDcj+kbleXS0eWQ2muKSavk7fmFYN1UQhBdFYln81WJkHS
|
|
XgFnwZo7Rb9lQRc5ACIR/6x30kiXDcB5AB7EeHIJsGEbD7aE5DpvMh4T2mS7uObk
|
|
Ow+SMwe4Ny5D81neGMcBgJdHLRnIqtif4Lb4nYntrhLw0l7Dr6hkvCKGWWE83fE=
|
|
=r3HN
|
|
-----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|.*PASS|.*SOCIALACCOUNT_PROVIDERS|.*\.ya?ml)$
|
|
mac_only_encrypted: true
|
|
version: 3.10.2
|