Déploiement Docker Swarm
Docker Swarm est la plateforme de production actuelle. Le hub déploie chaque workspace comme une stack remizo-<slug> à partir
de sa description WorkspaceSpec.
Une description, plusieurs pilotes
Section intitulée « Une description, plusieurs pilotes »Chaque workspace a une description unique (workspaces.spec) :
{ "driver": "swarm", "slot": 3, "engines": { "replicas": 3, "cpu": "1.0", "memory": "512Mi" }, "postgres": { "instances": 2, "storage": "20Gi", "version": "17", "ha": "patroni" }, "valkey": { "enabled": true, "memory": "256Mi" }, "network": { "publicHost": "acme.engine.remizo.dev" }}Le pilote swarm la rend en fichier de stack (modèles dans deploy/swarm/) puis exécute docker stack deploy remizo-<slug>.
Les mêmes images et les mêmes écrans d’administration servent pour les pilotes compose et k8s.
Préparer le swarm
Section intitulée « Préparer le swarm »- Initialiser le manager :
docker swarm init --advertise-addr <ip>; joindre les autres nœuds avec le jeton affiché. - Poser des labels de placement :
docker node update --label-add remizo.role=db --label-add remizo.zone=a <nœud>. Les services PostgreSQL sont contraints par ces labels pour que primaire et réplica soient sur des machines différentes. - Déclarer les serveurs dans la console (Serveurs → Ajouter), avec leurs identifiants stockés dans OpenBao (
mo/servers/<id>). - Déployer la pile hub (
deploy/swarm/hub.stack.yml).
Composition d’un workspace
Section intitulée « Composition d’un workspace »| Service | Réplicas | Remarques |
|---|---|---|
engine |
n (3 en production) | stateless, derrière Traefik (<slug>.engine.<domaine>), arrêt précédé d’un drainage |
pg (Spilo/Patroni) |
2 ou 3 | un primaire, des réplicas, bascule automatique |
etcd |
1 ou 3 | consensus Patroni |
pgha (HAProxy) |
1 ou 2 | pg-rw (5000) vers le primaire, pg-ro (5001) vers les réplicas |
valkey |
1 | cache, verrous, limites ; perte tolérée |
Opérations depuis la console
Section intitulée « Opérations depuis la console »- Redémarrer une base ou un moteur ;
- Basculer (switchover Patroni) le primaire ;
- Ajouter / retirer un réplica ;
- Scaler les moteurs ; recharger leurs offres ;
- Déplacer un composant sur un autre serveur (placements).
Chaque action est une opération asynchrone suivie dans la console (état, journal). Le hub ne stoppe jamais un moteur sans
POST /mgmt/v1/drain préalable : la sonde /readyz passe à 503, Traefik retire l’instance, l’arrêt intervient après 10 s.
Validation
Section intitulée « Validation »Les modèles de stack sont validés en intégration continue (docker stack config). Le pilote est testé sur son rendu (mode plan).