[Service] # `Restart=on-failure` vient du paquet, SANS `RestartSec` — donc 100 ms par defaut. # Le 2026-08-10, une migration de base a echoue au premier demarrage : systemd a relance # six fois en une seconde, chaque relance rejouant les migrations sur la meme base SQLite. # Un echec unique s'est ainsi presente comme un desastre, et il a fallu remonter tout le # journal pour retrouver la PREMIERE erreur — la seule qui disait quelque chose. # # Dix secondes laissent le temps de voir, de journaliser, et n'empilent pas les migrations. RestartSec=10 Environment=GF_SERVER_DOMAIN={{ serveur_grafana_hostname }} Environment=GF_SERVER_ROOT_URL={{ serveur_grafana_root_url }} Environment=GF_SECURITY_ADMIN_PASSWORD={{ serveur_grafana_admin_password }} Environment=GF_USERS_ALLOW_SIGN_UP=false {# LA SYNTHESE COMME PAGE D'ACCUEIL (2026-10-04) : a la connexion, la question « faut-il agir ? » plutot que la liste des tableaux. Le fichier est pose par ce role (tableau de synthese) ; sans lui, Grafana revient a son accueil par defaut, sans erreur. #} Environment=GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH={{ serveur_grafana_dashboards_dir }}/setops-synthese.json {# Le formulaire local est offert, ou il ne l'est pas — et le gabarit le DIT dans les deux cas. Cette ligne vivait sous le `if` du SSO : SSO eteint, elle disparaissait, et c'est le defaut de Grafana qui decidait en silence. Un reglage d'authentification qu'aucun fichier n'ecrit est un reglage que personne ne peut relire. Masquer le formulaire ne supprime pas le compte : `grafana-cli admin reset-admin-password` reste utilisable sur l'hote. #} Environment=GF_AUTH_DISABLE_LOGIN_FORM={{ 'false' if serveur_grafana_connexion_locale | bool else 'true' }} {% if serveur_grafana_oidc_actif %} Environment=GF_AUTH_GENERIC_OAUTH_ENABLED=true Environment=GF_AUTH_GENERIC_OAUTH_NAME={{ serveur_grafana_oidc_nom }} Environment=GF_AUTH_GENERIC_OAUTH_CLIENT_ID={{ serveur_grafana_oidc_client_id }} Environment=GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET={{ serveur_grafana_oidc_client_secret }} Environment="GF_AUTH_GENERIC_OAUTH_SCOPES={{ serveur_grafana_oidc_scopes }}" Environment=GF_AUTH_GENERIC_OAUTH_AUTH_URL={{ serveur_grafana_oidc_base }}/auth Environment=GF_AUTH_GENERIC_OAUTH_TOKEN_URL={{ serveur_grafana_oidc_base }}/token Environment=GF_AUTH_GENERIC_OAUTH_API_URL={{ serveur_grafana_oidc_base }}/userinfo Environment=GF_AUTH_GENERIC_OAUTH_LOGIN_ATTRIBUTE_PATH=preferred_username {% if serveur_grafana_oidc_role_path %} Environment="GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH={{ serveur_grafana_oidc_role_path }}" Environment=GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_STRICT=false {% endif %} {% endif %}