rubis/k3s/app/redis.yml
ordinarthur 461ab9bcd9
Some checks failed
Build & Deploy Landing / build-and-deploy (push) Successful in 31s
Build & Deploy App / build-and-deploy (push) Failing after 46s
feat(deploy): app.rubis.arthurbarre.fr — image, manifests K3s, route Traefik
Premier déploiement de l'app SaaS (apps/api + apps/web) — distinct de la
landing déjà sur rubis.arthurbarre.fr. Architecture :
- Image unique (Dockerfile.app, multi-stage) : AdonisJS sert l'API ET le
  SPA static via @adonisjs/static + wildcard fallback pour TanStack Router
- Workers BullMQ tournent dans le même process Node (cf. start/queue.ts)
- Redis 7 dans le namespace rubis (PVC local-path 1Gi)
- Migrations en init-container avant le serveur (idempotent)

Infra :
- K3s namespace rubis (déjà existant) — ajout deploy/svc rubis-app + redis
- NodePort 30110 → Traefik → app.rubis.arthurbarre.fr (TLS Let's Encrypt)
- Postgres : base rubis_prod + user rubis créés sur 10.10.10.3
- MinIO : bucket rubis-prod-invoices créé via mc
- Secrets K3s posés via kubectl create secret (APP_KEY généré, DB pwd
  généré, MinIO root creds réutilisées, Resend/Mistral keys)
- DNS OVH A record app.rubis créé (id 5413305619)
- CI Gitea : .gitea/workflows/deploy-app.yml séparé du workflow landing,
  filtres sur paths apps/**, packages/**, Dockerfile.app, k3s/app/**

Code app :
- Static middleware @adonisjs/static configuré
- Wildcard route SPA fallback en fin de routes.ts
- Fix erreurs strict TS qui bloquaient le build vite (unused vars,
  Client missing contactFirstName/LastName dans MSW)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 02:01:39 +02:00

85 lines
1.9 KiB
YAML

# Redis 7 — backend de BullMQ (queues `relances`, `checkins`) et du cache.
# Single replica, suffisant V1. Persistance via local-path PVC pour ne pas
# perdre les jobs schedulés en cas de redémarrage du pod.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rubis-redis-data
namespace: rubis
spec:
accessModes: [ReadWriteOnce]
storageClassName: local-path
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rubis-redis
namespace: rubis
spec:
replicas: 1
strategy:
type: Recreate # PVC RWO → pas de rollout simultané
selector:
matchLabels:
app: rubis-redis
template:
metadata:
labels:
app: rubis-redis
spec:
containers:
- name: redis
image: redis:7.4-alpine
args:
- redis-server
- --appendonly
- 'yes'
- --maxmemory
- 256mb
- --maxmemory-policy
- allkeys-lru
ports:
- containerPort: 6379
name: redis
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 500m
memory: 384Mi
volumeMounts:
- name: data
mountPath: /data
livenessProbe:
tcpSocket: { port: redis }
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
exec:
command: [redis-cli, ping]
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: data
persistentVolumeClaim:
claimName: rubis-redis-data
---
apiVersion: v1
kind: Service
metadata:
name: rubis-redis
namespace: rubis
spec:
type: ClusterIP
selector:
app: rubis-redis
ports:
- port: 6379
targetPort: redis
name: redis