Variables d'environnement
Toute la configuration du backend qui doit etre connue avant le demarrage de Django (base de donnees, Redis, secrets, stockage) passe par des variables d'environnement. Le reste — nom du site, rappels, regles de visibilite, activation de l'enregistrement, SSO — se configure a chaud depuis l'interface d'administration, voir Options avancees.
Ou les definir
| Deploiement | Emplacement |
|---|---|
| Paquets Debian | /etc/hcw/backend.conf, charge par systemd (EnvironmentFile=) pour les services hcw, hcw-celery et hcw-scheduler |
| Docker Compose | Le bloc environment: de chaque service dans docker-compose.yml |
| Developpement | backend/.env, charge automatiquement au demarrage. Copiez backend/.env-dist pour partir d'un modele |
Le backend charge backend/.env s'il existe, puis se rabat sur l'environnement du processus. Les variables definies dans l'environnement reel fonctionnent toujours, meme sans fichier .env.
Redemarrage necessaire
Les variables d'environnement sont lues une seule fois au demarrage du processus. Apres toute modification, redemarrez l'API, le worker Celery et le scheduler : ils tournent chacun dans leur propre processus et doivent partager la meme configuration.
Django
| Variable | Defaut | Description |
|---|---|---|
DJANGOSECRET_KEY |
(aucun) | Obligatoire. Cle secrete utilisee pour signer les sessions, les jetons et les liens de reinitialisation de mot de passe. Generez-la avec echo -n "votre phrase secrete" \| sha256sum. La modifier invalide toutes les sessions actives. |
DEBUG |
False |
Mettre exactement True pour activer le mode debug. Il bascule aussi le cache de Redis vers la memoire locale et accepte toutes les origines CORS. A ne jamais activer en production. |
ALLOWED_HOST |
(aucun) | Nom d'hote principal pour lequel le backend accepte de repondre. |
ALLOWED_HOSTS |
(vide) | Liste de noms d'hotes supplementaires separes par des virgules, ajoutes a ALLOWED_HOST. Utilisez * pour tout accepter (developpement uniquement). |
CSRF_TRUSTED_ORIGINS |
(vide) | Liste d'origines separees par des virgules, schema inclus (ex. https://admin.example.com). Necessaire pour l'administration Django derriere HTTPS. |
CORS_ALLOWED_ORIGINS |
(vide) | Liste d'origines navigateur supplementaires autorisees a appeler l'API, separees par des virgules. Les origines Capacitor des applications mobiles sont toujours autorisees. |
DEFAULT_TIME_ZONE |
UTC |
Fuseau horaire applique par defaut aux nouveaux utilisateurs, ex. Europe/Zurich. |
STATIC_ROOT |
statics |
Repertoire ou collectstatic ecrit les fichiers statiques. Le paquet Debian utilise /usr/share/hcw/backend/statics/. |
MEDIA_ROOT |
upload |
Repertoire de stockage des fichiers envoyes lorsque S3 n'est pas configure. Utilisez toujours un chemin absolu : l'API et le worker Celery ne sont pas lances depuis le meme repertoire de travail. |
Mode maintenance
Le mode maintenance fait repondre 503 a toutes les requetes HTTP sans toucher a la base de donnees ni a Redis, ce qui le rend utilisable meme si la base est indisponible.
| Variable | Defaut | Description |
|---|---|---|
MAINTENANCE |
False |
Mettre True pour activer le mode maintenance. |
MAINTENANCE_MESSAGE |
The service is temporarily unavailable for maintenance. Please try again later. |
Message renvoye aux clients. |
MAINTENANCE_RETRY_AFTER |
300 |
Valeur de l'en-tete Retry-After, en secondes. |
Base de donnees
PostgreSQL est obligatoire : le multi-tenancy repose sur les schemas PostgreSQL.
| Variable | Defaut | Description |
|---|---|---|
DATABASE_NAME |
(aucun) | Nom de la base. |
DATABASE_USER |
(aucun) | Utilisateur de la base. Il doit etre proprietaire de la base pour pouvoir creer les schemas des tenants. |
DATABASE_PASSWORD |
(aucun) | Mot de passe de l'utilisateur. |
DATABASE_HOST |
(aucun) | Nom d'hote ou adresse IP du serveur. |
DATABASE_PORT |
(aucun) | Port du serveur, generalement 5432. |
Redis
Redis sert de broker Celery, de cache et de couche de canaux pour les WebSockets.
| Variable | Defaut | Description |
|---|---|---|
REDIS_HOST |
127.0.0.1 |
Nom d'hote Redis. |
REDIS_PORT |
6379 |
Port Redis. |
Messagerie
| Variable | Defaut | Description |
|---|---|---|
EMAIL_HOST |
(aucun) | Nom d'hote du serveur SMTP. |
EMAIL_PORT |
25 |
Port SMTP. |
EMAIL_HOST_USER |
(aucun) | Identifiant SMTP, si l'authentification est requise. |
EMAIL_HOST_PASSWORD |
(aucun) | Mot de passe SMTP. |
EMAIL_USE_TLS |
(desactive) | Active STARTTLS, typiquement sur le port 587. |
EMAIL_USE_SSL |
(desactive) | Active TLS implicite, typiquement sur le port 465. Exclusif avec EMAIL_USE_TLS. |
DEFAULT_FROM_EMAIL |
(aucun) | Adresse expediteur utilisee pour tous les emails sortants. |
Options TLS/SSL
EMAIL_USE_TLS et EMAIL_USE_SSL sont actives par n'importe quelle valeur non vide, y compris False ou 0. Pour les desactiver, retirez completement la variable de la configuration.
Authentification
| Variable | Defaut | Description |
|---|---|---|
ACCESS_TOKEN_LIFETIME |
3600 |
Duree de vie du jeton JWT d'acces en minutes (le defaut represente donc 60 heures). Mettez 60 pour une duree de vie d'une heure. |
REFRESH_TOKEN_LIFETIME_DAYS |
1 |
Duree de vie du jeton de rafraichissement, en jours. Ces jetons sont renouveles a chaque utilisation. |
SSO et connexion par mot de passe
Les fournisseurs OpenID Connect et l'option « SSO uniquement » ne se configurent plus par variables d'environnement. Definissez-les depuis l'interface d'administration, voir Single Sign-On et Options avancees.
Stockage des fichiers (S3)
Lorsque S3 est configure, les fichiers envoyes (pieces jointes, logos, enregistrements) sont stockes sur un service compatible S3 plutot que sur le disque local.
| Variable | Defaut | Description |
|---|---|---|
S3_BUCKET_NAME |
(aucun) | Nom du bucket. |
S3_ENDPOINT_URL |
(aucun) | Endpoint du service, ex. https://s3.example.com pour MinIO ou Ceph. |
S3_ACCESS_KEY |
(aucun) | Cle d'acces. |
S3_SECRET_KEY |
(aucun) | Cle secrete. |
S3_REGION |
us-east-1 |
Region. |
S3_VERIFY |
(active) | Mettre exactement false pour ne pas verifier le certificat TLS (certificats auto-signes). |
S3_ADDRESSING_STYLE |
auto |
Style d'adressage : auto, path ou virtual. Les deploiements MinIO et Ceph dont le bucket n'est pas un sous-domaine DNS necessitent path. |
Tout ou rien
S3_BUCKET_NAME, S3_ENDPOINT_URL, S3_ACCESS_KEY et S3_SECRET_KEY doivent etre definies ensemble. Une configuration partielle interrompt le demarrage avec une erreur ImproperlyConfigured plutot que de basculer silencieusement sur le stockage local, ce qui rendrait illisibles par un processus les fichiers ecrits par un autre.
Enregistrement des appels
Les enregistrements sont deposes sur S3 par le serveur media. Par defaut ils reutilisent les reglages S3_* ci-dessus ; ne definissez les variables LIVEKIT_S3_* que pour les stocker sur un bucket ou un serveur different.
| Variable | Defaut | Description |
|---|---|---|
LIVEKIT_S3_BUCKET_NAME |
valeur de S3_BUCKET_NAME |
Bucket dedie aux enregistrements. |
LIVEKIT_S3_ENDPOINT_URL |
valeur de S3_ENDPOINT_URL |
Endpoint dedie aux enregistrements. |
LIVEKIT_S3_ACCESS_KEY |
valeur de S3_ACCESS_KEY |
Cle d'acces. |
LIVEKIT_S3_SECRET_KEY |
valeur de S3_SECRET_KEY |
Cle secrete. |
LIVEKIT_S3_REGION |
valeur de S3_REGION |
Region. |
RECORDING_CHECK_INITIAL_DELAY |
120 |
Secondes d'attente apres la fin de l'appel avant de chercher le fichier sur S3. |
RECORDING_CHECK_MAX_RETRIES |
4 |
Nombre de nouvelles tentatives apres la premiere verification. |
RECORDING_CHECK_RETRY_DELAY |
30 |
Secondes entre deux tentatives. |
L'enregistrement lui-meme s'active par tenant depuis l'interface d'administration (ENABLE_VIDEO_RECORDING).
Serveurs media
| Variable | Defaut | Description |
|---|---|---|
ROOM_SERVER_PIN_TTL |
86400 |
Duree, en secondes, pendant laquelle l'association salle / serveur media reste en cache. Doit depasser la duree du plus long appel possible, enregistrement compris. |
Les serveurs media eux-memes se declarent depuis l'interface d'administration, voir Serveurs media.
Transcription en direct
| Variable | Defaut | Description |
|---|---|---|
WHISPER_LIVE_URL |
ws://127.0.0.1:9090 |
URL WebSocket du serveur whisper-live. |
WHISPER_LIVE_API_KEY |
(vide) | Doit correspondre au --api_key passe au serveur whisper-live. Laisser vide pour desactiver l'authentification. |
La transcription s'active par tenant depuis l'interface d'administration (ENABLE_LIVE_TRANSCRIPTION).
Notifications push
| Variable | Defaut | Description |
|---|---|---|
WEBPUSH_VAPID_PUBLIC_KEY |
(aucun) | Cle publique VAPID pour le web push navigateur. |
WEBPUSH_VAPID_PRIVATE_KEY |
(aucun) | Cle privee VAPID correspondante. |
WEBPUSH_VAPID_CLAIMS_EMAIL |
mailto:admin@hcw-at-home.com |
Adresse de contact transmise au service de push, sous forme mailto:. |
GOOGLE_APPLICATION_CREDENTIALS |
(aucun) | Chemin du fichier JSON de compte de service Firebase, lu par le SDK Firebase. Necessaire aux notifications des applications mobiles natives (FCM). |
Antivirus (ClamAV)
Les fichiers envoyes ne sont analyses que si l'une de ces variables est definie. CLAMD_SOCKET a la priorite sur les variables TCP.
| Variable | Defaut | Description |
|---|---|---|
CLAMD_SOCKET |
(aucun) | Chemin de la socket Unix de clamd, ex. /var/run/clamav/clamd.ctl. |
CLAMD_TCP_ADDR |
127.0.0.1 |
Nom d'hote de clamd, en connexion TCP. |
CLAMD_TCP_SOCKET |
3310 |
Port TCP de clamd. |
Serveur FHIR
| Variable | Defaut | Description |
|---|---|---|
FHIR_SYSTEM_SCHEME |
https |
Schema utilise dans les URL Identifier.system derivees. |
FHIR_SYSTEM_PATH |
(vide) | Chemin optionnel ajoute apres le domaine du tenant, ex. /fhir. Doit commencer par /. |
FHIR_SYSTEM_BASE_URL |
(aucun) | Force une URL de base canonique unique pour tous les tenants, en contournant la derivation par tenant. |
FHIR_DEFAULT_COUNT |
20 |
Nombre de ressources par page de Bundle par defaut. |
FHIR_MAX_COUNT |
100 |
Borne superieure du parametre de recherche _count. |
FHIR_STRICT_SEARCH |
False |
Mettre True pour rejeter les parametres de recherche inconnus au lieu de les ignorer. |
FHIR_INCLUDE_NARRATIVE |
True |
Inclut la narration lisible text dans les ressources renvoyees. |
FHIR_BUNDLE_TOTAL_MODE |
accurate |
accurate renvoie le total exact dans les Bundles, none l'omet (moins couteux sur de gros volumes). |
Voir Integration FHIR R4 pour le detail de la derivation des URL.
Applications mobiles
| Variable | Defaut | Description |
|---|---|---|
MOBILE_ANDROID_PACKAGE |
com.healthcare.patient |
Nom du paquet Android utilise pour le lien profond vers l'application native. |
MOBILE_ANDROID_STORE_URL |
URL Google Play du paquet par defaut | Lien vers le store propose lorsque l'application n'est pas installee. |
MOBILE_IOS_STORE_URL |
(vide) | Lien App Store. Laisser vide pour masquer la banniere iOS. |
IABSIS_PUBLIC_KEY_B64 |
(cle Iabsis) | Cle publique Ed25519 en base64 servant a verifier la signature de l'instance. A ne modifier que si vous signez vos instances avec votre propre cle et distribuez une application native correspondante. |
Chaque tenant peut surcharger les valeurs MOBILE_* depuis l'interface d'administration.
Conteneurs frontend
Les images patient, praticien et administration sont des conteneurs Nginx qui relaient /api et /ws vers le backend.
| Variable | Concerne | Description |
|---|---|---|
BACKEND_URL |
patient, practitioner, admin |
URL interne de l'API, ex. http://api:8000. Substituee dans la configuration Nginx au demarrage du conteneur. |
TAG |
docker compose |
Tag des images a recuperer, ex. TAG=0.10.0 docker compose pull. Vaut latest par defaut. |
Variables obsoletes
backend/.env-dist liste encore quelques variables qui ne sont plus lues par le code. Elles ne sont conservees que pour la compatibilite avec les anciens fichiers de configuration et peuvent etre supprimees.
| Variable | Remplacement |
|---|---|
USERS_VISIBILITY |
Option USERS_VISIBILITY dans Options avancees |
OPENID_NAME, OPENID_CLIENT_ID, OPENID_SECRET, OPENID_CONFIGURATION_URL |
Configuration Single Sign-On dans l'interface d'administration |
DISABLE_PASSWORD_LOGIN |
Option DISABLE_PASSWORD_LOGIN dans Options avancees |
ENABLE_REGISTRATION |
Option ENABLE_REGISTRATION dans Options avancees |
ENCRYPTION_KEY |
Plus utilisee. Les cles de chiffrement de bout en bout sont gerees par utilisateur, voir Chiffrement de bout en bout |
Exemple minimal
# Django
DJANGOSECRET_KEY=change-me
DEBUG=False
ALLOWED_HOST=hcw.example.com
ALLOWED_HOSTS=patient.example.com,admin.example.com
CSRF_TRUSTED_ORIGINS=https://admin.example.com
STATIC_ROOT=/usr/share/hcw/backend/statics/
MEDIA_ROOT=/var/lib/hcw/uploads
DEFAULT_TIME_ZONE=Europe/Zurich
# Base de donnees
DATABASE_NAME=hcw
DATABASE_USER=hcw
DATABASE_PASSWORD=change-me
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
# Redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
# Messagerie
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_USE_TLS=1
EMAIL_HOST_USER=hcw@example.com
EMAIL_HOST_PASSWORD=change-me
DEFAULT_FROM_EMAIL=no-reply@example.com