fix: déclarer un routeur Traefik par portail
All checks were successful
Validation applicative / Tests de contrat (push) Successful in 15s

This commit is contained in:
manus-admin
2026-10-24 09:20:15 +00:00
parent fbc2756f87
commit 2963f82a3e
2 changed files with 35 additions and 3 deletions

View File

@@ -9,10 +9,27 @@ services:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.portail-recette.rule=Host(`portail.recette.santinova-soft.org`,`portail-itinova.recette.santinova-soft.org`,`portail-soins-et-sante.recette.santinova-soft.org`,`portail-santinova.recette.santinova-soft.org`,`portail-santelis.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-recette.entrypoints=websecure"
- "traefik.http.routers.portail-recette.tls.certresolver=letsencrypt"
- "traefik.http.services.portail-recette.loadbalancer.server.port=3000"
- "traefik.http.routers.portail-legacy-recette.rule=Host(`portail.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-legacy-recette.entrypoints=websecure"
- "traefik.http.routers.portail-legacy-recette.tls=true"
- "traefik.http.routers.portail-legacy-recette.tls.certresolver=letsencrypt"
- "traefik.http.routers.portail-itinova-recette.rule=Host(`portail-itinova.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-itinova-recette.entrypoints=websecure"
- "traefik.http.routers.portail-itinova-recette.tls=true"
- "traefik.http.routers.portail-itinova-recette.tls.certresolver=letsencrypt"
- "traefik.http.routers.portail-soins-recette.rule=Host(`portail-soins-et-sante.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-soins-recette.entrypoints=websecure"
- "traefik.http.routers.portail-soins-recette.tls=true"
- "traefik.http.routers.portail-soins-recette.tls.certresolver=letsencrypt"
- "traefik.http.routers.portail-santinova-recette.rule=Host(`portail-santinova.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-santinova-recette.entrypoints=websecure"
- "traefik.http.routers.portail-santinova-recette.tls=true"
- "traefik.http.routers.portail-santinova-recette.tls.certresolver=letsencrypt"
- "traefik.http.routers.portail-santelis-recette.rule=Host(`portail-santelis.recette.santinova-soft.org`)"
- "traefik.http.routers.portail-santelis-recette.entrypoints=websecure"
- "traefik.http.routers.portail-santelis-recette.tls=true"
- "traefik.http.routers.portail-santelis-recette.tls.certresolver=letsencrypt"
networks:
web:
external: true

View File

@@ -10,6 +10,7 @@ const vm = require('node:vm');
const root = path.join(__dirname, '..');
const html = fs.readFileSync(path.join(root, 'index.html'), 'utf8');
const compose = fs.readFileSync(path.join(root, 'docker-compose.yml'), 'utf8');
const script = html.match(/<script>([\s\S]*?)<\/script>/)?.[1];
assert.ok(script, 'le script de configuration des portails doit être présent');
@@ -91,6 +92,20 @@ for (const [host, env, group, appsUrl] of expected) {
assert.equal(sandbox.PORTAL.dashboardStatusUrl, appsUrl.replace('/apps', '/status'), `${host} doit appeler le bon endpoint statut`);
}
for (const host of [hosts.itinovaRecette, hosts.soinsRecette, hosts.santinovaRecette, hosts.santelisRecette]) {
assert.match(
compose,
new RegExp(`traefik\\.http\\.routers\\.portail-[a-z-]+\\.rule=Host\\(\\\`${host.replace(/\./g, '\\.') }\\\`\\)`),
`${host} doit avoir un routeur Traefik dédié`
);
}
assert.match(
compose,
/traefik\.http\.routers\.portail-legacy-recette\.rule=Host\(`portail\.recette\.santinova-soft\.org`\)/,
'l’ancienne URL recette doit garder un routeur de redirection'
);
assert.equal((compose.match(/tls\.certresolver=letsencrypt/g) || []).length, 5, 'chaque routeur recette doit demander un certificat TLS');
const recetteApps = [
{ id: 'itinova-contacts', category: 'ITINOVA', urls: { recette: 'https://contacts.recette.santinova-soft.org' } },
{ id: 'gestion-astreintes-had', category: 'SOINS_ET_SANTE', urls: { recette: 'https://astreintes-had.recette.santinova-soft.org' } },