# 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.yaml` — `pg_dump` quotidien vers un bucket S3-compatible via `rclone`. ## Ordre d'application initial ```bash 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é.