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
Important : La modification des ports ou du parametre HTTPS necessite un redemarrage du service. Les autres parametres (SMTP, Slack, LDAP, etc.) sont configures via l’interface Web et ne necessitent pas de modifications de ce fichier.
_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

Traductions