Page d'accueil welcome¶
La page welcome est la porte d'entrée visuelle de la stack PerfShop. Affichée au démarrage du conteneur sur son propre port, elle liste les services exposés avec leur URL et leurs identifiants éventuels. C'est un atterrissage pédagogique pour les étudiants et formateurs qui arrivent sur un environnement fraîchement déployé.
Sources
welcome/index.html, welcome/welcome.js, welcome/welcome.css, welcome/entrypoint.sh, welcome/nginx.conf, welcome/Dockerfile, welcome/i18n/{fr,en}.json
Architecture¶
Le conteneur perfshop-welcome est une image Nginx statique minimaliste :
welcome/
├── Dockerfile ← nginx:1.27-alpine + copies + ENTRYPOINT
├── entrypoint.sh ← injection des URLs et de l'i18n au démarrage
├── nginx.conf ← serveur statique port 3011
├── index.html ← structure de la page
├── welcome.css ← styles
├── welcome.js ← construction du tableau des services
└── i18n/
├── fr.json
└── en.json
Au démarrage, entrypoint.sh remplace des marqueurs dans index.html et welcome.js par les valeurs des variables d'environnement (HOST_IP, PUBLIC_*_URL), puis charge le dictionnaire i18n depuis i18n/<lang>.json et l'injecte comme window.__I18N__ = {...} en tête de welcome.js.
Ce modèle permet de construire une seule image et de la déployer sur plusieurs cibles sans rebuild.
Port¶
Le service écoute sur le port 3011 (déclaré dans nginx.conf et exposé par le Dockerfile). Ce port est dédié à l'accueil et ne sert rien d'autre.
Les deux modes : ip et dns¶
La variable WELCOME_MODE contrôle la stratégie de construction des URLs :
| Mode | Quand l'utiliser | Comportement |
|---|---|---|
ip (défaut) |
Docker Desktop, VPS, Unix local | Toutes les URLs sont construites depuis HOST_IP et les ports numériques (ex: http://${HOST_IP}:9091) |
dns |
NAS / production avec domaines | Chaque URL est injectée individuellement depuis les variables PUBLIC_*_URL (ex: https://perfshop-frontend.perfshop.io) |
Mode IP¶
En mode ip, entrypoint.sh effectue une série de sed -i qui remplacent les marqueurs __URL_FRONTEND__, __URL_API__, __URL_GRAFANA__, etc. par des URLs construites dynamiquement :
sed -i \
-e "s|__HOST_IP__|${HOST_IP}|g" \
-e "s|__URL_FRONTEND__|http://${HOST_IP}:9091|g" \
-e "s|__URL_API__|http://${HOST_IP}:9080|g" \
...
Les étudiants en salle de classe utilisent ce mode : un seul HOST_IP (par exemple l'IP du poste formateur, ou localhost sur Docker Desktop) suffit à générer toutes les URLs.
Mode DNS¶
En mode dns, chaque URL doit être fournie individuellement via une variable d'environnement dédiée. Le script lit :
PUBLIC_FRONTEND_URLPUBLIC_API_URLPUBLIC_MONITORING_URLPUBLIC_GRAFANA_URLPUBLIC_CHAOS_URLPUBLIC_ADMIN_URLPUBLIC_DOCS_URLPUBLIC_SQUASH_URLPUBLIC_SELENIUM_VNC_URLPUBLIC_FORGEJO_URLPUBLIC_SCRIPTS_URLPUBLIC_JMETER_URLPUBLIC_OPENSEARCH_URL
C'est le mode utilisé en production sur un NAS avec un reverse-proxy HTTPS et des sous-domaines dédiés à chaque service.
Internationalisation¶
La variable PERFSHOP_LANG contrôle la langue. entrypoint.sh lit /usr/share/nginx/html/i18n/<lang>.json ; si le fichier n'existe pas, il log un warning et fallback sur fr. Le contenu du JSON est injecté comme window.__I18N__ = {...} en tête de welcome.js :
printf '// i18n — injecté par entrypoint.sh\nwindow.__I18N__ = %s;\n\n' "${I18N_JSON}" > "${TMPFILE}"
cat "${WEBROOT}/welcome.js" >> "${TMPFILE}"
mv "${TMPFILE}" "${WEBROOT}/welcome.js"
La clé __lang__ est ajoutée au JSON avant injection pour que le JS sache quelle langue est active. Le chmod 644 final garantit que nginx peut lire le fichier généré en runtime (sinon mktemp crée en 600, root-only → nginx worker renvoie 403).
L'attribut lang de la balise <html> est lui aussi injecté via sed sur le marqueur __LANG__ dans index.html.
Structure de la page¶
En-tête¶
Un bandeau simple avec le logo PerfShop (éclair ⚡ + titre), une tagline localisée (« Pedagogical Chaos Engineering Platform ») et un badge vert « Stack déployée » qui signifie visuellement que tous les services attendus répondent.
Hero¶
Une section centrale qui contient :
- Un titre accrocheur (« Bienvenue sur PerfShop ! »)
- Un sous-titre (« Votre environnement complet de tests de performance, chaos engineering et QA est prêt. »)
- Une pill grise indiquant l'IP serveur (
🖥️ Serveur : <HOST_IP>)
Tableau des services¶
Le cœur de la page : un tableau HTML rempli dynamiquement par welcome.js à partir de window.__I18N__ et des URLs injectées par entrypoint.sh. Chaque ligne suit le même format :
| Service | URL | Description | Compte(s) |
|---|---|---|---|
| Frontend shop | Lien cliquable | Vitrine e-commerce PerfShop, cible des chaos | — |
| API Spring Boot | Lien cliquable | Backend + /actuator/prometheus | — |
| Monitoring HTML | Lien cliquable | Dashboard temps réel conteneurs + JVM | — |
| Grafana | Lien cliquable | Observabilité : dashboards livrés | admin / perfshop |
| Chaos Admin | Lien cliquable | Panneau formateur + page étudiant | admin@perfshop.fr / perfshop |
| Documentation | Lien cliquable | MkDocs — cette doc elle-même | — |
| Squash TM | Lien cliquable | Gestion des cas de test | admin / admin |
| Selenium VNC | Lien cliquable | Vue VNC des navigateurs Selenium | — |
| Forgejo | Lien cliquable | Git auto-hébergé | forgejo-admin / perfshop |
| Scripts UI | Lien cliquable | Éditeur web de scripts Robot / pytest | admin@perfshop.fr / perfshop |
| JMeter UI | Lien cliquable | Lanceur de tests JMeter | admin@perfshop.fr / perfshop |
| OpenSearch | Lien cliquable | Dashboards / puits de logs | admin / perfshop |
Les libellés et descriptions sont traduits depuis le dictionnaire i18n. La colonne « Compte(s) » affiche les identifiants par défaut du déploiement — c'est volontairement explicite pour un environnement pédagogique isolé ; ces valeurs doivent être changées pour toute exposition publique.
Certains services annexes du projet ne sont pas listés dans cette documentation. La page peut également lister d'autres entrées ajoutées par le déploiement local — elle affiche simplement ce que welcome.js lui fournit à partir des variables d'environnement disponibles.
Pied de page¶
Un footer minimaliste avec la mention de licence (AGPL-3.0), le lien vers perfshop.io et le contact auteur.
Variables d'environnement consommées¶
| Variable | Mode | Défaut |
|---|---|---|
WELCOME_MODE |
Les deux | ip |
HOST_IP |
ip |
localhost |
PERFSHOP_LANG |
Les deux | fr |
PUBLIC_FRONTEND_URL |
dns |
http://localhost:9091 |
PUBLIC_API_URL |
dns |
http://localhost:9080 |
PUBLIC_MONITORING_URL |
dns |
http://localhost:3001 |
PUBLIC_GRAFANA_URL |
dns |
http://localhost:3002 |
PUBLIC_CHAOS_URL |
dns |
http://localhost:3003 |
PUBLIC_ADMIN_URL |
dns |
http://localhost:3004 |
PUBLIC_DOCS_URL |
dns |
http://localhost:9087 |
PUBLIC_SQUASH_URL |
dns |
http://localhost:9086/squash |
PUBLIC_SELENIUM_VNC_URL |
dns |
http://localhost:7900 |
PUBLIC_FORGEJO_URL |
dns |
http://localhost:3009 |
PUBLIC_SCRIPTS_URL |
dns |
http://localhost:3008 |
PUBLIC_JMETER_URL |
dns |
http://localhost:3005 |
PUBLIC_OPENSEARCH_URL |
dns |
http://localhost:5601 |
Voir la référence des variables d'environnement pour le détail complet.