Configuration
Deux fichiers, deux rôles
| Fichier (sur le serveur) | Lu par | Effet d'une modification |
|---|---|---|
~/pch-sig/.env.prod | Docker Compose, injecté dans l'environnement des conteneurs | docker compose -f … up -d --no-deps backend |
~/pch-sig/backend/.env | copié dans l'image (/app/.env), valeurs par défaut de Symfony | reconstruction de l'image obligatoire |
Règle de précédence : une variable présente dans l'environnement du conteneur l'emporte sur /app/.env, même si elle est vide. Vérifier la valeur réellement utilisée :
docker exec pch_backend php bin/console debug:dotenv
Aucun de ces fichiers n'est dans le dépôt Git. Les secrets sont dans le gestionnaire de secrets ; leur rotation est décrite dans docs/ROTATION_SECRETS.md.
Variables principales
| Variable | Où | Rôle |
|---|---|---|
APP_ENV, APP_DEBUG | compose | prod, 0 |
APP_SECRET | .env.prod | secret Symfony |
POSTGRES_USER, POSTGRES_PASSWORD | .env.prod | base pch_sig |
JWT_PASSPHRASE | .env.prod | phrase de passe des clés JWT (backend/config/jwt/, propres au serveur) |
MAILER_USER, MAILER_PASSWORD | .env.prod | compte SMTP OVH noreply@ucp-pch.org ; le DSN utilisé est smtp://…@ssl0.ovh.net:587 |
MAILER_SENDER | compose | noreply@ucp-pch.org |
MESSENGER_TRANSPORT_DSN | compose | doctrine://default : file des e-mails et tâches asynchrones |
REDIS_URL | compose | redis://redis:6379 |
FRONTEND_URL, DEFAULT_URI | compose | https://bemba.ucp-pch.org (liens des e-mails, avec /#/) |
CORS_ALLOW_ORIGIN | compose | domaines autorisés |
ANTHROPIC_API_KEY, CLAUDE_MODEL | backend/.env | assistant Bemba (modèle par défaut défini dans services.yaml) |
COHERE_API_KEY | backend/.env | recherche sémantique de l'assistant, regroupement des plaintes |
DOCUMENTATION_BUILD_DIR, DOCUMENTATION_URL | compose | base documentaire de l'assistant (build Docusaurus monté en lecture seule) |
KOBO_API_URL, KOBO_API_TOKEN | compose / .env.prod | KoboToolbox (les comptes par projet sont aussi configurables dans l'application) |
SENTRY_DSN | .env.prod | remontée d'erreurs |
Les variables SUSO_* ne sont pas utilisées : la connexion à Survey Solutions est lue dans la table survey_solutions_config, modifiable depuis l'application.
Frontend
| Fichier | Utilisé par | Contenu |
|---|---|---|
frontend/.env.development.local | npm start | REACT_APP_API_URL=http://localhost:8000/api, badge « LOCAL » |
frontend/.env.production | npm run build | REACT_APP_API_URL=/api, REACT_APP_DOCS_URL=https://docubemba.ucp-pch.org |
Les variables REACT_APP_* sont figées au moment du build : changer une valeur impose de reconstruire et redéployer le frontend.
Nginx du frontend
~/pch-sig/nginx/frontend.conf est monté dans pch_frontend. Il sert le build React (HashRouter, toutes les routes renvoient index.html), met en cache les ressources versionnées et applique la politique de sécurité du contenu (CSP) : connect-src limité au domaine, à KoboToolbox et à Sentry. Ajouter un service tiers appelé depuis le navigateur impose de l'ajouter à la CSP.
Configuration dans l'application
Une grande partie du paramétrage se fait dans Paramètres, sans redéploiement : rôles et permissions, institutions et rattachements, projets et programmes, méthodes PMT, nomenclature des identifiants, workflows et délais des plaintes (Workflow & SLA), équipes, comptes Kobo et Survey Solutions par projet, contenus du site public.
E-mails
Tous les e-mails partent de façon asynchrone (Messenger) : une requête ne contacte jamais le serveur SMTP. Les messages en échec vont dans la file failed :
docker exec pch_backend php bin/console messenger:failed:show
docker exec pch_backend php bin/console messenger:failed:retry # production uniquement
En préproduction, l'envoi échoue volontairement (SMTP injoignable) : ne pas relancer la file failed.
Journalisation
Monolog écrit sur la sortie d'erreur du conteneur ; Promtail collecte ces journaux et les envoie à Loki (rétention un an). Voir Logs.