Mise à jour vers 0.8.5 ; ajout de la bascule entre le canal bêta et le canal stable
Some checks failed
E2E Tests / e2e (push) Failing after 21s
Build & Push Images / build (brain) (push) Successful in 1m0s
Build & Push Images / build (core) (push) Successful in 1m34s
Build & Push Images / build-switcher (push) Successful in 39s
Build & Push Images / build (web) (push) Successful in 1m40s

This commit is contained in:
2026-05-19 18:05:17 +02:00
parent f71bf3fcad
commit 759e47fc1f
17 changed files with 875 additions and 19 deletions

View File

@@ -102,11 +102,18 @@ services:
LICENSING_RELAY_BASE_URL: ${LICENSING_RELAY_BASE_URL:-https://loremind-auth.igmlcreation.fr}
# Chemin du docker config.json partage avec Watchtower
LICENSING_DOCKER_CONFIG_PATH: /shared/docker/config.json
# Chemin du repertoire partage avec le switcher (commande + resultat).
# Doit matcher le volume `switcher-data` monte ci-dessous.
SWITCHER_DATA_PATH: /shared/switcher
volumes:
# Volume partage avec Watchtower : Core ecrit les credentials registry
# GHCR (recus du relais) ici, Watchtower les utilise pour pull les images
# privees du canal beta. Pas de creds = no-op.
- docker-config:/shared/docker
# Volume partage avec le switcher : Core ecrit une commande de switch
# de canal ici (command.json), le switcher la traite et y depose son
# resultat (result.json). Cf. service `switcher` ci-dessous.
- switcher-data:/shared/switcher
restart: unless-stopped
# Ollama embarque (option par defaut pour les utilisateurs sans Ollama installe).
@@ -167,6 +174,44 @@ services:
- "${WEB_PORT:-8081}:80"
restart: unless-stopped
# Sidecar de bascule de canal (stable <-> beta).
#
# Pourquoi : la bascule entre canaux change le PREFIXE d'image (loremind- vs
# loremind-beta-), donc Watchtower seul ne peut pas la faire — il met a jour
# des images, pas leur reference. Ce sidecar fait le `sed .env` + le
# `docker compose pull/up -d` quand le Core depose une commande JSON.
#
# Securite : pas de port expose. La commande arrive via volume partage
# (`switcher-data`) que SEUL le Core ecrit. Le switcher valide strictement
# le contenu (channel ∈ {stable, beta}, rien d'autre) — pas de RCE via
# compromission du Core.
#
# L'image switcher est volontairement HORS de IMAGE_NAMESPACE : elle reste
# `igmlcreation/loremind-switcher` sur les deux canaux. Sinon le switcher
# se tuerait lui-meme pendant le `docker compose up -d` (race condition).
switcher:
image: ghcr.io/igmlcreation/loremind-switcher:${SWITCHER_TAG:-latest}
container_name: loremind-switcher
# PAS de label watchtower : la maj du switcher se fait via le canal
# stable uniquement, et hors du flow d'auto-update.
volumes:
# Socket Docker du host : permet de lancer docker compose pull/up.
- /var/run/docker.sock:/var/run/docker.sock
# Repertoire compose du host (docker-compose.yml + .env) — RW pour
# pouvoir sed la ligne IMAGE_NAMESPACE.
- ${COMPOSE_PROJECT_DIR:-./}:/compose
# Volume partage avec le Core pour la commande + le resultat.
- switcher-data:/data
environment:
# Repertoire interne ou trouver docker-compose.yml et .env. Bind au
# volume ci-dessus (COMPOSE_PROJECT_DIR = repertoire d'install du host).
COMPOSE_DIR: /compose
# Nom de projet docker compose : fixe ici pour que le switcher cible
# le MEME stack que celui qui tourne (sinon il creerait un duplicate).
# Doit matcher le `name:` (en V2.x) ou le nom du dossier du host.
COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME:-loremind}
restart: unless-stopped
# Mises a jour automatiques des images core/brain/web.
# Active uniquement si COMPOSE_PROFILES=autoupdate (gere par l'installeur).
# Postgres et MinIO sont volontairement exclus (donnees persistantes,
@@ -214,3 +259,5 @@ volumes:
# Volume partage Core <-> Watchtower : config.json Docker pour
# l'authentification au registry prive GHCR (canal beta Patreon).
docker-config:
# Volume partage Core <-> Switcher : commande de bascule de canal + resultat.
switcher-data: