# Variables lues par docker-compose.yml à la racine. # Le backend lancé hors conteneur (`make dev`) lit apps/backend/.env, pas ce fichier. POSTGRES_USER=enervision POSTGRES_PASSWORD=change_me POSTGRES_DB=enervision # 5432 est souvent déjà pris par une autre base du poste. POSTGRES_PORT=5433 # `basic` renvoie des statistiques d'usage à Timescale. TIMESCALEDB_TELEMETRY=off APP_ENV=local APP_DEBUG=false APP_LOG_LEVEL=INFO # L'API refuse de démarrer tant que cette valeur reste un exemple ou fait moins de # 32 caractères. Générer la vôtre : python -c "import secrets; print(secrets.token_urlsafe(48))" APP_SECRET_KEY=change_me APP_CORS_ORIGINS=http://localhost:4200 BACKEND_PORT=8000 FRONTEND_PORT=3000 # Mailpit capture les courriels du backend, rien ne sort vers l'extérieur. MAILPIT_SMTP_PORT=1025 MAILPIT_UI_PORT=8025 # API Mock EnerVision APP_MOCK_API_BASE_URL=https://api-mock.charlieandre.fr APP_MOCK_API_USERNAME=change_me APP_MOCK_API_PASSWORD=change_me APP_MOCK_API_TIMEOUT_SECONDS=10 # Airflow (webserver + scheduler, LocalExecutor). Base de métadonnées dédiée `airflow` dans le # même conteneur `db` (cf. db/init/120-airflow-database.sql), pas un conteneur de plus. AIRFLOW_PORT=8080 # Chiffre les connexions/variables stockées par Airflow. Générer la vôtre : # python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" AIRFLOW_FERNET_KEY=change_me # Clé Flask du webserver Airflow (signature de session), distincte de la précédente. Générer la # vôtre : python -c "import secrets; print(secrets.token_urlsafe(48))" AIRFLOW_WEBSERVER_SECRET_KEY=change_me AIRFLOW_ADMIN_USERNAME=admin # Compte Airflow créé au premier démarrage (service `airflow-init`), sans rapport avec les # comptes `app_user` d'EnerVision. AIRFLOW_ADMIN_PASSWORD=change_me AIRFLOW_ADMIN_EMAIL=admin@enervision.fr # `APP_SECRET_KEY` du backend, que le DAG `alertes` lance en sous-processus. Distincte de # celle de l'API : la détection ne signe aucun jeton, et Airflow exécute du code depuis son # interface (cf. ADR 0008). Générer la vôtre : # python -c "import secrets; print(secrets.token_urlsafe(48))" AIRFLOW_APP_SECRET_KEY=change_me # Stack complète derrière le reverse proxy (docker-compose.prod.yml). # PUBLIC_HOST alimente l'origine CORS, le lien de réinitialisation et le certificat. PUBLIC_HOST=enervision.local ACME_EMAIL= # Deux environnements sur la même machine (ADR 0009) : un dossier, un `.env` et un projet Compose # chacun. Le nom de projet préfixe volumes, réseau et conteneurs et l'emporte sur `name:`. # Vide sur un poste de développement : le projet reste `enervision`. COMPOSE_PROJECT_NAME= # Origine publique, avec le port si le proxy HTTPS n'écoute pas 443. Vide : https://PUBLIC_HOST. # Recette : PUBLIC_HOST=rec.enervision.local et PUBLIC_ORIGIN=https://rec.enervision.local:8443. PUBLIC_ORIGIN= # Ports publiés par le proxy. Vides : 80 et 443. Recette : PROXY_HTTPS_PORT=8443 et # PROXY_HTTP_PORT=127.0.0.1:8081, la redirection vers 443 n'ayant pas à être joignable de # l'extérieur. Décaler aussi POSTGRES_PORT, MAILPIT_UI_PORT et AIRFLOW_PORT (5434, 8026, 8082). PROXY_HTTP_PORT= PROXY_HTTPS_PORT= # Réglages mémoire de la stack déployée. Sans eux, timescaledb-tune réserve 25 % de la RAM de la # machine à chaque base au premier démarrage, et le webserver Airflow lance 4 workers gunicorn. TS_TUNE_MEMORY=2GB TS_TUNE_NUM_CPUS=2 AIRFLOW_WEBSERVER_WORKERS=2