Docker Swarm (prod)
Déployer la plateforme en production sur Docker Swarm derrière Traefik.
En production, la plateforme se déploie en Docker Swarm à partir d'images
pré-construites (ghcr.io/hoppr-tech), derrière Traefik (et non Caddy). Le manifeste
est platform/docker-stack.yml.
Déployer
docker stack deploy -c docker-stack.yml graceLes variables ${...} sont substituées depuis l'environnement du shell (voir DEPLOY-SWARM.md).
Conventions de la stack
- Images pré-construites depuis
ghcr.io(aucun build dans la stack). - Ingress Traefik via
deploy.labelssur le réseau externetraefik-network. - Secrets Docker externes : mots de passe Postgres, token de signature.
- Configs Docker pour l'init Postgres +
postgresql.conf. - Durcissement
no-new-privileges, user applicatif least-privilege (grace_app), réseauinternalisolé. - Placement épinglé sur les nœuds
node.labels.workload == apps.
Services & routes Traefik
| Service | Image | Hôte / route |
|---|---|---|
backend | grace-backend | grace.hoppr.tech + PathPrefix(/api) (stripprefix) → port 3000 |
mcp | grace-mcp | grace-mcp.hoppr.tech → port 3001 |
frontend | grace-frontend | grace.hoppr.tech → port 80 |
postgres | postgres:18-alpine | interne (réseau internal) |
Le catalogue est embarqué dans l'image backend (GRACE_CATALOG=/catalog, aucun
bind-mount) → compatible Portainer/Git. Le modèle d'embeddings est caché sur le volume
models (TRANSFORMERS_CACHE=/models) quand GRACE_RELEVANCE est actif.
Garde d'accès
Les surfaces qui doivent être restreintes à une identité Google passent par le middleware
Traefik partagé google-auth. Le site de documentation est public pour l'instant ;
voir CI & images pour le réactiver.