Skip to content

Variables d'Environnement Complètes

Référence exhaustive de toutes les variables .env.

Comment générer des secrets

bash
# 16 chars hex
openssl rand -hex 16

# 32 chars hex
openssl rand -hex 32

# 64 chars hex
openssl rand -hex 64

PostgreSQL (rgz-db)

VariableDéfautObligatoireDescriptionExemple
POSTGRES_USERrgz_adminUtilisateur administrateur DBrgz_admin
POSTGRES_PASSWORD-Mot de passe admin (32 chars)7f9e8d2c1a4b5c6d7e8f9a0b1c2d3e4f
POSTGRES_DBrgz_nocNom base de donnéesrgz_noc
POSTGRES_INITDB_ARGS-Arguments psql au démarrage-c max_connections=200

Redis (rgz-redis)

VariableDéfautObligatoireDescriptionExemple
REDIS_PASSWORD-Mot de passe Redis (32 chars)a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

FreeRADIUS (rgz-radius)

VariableDéfautObligatoireDescriptionExemple
RADIUS_SECRET-Secret partagé NAS (32 chars)b1c2d3e4f5g6h7i8j9k0l1m2n3o4p5q6
RADIUS_IP127.0.0.1IP bind (ne pas changer)0.0.0.0
RADIUS_PORT_AUTH1812Port authentification1812
RADIUS_PORT_ACCT1813Port accounting1813
RADIUS_PORT_COA3799Port Change-of-Authorization3799

Elasticsearch & Kibana (ELK Stack)

VariableDéfautObligatoireDescriptionExemple
ELASTIC_PASSWORD-Mot de passe elasticsearch (32 chars)c1d2e3f4g5h6i7j8k9l0m1n2o3p4q5r6
ELASTIC_VERSION8.14.0Version Elasticsearch8.14.0
KIBANA_PASSWORD-Mot de passe Kibana (même que ELASTIC)c1d2e3f4g5h6i7j8k9l0m1n2o3p4q5r6
KIBANA_URLhttp://rgz-kibana:5601URL Kibana internehttp://rgz-kibana:5601
ES_JAVA_OPTS-Xms2g -Xmx2gOptions JVM ES (min=max)-Xms2g -Xmx2g
LOGSTASH_PIPELINE_WORKERS4Threads Logstash4

Grafana (rgz-grafana)

VariableDéfautObligatoireDescriptionExemple
GRAFANA_ADMIN_USERadminUser admin Grafanaadmin
GRAFANA_ADMIN_PASSWORD-Mot de passe admin (16+ chars)MySecurePass1234
GRAFANA_SECRET_KEY-Clé secrète (32 chars)d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6
GRAFANA_URLhttps://grafana-rgz.duckdns.orgURL publique Grafanahttps://grafana-rgz.duckdns.org
GRAFANA_DEFAULT_THEMEdarkThème par défautdark

JWT Authentication (rgz-api)

VariableDéfautObligatoireDescriptionExemple
JWT_SECRET_KEY-Clé secrète JWT (64 chars)e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x0y1z2a3b4c5d6e7f8g9h0i1j2k3l4
JWT_ALGORITHMRS256Algorithme JWTRS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES15Expiration token accès15
JWT_REFRESH_TOKEN_EXPIRE_DAYS7Expiration token refresh7

KKiaPay (Paiements mobiles)

VariableDéfautObligatoireDescriptionExemple
KKIAPAY_PUBLIC_KEY-Clé publique KKiaPaypk_live_xxxxxxxxxxxx
KKIAPAY_SECRET-Clé secrète KKiaPaysk_live_xxxxxxxxxxxx
KKIAPAY_SANDBOXfalseUtiliser environment sandboxfalse (true en dev)
KKIAPAY_WEBHOOK_URLhttps://api-rgz.duckdns.org/webhooks/kkiapayURL webhook callbackhttps://api-rgz.duckdns.org/webhooks/kkiapay

Letexto (SMS)

VariableDéfautObligatoireDescriptionExemple
LETEXTO_API_KEY-Clé API Letextoabc123def456ghi789
LETEXTO_BASE_URLhttps://api.letexto.comURL API Letextohttps://api.letexto.com
LETEXTO_SENDER_IDRGZÉmetteur SMS (max 11 chars)RGZ

SMTP (Email)

VariableDéfautObligatoireDescriptionExemple
SMTP_HOSTsmtp.gmail.comServeur SMTPsmtp.gmail.com
SMTP_PORT587Port SMTP (TLS)587
SMTP_USER-Email utilisateurnoc@rgz.bj
SMTP_PASSWORD-Mot de passe SMTP ou App Passwordxxxxxxxxxxxxxxxx
SMTP_FROMnoc@rgz.bjAdresse expéditeurnoc@rgz.bj
SMTP_TLStrueUtiliser STARTTLStrue

DuckDNS & Traefik

VariableDéfautObligatoireDescriptionExemple
DUCKDNS_TOKEN-Token DuckDNSxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DUCKDNS_DOMAINSapi-rgz,admin-rgz,access-rgz,grafana-rgz,registre-rgz,docs-rgzDomaines séparés virguleapi-rgz,admin-rgz,access-rgz
TRAEFIK_DASHBOARD_USERadminUser dashboard Traefikadmin
TRAEFIK_DASHBOARD_PASSWORD-Mot de passe Traefik (16+ chars)TraefikPass123
LETSENCRYPT_EMAILadmin@rgz.bjEmail Let's Encryptadmin@rgz.bj

API (rgz-api)

VariableDéfautObligatoireDescriptionExemple
API_HOST0.0.0.0IP bind API0.0.0.0
API_PORT8000Port API FastAPI8000
API_WORKERS4Nombre workers Gunicorn4
API_TIMEOUT120Timeout requête (secondes)120
DEBUGfalseMode debug (jamais true en prod)false
ENVIRONMENTproductionEnvironnementproduction
LOG_LEVELinfoNiveau logsinfo
CORS_ORIGINShttps://admin-rgz.duckdns.orgOrigines CORS (virgule séparées)https://admin-rgz.duckdns.org

Celery (Scheduler & Tasks)

VariableDéfautObligatoireDescriptionExemple
CELERY_BROKER_URLredis://:password@rgz-redis:6379/0URL broker Redisredis://:mypassword@rgz-redis:6379/0
CELERY_RESULT_BACKENDredis://:password@rgz-redis:6379/1URL result backend Redisredis://:mypassword@rgz-redis:6379/1
CELERY_WORKERS4Nombre workers Celery4
CELERY_LOGLEVELinfoNiveau logs Celeryinfo

WhatsApp Business API

VariableDéfautObligatoireDescriptionExemple
WHATSAPP_API_TOKEN-Token API WhatsApp BusinessEAAxxxxxxxxxxxxxxxxxxxxxx
WHATSAPP_PHONE_NUMBER_ID-ID numéro téléphone WhatsApp1234567890123
WHATSAPP_API_VERSIONv19.0Version API Metav19.0

Services de monitoring

VariableDéfautObligatoireDescriptionExemple
PROMETHEUS_SCRAPE_INTERVAL15sIntervalle scrape Prometheus15s
PROMETHEUS_EVALUATION_INTERVAL15sIntervalle évaluation alertes15s
SNMP_COMMUNITYpublicCommunity SNMP (v2c)public
SNMP_PORT161Port SNMP161
NETFLOW_PORT2055Port NetFlow v52055

Configuration avancée

Pooling connexions DB

bash
SQLALCHEMY_POOL_SIZE=20
SQLALCHEMY_POOL_RECYCLE=3600
SQLALCHEMY_POOL_PRE_PING=true

Rate limiting

bash
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_MINUTE=100
RATE_LIMIT_AUTH_REQUESTS_PER_MINUTE=5

Logging & observabilité

bash
SENTRY_DSN=
OTEL_ENABLED=false
OTEL_EXPORTER_OTLP_ENDPOINT=

Fichier .env minimal (validé)

bash
# PostgreSQL
POSTGRES_USER=rgz_admin
POSTGRES_PASSWORD=$(openssl rand -hex 32)
POSTGRES_DB=rgz_noc

# Redis
REDIS_PASSWORD=$(openssl rand -hex 32)

# FreeRADIUS
RADIUS_SECRET=$(openssl rand -hex 32)

# ELK
ELASTIC_PASSWORD=$(openssl rand -hex 32)
KIBANA_PASSWORD=$ELASTIC_PASSWORD

# Grafana
GRAFANA_ADMIN_PASSWORD=$(openssl rand -hex 16)
GRAFANA_SECRET_KEY=$(openssl rand -hex 32)

# JWT
JWT_SECRET_KEY=$(openssl rand -hex 64)

# KKiaPay
KKIAPAY_PUBLIC_KEY=<copier depuis dashboard>
KKIAPAY_SECRET=<copier depuis dashboard>

# Letexto
LETEXTO_API_KEY=<copier depuis dashboard>

# SMTP
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=<votre email>
SMTP_PASSWORD=<App Password>

# DuckDNS + Traefik
DUCKDNS_TOKEN=<token>
TRAEFIK_DASHBOARD_PASSWORD=$(openssl rand -hex 16)

# API
API_WORKERS=4
DEBUG=false
ENVIRONMENT=production

Vérification .env

bash
# Vérifier syntaxe
bash -n <(cat .env)

# Vérifier variables obligatoires
for var in POSTGRES_PASSWORD REDIS_PASSWORD RADIUS_SECRET ELASTIC_PASSWORD GRAFANA_ADMIN_PASSWORD JWT_SECRET_KEY KKIAPAY_PUBLIC_KEY KKIAPAY_SECRET LETEXTO_API_KEY SMTP_USER SMTP_PASSWORD DUCKDNS_TOKEN TRAEFIK_DASHBOARD_PASSWORD; do
  if ! grep -q "^$var=" .env; then
    echo "❌ Missing: $var"
  else
    echo "✅ $var found"
  fi
done

Migration depuis ancien .env

bash
# Ajouter nouvelles variables
cat .env.example >> .env

# Supprimer doublons
sort -u .env > .env.tmp && mv .env.tmp .env

# Valider
./scripts/ops/init.sh --validate-env

Sécurité

⚠️ JAMAIS:

  • Committer .env en git
  • Partager .env en chat/email
  • Utiliser secrets par défaut en production
  • Mettre secrets en comments

TOUJOURS:

  • Générer secrets avec openssl rand -hex
  • Utiliser .env local + .env.example sans secrets
  • Changer secrets tous les 90 jours
  • Utiliser HashiCorp Vault ou AWS Secrets Manager

Support

bash
# Tester variable
echo $POSTGRES_PASSWORD

# Vérifier variable chargée dans container
docker exec rgz-api env | grep POSTGRES_PASSWORD

# Debug connexion
docker exec rgz-api python -c "
import os
from sqlalchemy import create_engine
engine = create_engine(f\"postgresql://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@rgz-db:5432/{os.getenv('POSTGRES_DB')}\")
print('✅ DB Connection OK')
"

PROJET MOSAÏQUE — 81 outils, 22 conteneurs, 500+ revendeurs WiFi Zone