Configuration du Webserver
Le Webserver dispose d’un fichier de configuration JSON minimal pour les parametres au niveau du service, tandis que la plupart des parametres operationnels sont geres via l’interface Web et stockes dans sa base de donnees cle-valeur integree.
Configuration du service (webserver.json)
Ce fichier doit se trouver dans le meme repertoire que l’executable.
{
"HTTPS": "true",
"PortAPI": "8050",
"PortWEB": "9090",
"RunUser": "mugnsoft",
"_sharedInternal": "<meme-valeur-sur-chaque-composant>"
}
| Champ | Type | Description | Defaut |
|---|---|---|---|
HTTPS |
string | Activer HTTPS pour les serveurs API et Web. Definir a "true" ou "false" |
"true" |
PortAPI |
string | Port TCP pour le serveur API REST | "8050" |
PortWEB |
string | Port TCP pour le serveur de l’interface Web | "9090" |
RunUser |
string | Utilisateur systeme pour executer le service (Linux uniquement). Laisser vide pour utiliser l’utilisateur courant | "" |
_sharedInternal |
string | Mot de passe du compte machine interne adminMNS. Le Webserver l’utilise pour s’authentifier aupres de chaque composant qu’il pilote (Enable, Push Settings, resynchronisation des jetons) ; il doit correspondre a la valeur de la configuration de chaque composant. Lorsqu’il est vide, adminMNS n’est pas cree. Voir Secret interne des composants |
vide : genere au premier demarrage (depuis la 4.2.0) |
PdfBrowser |
string | Chemin complet de l’executable Chrome, Chromium ou Edge qui imprime les rapports PDF. Optionnel (depuis la 4.3.0) | "" : trouve automatiquement |
_sharedInternal doit contenir la meme valeur dans webserver.json, monitor.json, integrator.json et discovery_agent.json. Une non-correspondance fait echouer les actions Enable / Push Settings du Webserver avec une erreur bcrypt dans le journal du composant cible. Le redemarrage d’un composant recalcule le hash de son mot de passe adminMNS pour correspondre a sa configuration : une valeur obsolete se repare ainsi automatiquement.
Rapports PDF (PdfBrowser)
Depuis la 4.3.0, un rapport peut etre envoye en PDF (voir Langue et format). Le Webserver construit toujours le rapport HTML, puis demarre un Chrome, Chromium ou Edge sans interface qui l’ouvre, attend que les graphiques soient dessines et l’imprime en A4 paysage. Rien d’autre n’est a installer : le navigateur est pilote directement, sans driver.
Navigateur utilise. Si PdfBrowser est renseigne, cet executable et aucun autre. Un chemin qui n’existe pas n’est pas remplace par un autre navigateur : le rapport repasse en HTML avec l’erreur PdfBrowser "<chemin>" in webserver.json does not exist. Si PdfBrowser est vide ou absent, le Webserver cherche :
| OS | Emplacements verifies, dans l’ordre |
|---|---|
| Windows | Microsoft\Edge\Application\msedge.exe, puis Google\Chrome\Application\chrome.exe, sous %ProgramFiles(x86)%, %ProgramFiles% et %LocalAppData% |
| Linux | /usr/bin/chromium, /usr/bin/chromium-browser, /usr/bin/google-chrome, /usr/bin/google-chrome-stable, /usr/bin/microsoft-edge, /snap/bin/chromium, /headless-shell/headless-shell |
| Les deux | puis chromium, chromium-browser, google-chrome, chrome, msedge, microsoft-edge dans le PATH |
Windows 10/11 et Windows Server 2022 ou ulterieur incluent Edge : le PDF y fonctionne sans aucun reglage. Sous Linux, installez un navigateur, par exemple :
# Debian / Ubuntu
sudo apt install chromium
# RHEL / Rocky / Alma (EPEL)
sudo dnf install chromium
Renseignez PdfBrowser lorsque le navigateur est ailleurs, ou pour imposer un navigateur quand plusieurs sont installes :
{
"HTTPS": "true",
"PortAPI": "8050",
"PortWEB": "9090",
"RunUser": "mugnsoft",
"_sharedInternal": "<meme-valeur-sur-chaque-composant>",
"PdfBrowser": "/opt/google/chrome/chrome"
}
Sous Windows, doublez les barres obliques inverses : "PdfBrowser": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe". Le parametre est lu au demarrage : redemarrez le Webserver apres l’avoir modifie.
Fonctionnement.
- Chaque impression utilise un profil de navigateur jetable, supprime ensuite. Vos profils, cookies et extensions ne sont jamais lus.
- Execute en
root(cas typique d’un conteneur), le navigateur est demarre avec--no-sandbox, car Chrome refuse son bac a sable en root. Executez le service sous un utilisateur normal (RunUser) pour conserver le bac a sable. - Deux rapports au plus sont imprimes en meme temps ; les autres attendent leur tour. Prevoyez 150 a 300 Mo de memoire par impression.
- Une impression qui ne se termine pas a temps (60 s pour dessiner les graphiques, 2 minutes au total) est abandonnee, et le rapport est envoye en HTML.
- Aucun acces Internet n’est necessaire. La page du rapport demande ses bibliotheques (Chart.js, UIkit, jQuery, moment…) a des CDN publics ; pendant l’impression, le Webserver repond lui-meme a ces requetes avec les copies integrees a son executable, et refuse toute autre requete. Un Webserver sur un reseau ferme imprime des PDF complets. Pour des rapports HTML lus sans acces Internet, voir Rapports sans acces Internet.
- Une page dont la bibliotheque de graphiques ne s’est pas chargee n’est pas imprimee avec des panneaux vides : le rapport est envoye en HTML avec la raison
the report libraries did not load.
Docker. L’image mugnsoft/webserver ne contient pas de navigateur : les rapports PDF repassent donc en HTML. Pour imprimer des PDF, construisez une image derivee qui ajoute Chromium, et renseignez PdfBrowser s’il n’est pas dans l’un des emplacements ci-dessus.
Depannage. Lorsque le PDF manque, le resultat de l’envoi affiche PDF unavailable (raison) et le journal du Webserver contient une ligne sendReportEmail ... PDF not produced avec la cause :
| Raison | Correction |
|---|---|
no Chrome, Chromium or Edge found on the webserver host |
Installez-en un, ou renseignez PdfBrowser. |
PdfBrowser "..." in webserver.json does not exist |
Corrigez le chemin et redemarrez le Webserver. |
waiting for function failed: timeout ou context deadline exceeded |
La page du rapport n’a pas fini de se dessiner a temps (60 s pour les graphiques, 2 minutes au total) : verifiez la charge de l’hote. |
the report libraries did not load |
La bibliotheque de graphiques de la page manquait. Cela ne devrait pas arriver avec les copies integrees : transmettez le journal du Webserver au support. |
| Le navigateur s’arrete au demarrage (Linux) | Bibliotheques partagees manquantes : installez le paquet chromium de la distribution plutot qu’un binaire copie, qui apporte ses dependances. |
Parametres d’execution (via l’interface Web)
Ces parametres sont configures via la page Parametres de l’interface Web et stockes de maniere chiffree dans le magasin cle-valeur integre.
SMTP (Email)
| Parametre | Description |
|---|---|
| SMTP Server | Nom d’hote du serveur de messagerie |
| SMTP Port | Port du serveur de messagerie (25, 465, 587) |
| SMTP Username | Nom d’utilisateur pour l’authentification |
| SMTP Password | Mot de passe pour l’authentification |
| SMTP TLS | Activer le chiffrement TLS |
| Sender Email | Adresse email pour les messages sortants |
Integration Slack
| Parametre | Description |
|---|---|
| Slack Token | Jeton de bot pour l’API Slack |
| Slack Channel | Canal par defaut pour les notifications |
Integration GitLab
| Parametre | Description |
|---|---|
| GitLab URL | URL du serveur GitLab |
| GitLab Token | Jeton d’acces personnel |
| GitLab Project | Identifiant du projet pour l’import de scripts de moniteur |
Integration LDAP
| Parametre | Description |
|---|---|
| LDAP Server | Nom d’hote du serveur LDAP/AD |
| LDAP Port | Port du serveur (389, 636) |
| LDAP Base DN | DN de base pour les recherches |
| LDAP Bind DN | DN de l’utilisateur de liaison |
| LDAP Bind Password | Mot de passe de l’utilisateur de liaison |
| LDAP TLS | Activer TLS |
Journalisation
| Parametre | Description | Defaut |
|---|---|---|
| Log Level | debug, info, warn, error |
info |
| Max Log Size | Taille maximale du fichier journal (Mo) | 10 |
| Max Backups | Nombre de fichiers journaux en rotation | 5 |
| Max Age | Jours de conservation des fichiers journaux | 28 |
| Compress Logs | Compresser les fichiers en rotation | true |
Parametres d’authentification JWT
Ces parametres sont integres dans le binaire et ne peuvent pas etre modifies via la configuration :
| Parametre | Valeur |
|---|---|
| Algorithme de signature | RS256 |
| Duree de vie du jeton utilisateur | 15 minutes |
| Duree de vie du jeton composant | 60 jours (1440 heures) |
| Recherche du jeton | header: Authorization, cookie: jwt |
| En-tete du jeton | Bearer |
| Nom du cookie | jwt |
| Cookie HTTPOnly | true |
| Cookie SameSite | Lax |
Emplacements des fichiers
| Fichier/Repertoire | Fonction |
|---|---|
webserver.json |
Configuration du service |
license_MNS.dat |
Fichier de licence (requis) |
config/sec/mugnsoft_webserver.key |
Cle privee RSA (signature JWT) |
config/sec/mugnsoft_webserver.key.pub |
Cle publique RSA (verification JWT) |
config/ssl/certificates/ |
Certificats TLS |
config/ssl/private/ |
Cles privees TLS |
dbs/webserver.db |
Base de donnees cle-valeur integree principale |
dbs/backup/ |
Sauvegardes automatiques |
log/ |
Journaux de l’application |