Chapitre 4
Configuration
Toutes les variables du fichier de réglages et les réglages avancés de l'application, avec leur valeur par défaut et leur effet.
Concerne :Équipe technique
La plateforme se règle à deux niveaux :
- le fichier
/opt/read/.envdu serveur (modèle :deploy/.env.example), lu par Docker Compose ; - des réglages avancés de l'application, rarement utiles, au format
Section__Cle.
Les réglages fonctionnels (seuil de masquage du portail, saisie par les organisations, conservation des listes de présence, logo) ne sont pas ici : l'administrateur les change dans l'écran Paramètres de la plateforme, sans redémarrage (Guide de l'administrateur).
Appliquer un changement#
Après une modification de /opt/read/.env, recréez les conteneurs concernés :
cd /opt/read/code
docker compose up -dCompose recrée seulement les services dont la configuration a changé. Une reconstruction de l'image n'est pas nécessaire.
Important
.env suit la syntaxe de Docker Compose, pas celle de bash : une ligne par variable, CLE=valeur, sans espace autour du signe égal. Les scripts du dossier deploy/ lisent les clés une à une ; ne « sourcez » jamais ce fichier dans un shell (une valeur comme Plateforme READ y serait exécutée).
Base de données#
| Variable | Défaut | Effet |
|---|---|---|
POSTGRES_DB | read | Nom de la base |
POSTGRES_USER | read | Compte propriétaire de la base. Il ne sert qu'au service migrations et aux scripts de sauvegarde et de restauration |
POSTGRES_PASSWORD | aucun (obligatoire) | Mot de passe du compte propriétaire. Fixé à la création du volume pgdata : le changer ensuite dans .env ne change pas le mot de passe en base |
POSTGRES_APP_USER | read_app | Rôle de connexion de l'application : lecture et écriture des tables, journal d'audit en ajout seul, aucun droit de propriétaire. Créé par le service migrations |
POSTGRES_APP_PASSWORD | aucun (obligatoire) | Mot de passe de ce rôle, différent du précédent. Réappliqué à chaque docker compose up : il peut être changé librement |
Sans POSTGRES_PASSWORD ou POSTGRES_APP_PASSWORD, docker compose up s'arrête avec un message explicite.
Attention
Pour changer POSTGRES_PASSWORD après l'installation, changez d'abord le mot de passe dans PostgreSQL (docker compose exec db psql -U read -d read -c "ALTER ROLE read PASSWORD '…'"), puis dans .env, puis docker compose up -d.
Adresse du site#
| Variable | Défaut | Effet |
|---|---|---|
SITE_ADDRESS | :80 | Adresse servie par Caddy. Un nom de domaine (read.example.org) active le HTTPS automatique et la redirection de HTTP vers HTTPS ; :80 sert toute adresse en HTTP simple (poste local seulement) |
SITE_REDIRECTION | (vide) | Ancien nom à rediriger définitivement vers URL_PUBLIQUE, chemin et paramètres compris, après un changement de domaine (par exemple le nom fourni par l'hébergeur) ; Caddy garde un certificat pour lui. Vide : aucune redirection |
HTTP_PORT | 80 | Port HTTP publié sur l'hôte |
HTTPS_PORT | 443 | Port HTTPS publié sur l'hôte (TCP et UDP) |
URL_PUBLIQUE | http://localhost:8088 | Adresse du site écrite dans les e-mails (lien « mot de passe oublié »). Jamais déduite de la requête, pour qu'un lien ne puisse pas être détourné : à régler sur https://<nom de domaine> |
En production, gardez 80 et 443 : Let's Encrypt valide le domaine sur ces ports.
Application et administrateur initial#
| Variable | Défaut | Effet |
|---|---|---|
ASPNETCORE_ENVIRONMENT | Production | Production sur un serveur : pages d'erreur sans détail technique, journaux quotidiens en fichiers, HSTS |
ADMIN_EMAIL | vide | Adresse du premier administrateur |
ADMIN_MOT_DE_PASSE | vide | Son mot de passe (8 caractères au moins, dont un chiffre). Le compte n'est créé que si aucun administrateur n'existe ; ensuite la variable est ignorée : videz-la |
ADMIN_CHANGEMENT_OBLIGATOIRE | true | Oblige ce premier administrateur à changer son mot de passe à la première connexion. false seulement pour la démo en ligne |
Messagerie#
| Variable | Défaut | Effet |
|---|---|---|
EMAIL_HOTE | vide | Serveur SMTP. Vide : aucun e-mail ne part, chaque message est écrit en fichier .eml dans le dossier boite-envoi/ du volume app-donnees |
EMAIL_PORT | 587 | Port SMTP |
EMAIL_SECURITE | Auto | Auto (STARTTLS si le serveur le propose), StartTls, SslOnConnect (port 465) ou None |
EMAIL_UTILISATEUR | vide | Identifiant SMTP ; vide : pas d'authentification |
EMAIL_MOT_DE_PASSE | vide | Mot de passe SMTP |
EMAIL_EXPEDITEUR | ne-pas-repondre@read.local | Adresse d'expédition ; elle doit être autorisée par le serveur SMTP (et par les enregistrements SPF/DKIM du domaine) |
EMAIL_NOM_EXPEDITEUR | Plateforme READ | Nom affiché de l'expéditeur |
Démonstration#
À laisser à false et vide sur une plateforme réelle (chapitre Environnement de démonstration).
| Variable | Défaut | Effet |
|---|---|---|
DEMO_AFFICHER | false | Bandeau « Données de démonstration fictives » en haut de chaque page |
DEMO_DONNEES | false | Charge au démarrage des données entièrement fictives, seulement dans une base qui ne contient aucune organisation |
DEMO_MOT_DE_PASSE | vide | Mot de passe des comptes de démonstration ; sans lui, rien n'est chargé |
DEMO_COMPTES_PROTEGES | false | Comptes …@demo.read verrouillés : mot de passe inchangeable, ni modification ni désactivation par l'administrateur (démo en ligne seulement) |
Sauvegarde#
Lues par deploy/sauvegarde.sh (chapitre Sauvegarde et restauration), pas par l'application.
| Variable | Défaut | Effet |
|---|---|---|
SAUVEGARDE_DOSSIER | /var/backups/read | Dossier des sauvegardes locales |
SAUVEGARDE_JOURS | 30 | Conservation, en jours, locale et distante |
SAUVEGARDE_DISTANTE | vide | Destination rclone de la copie hors serveur, par exemple chiffre:. Vide : pas de copie (le compte rendu l'indique) |
RCLONE_CONFIG_* | aucune | Description des destinations rclone (stockage S3 et couche de chiffrement) ; modèle commenté dans deploy/.env.example |
Réglages avancés de l'application#
Ces réglages ont une valeur par défaut adaptée. Ils ne sont pas transmis par .env : pour en changer un, ajoutez la variable dans la section environment du service app de deploy/docker-compose.yml (dans le dépôt, pour qu'elle survive aux déploiements), puis déployez.
# Exemple (deploy/docker-compose.yml, service app)
environment:
Api__DureeJetonAccesMinutes: "30"| Réglage | Défaut | Effet |
|---|---|---|
Securite__ConnexionsParMinute | 10 | Tentatives de connexion par minute et par adresse IP (site et jetons de l'API) ; au-delà, réponse 429 |
Securite__InscriptionsParHeure | 5 | Demandes d'inscription d'organisation par heure et par adresse IP |
Securite__ReinitialisationsParHeure | 5 | Demandes « mot de passe oublié » par heure et par adresse IP |
Securite__ReseauxProxy__0, __1… | réseaux privés | Réseaux (CIDR) dont l'en-tête X-Forwarded-For est cru. Par défaut 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7 (réseau Docker) |
Securite__PolitiqueContenuRapportSeulement | false | true : la politique de sécurité du contenu (CSP) est seulement signalée par le navigateur, sans rien bloquer. Repli de dépannage, à ne pas laisser en service |
Securite__IntervalleRevalidationSecondes | 60 | Délai au bout duquel une session ouverte voit un compte désactivé ou un rôle changé |
Api__DureeJetonAccesMinutes | 30 | Durée d'un jeton d'accès de l'API |
Api__DureeRenouvellementJours | 14 | Durée glissante du jeton de renouvellement (module hors ligne) |
Api__DureeMaximaleJours | 90 | Au-delà, le mot de passe est redemandé sur l'appareil |
Api__DelaiRejeuSecondes | 120 | Rejeu toléré d'un jeton de renouvellement tout juste utilisé (réseau instable) |
Api__AppelsParMinute | 300 | Appels à l'API par minute et par adresse IP |
Notifications__Auto | true | false : arrête l'envoi des e-mails de notification, les rappels et la purge des notifications |
PiecesJointes__PurgeAuto | true | false : arrête les tâches quotidiennes de conservation (listes de présence échues, demandes refusées, jetons expirés) |
Serilog__MinimumLevel__Default | Information | Niveau des journaux (Debug pour un diagnostic ponctuel) |
Réglages fixés par l'image ou par deploy/docker-compose.yml, à ne pas modifier : ConnectionStrings__Read (construite à partir des variables POSTGRES_*), Base__Migrer (false : l'application ne migre pas elle-même, le service migrations le fait), Base__MigrerSeulement (service migrations), Base__RoleApplication et Base__MotDePasseRoleApplication (rôle restreint), Base__InitialiserAuDemarrage (true), Stockage__Dossier (donnees, soit /app/donnees dans le conteneur), DataProtection__KeysPath (/app/keys), ASPNETCORE_HTTP_PORTS (8080).
Danger
Les tâches de conservation (PiecesJointes__PurgeAuto) appliquent des engagements de protection des données (listes de présence supprimées à échéance, coordonnées effacées). Ne les désactivez que le temps d'un diagnostic.