Aller au contenu
Documentation Plateforme READ Ouvrir la plateforme

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/.env du 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 -d

Compose 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#

VariableDéfautEffet
POSTGRES_DBreadNom de la base
POSTGRES_USERreadCompte propriétaire de la base. Il ne sert qu'au service migrations et aux scripts de sauvegarde et de restauration
POSTGRES_PASSWORDaucun (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_USERread_appRô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_PASSWORDaucun (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#

VariableDéfautEffet
SITE_ADDRESS:80Adresse 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_PORT80Port HTTP publié sur l'hôte
HTTPS_PORT443Port HTTPS publié sur l'hôte (TCP et UDP)
URL_PUBLIQUEhttp://localhost:8088Adresse 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#

VariableDéfautEffet
ASPNETCORE_ENVIRONMENTProductionProduction sur un serveur : pages d'erreur sans détail technique, journaux quotidiens en fichiers, HSTS
ADMIN_EMAILvideAdresse du premier administrateur
ADMIN_MOT_DE_PASSEvideSon 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_OBLIGATOIREtrueOblige ce premier administrateur à changer son mot de passe à la première connexion. false seulement pour la démo en ligne

Messagerie#

VariableDéfautEffet
EMAIL_HOTEvideServeur SMTP. Vide : aucun e-mail ne part, chaque message est écrit en fichier .eml dans le dossier boite-envoi/ du volume app-donnees
EMAIL_PORT587Port SMTP
EMAIL_SECURITEAutoAuto (STARTTLS si le serveur le propose), StartTls, SslOnConnect (port 465) ou None
EMAIL_UTILISATEURvideIdentifiant SMTP ; vide : pas d'authentification
EMAIL_MOT_DE_PASSEvideMot de passe SMTP
EMAIL_EXPEDITEURne-pas-repondre@read.localAdresse d'expédition ; elle doit être autorisée par le serveur SMTP (et par les enregistrements SPF/DKIM du domaine)
EMAIL_NOM_EXPEDITEURPlateforme READNom affiché de l'expéditeur

Démonstration#

À laisser à false et vide sur une plateforme réelle (chapitre Environnement de démonstration).

VariableDéfautEffet
DEMO_AFFICHERfalseBandeau « Données de démonstration fictives » en haut de chaque page
DEMO_DONNEESfalseCharge au démarrage des données entièrement fictives, seulement dans une base qui ne contient aucune organisation
DEMO_MOT_DE_PASSEvideMot de passe des comptes de démonstration ; sans lui, rien n'est chargé
DEMO_COMPTES_PROTEGESfalseComptes …@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.

VariableDéfautEffet
SAUVEGARDE_DOSSIER/var/backups/readDossier des sauvegardes locales
SAUVEGARDE_JOURS30Conservation, en jours, locale et distante
SAUVEGARDE_DISTANTEvideDestination rclone de la copie hors serveur, par exemple chiffre:. Vide : pas de copie (le compte rendu l'indique)
RCLONE_CONFIG_*aucuneDescription 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églageDéfautEffet
Securite__ConnexionsParMinute10Tentatives de connexion par minute et par adresse IP (site et jetons de l'API) ; au-delà, réponse 429
Securite__InscriptionsParHeure5Demandes d'inscription d'organisation par heure et par adresse IP
Securite__ReinitialisationsParHeure5Demandes « mot de passe oublié » par heure et par adresse IP
Securite__ReseauxProxy__0, __1…réseaux privésRé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__PolitiqueContenuRapportSeulementfalsetrue : 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__IntervalleRevalidationSecondes60Délai au bout duquel une session ouverte voit un compte désactivé ou un rôle changé
Api__DureeJetonAccesMinutes30Durée d'un jeton d'accès de l'API
Api__DureeRenouvellementJours14Durée glissante du jeton de renouvellement (module hors ligne)
Api__DureeMaximaleJours90Au-delà, le mot de passe est redemandé sur l'appareil
Api__DelaiRejeuSecondes120Rejeu toléré d'un jeton de renouvellement tout juste utilisé (réseau instable)
Api__AppelsParMinute300Appels à l'API par minute et par adresse IP
Notifications__Autotruefalse : arrête l'envoi des e-mails de notification, les rappels et la purge des notifications
PiecesJointes__PurgeAutotruefalse : arrête les tâches quotidiennes de conservation (listes de présence échues, demandes refusées, jetons expirés)
Serilog__MinimumLevel__DefaultInformationNiveau 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.

Plateforme READ — Édition 1.0 — octobre 2026. Documentation générée à partir des sources du projet ; les captures montrent des données de démonstration entièrement fictives.