2026-04-16 16:23:01 +02:00
..
2026-04-16 16:23:01 +02:00
2026-04-16 16:23:01 +02:00
2026-04-15 16:41:19 +02:00
2026-04-16 16:23:01 +02:00
2026-04-16 16:23:01 +02:00

deploy/k8s

Manifests Kubernetes pour le k3s perso d'Arthur.

Stack

  • postgres.yaml — StatefulSet Postgres 16 + PVC 5 Gi (single-user, faible volume).
  • api.deployment.yaml / pwa.deployment.yaml — services applicatifs.
  • ingress.yaml — routage Traefik TLS vers os.arthurbarre.fr et api.os.arthurbarre.fr.
  • migrate.job.yaml — job one-shot drizzle-orm pour appliquer les migrations.
  • backup.cronjob.yamlpg_dump quotidien vers un bucket S3-compatible via rclone.

Ordre d'application initial

kubectl apply -f namespace.yaml
# Copier secrets.template.yaml -> secrets.yaml, remplir, puis :
kubectl apply -f secrets.yaml
kubectl apply -f postgres.yaml
# Attendre que le pod postgres soit Ready.
kubectl apply -f migrate.job.yaml        # crée le schéma ordinarthur_os + tables
kubectl apply -f api.deployment.yaml
kubectl apply -f pwa.deployment.yaml
kubectl apply -f ingress.yaml
# Une fois le bucket S3 choisi :
kubectl apply -f backup.cronjob.yaml

Points à confirmer avec Arthur avant déploiement réel

  • Cluster issuer cert-manager (letsencrypt-prod ?)
  • Entrée Traefik (websecure ?)
  • DNS : os.arthurbarre.fr et api.os.arthurbarre.fr doivent pointer sur l'IP du load-balancer k3s
  • StorageClass du PVC postgres (k3s fournit local-path par défaut — OK pour single-node)
  • Bucket S3-compatible pour les backups (B2 / Scaleway / autre)
  • Image registry : Gitea CR (défaut) — credentials pull peuvent nécessiter un imagePullSecrets
  • Image pour le migrate.job : soit re-utiliser l'image API et node ./node_modules/.../migrate.ts via tsx, soit builder une image dédiée ordinarthur-os-migrate qui embarque packages/db compilé.