Variables d'environnement
Toutes les variables sont lues par AppSettings (backend/app/config.py, pydantic-settings), soit depuis l'environnement, soit depuis un fichier .env à la racine du dépôt. Les noms ne sont pas sensibles à la casse.
Sécurité / authentification
| Variable |
Défaut |
Description |
ADMIN_USERNAME |
admin |
Identifiant du compte administrateur créé au premier démarrage. |
ADMIN_EMAIL |
admin@wg.ui |
Email associé à ce compte. |
SECRET_KEY |
(généré automatiquement) |
Clé de signature des JWT. Obligatoire en production ; si absente, une clé aléatoire est générée et persistée dans DATA_DIR/secret_key. |
ACCESS_TOKEN_EXPIRE_MINUTES |
60 |
Durée de vie des tokens JWT (minutes). |
BCRYPT_ROUNDS |
12 |
Coût de hachage bcrypt des mots de passe. |
RATE_LIMIT_ENABLED |
true |
Active le rate-limiting par IP sur l'API. |
RATE_LIMIT_MAX_REQUESTS |
100 |
Nombre max de requêtes par IP sur /api/* par fenêtre glissante. |
RATE_LIMIT_WINDOW_SECONDS |
60 |
Durée de la fenêtre glissante (secondes). |
RATE_LIMIT_AUTH_MAX_REQUESTS |
5 |
Limite plus stricte sur /api/auth/login et /api/auth/token, pour freiner le brute-force. |
TRUSTED_PROXIES |
(vide) |
IP/CIDR des reverse-proxies de confiance, séparés par des virgules (ex. 172.16.0.0/12). Nécessaire pour que les en-têtes X-Forwarded-For/X-Forwarded-Proto soient pris en compte — voir l'encadré ci-dessous. |
TRUSTED_PROXIES derrière un reverse proxy
Sans cette variable renseignée, deux effets de bord apparaissent derrière un reverse proxy TLS :
- le cookie de session n'est pas marqué `Secure` (le proxy TLS n'est pas détecté) ;
- le rate-limiting regroupe **tous** les clients sur l'IP du proxy, ce qui peut bloquer tout le monde après quelques requêtes.
API / Application
| Variable |
Défaut |
Description |
LOG_LEVEL |
INFO |
Niveau de logs (DEBUG, INFO, WARNING…). |
APP_VERSION |
Development |
Version affichée par l'application. |
SWAGGER_ENABLED |
false |
Expose /api/docs (Swagger UI auto-hébergé) et /api/openapi.json. |
API_KEYS_ENABLED |
true |
Active la création de Personal Access Tokens (PAT) depuis le profil utilisateur. |
AUDIT_MAX_EVENTS |
10000 |
Nombre max d'événements conservés dans le journal d'audit (purge des plus anciens au-delà). |
AUDIT_RETENTION_DAYS |
90 |
Durée de rétention du journal d'audit, en jours. |
Base de données
| Variable |
Défaut |
Description |
DB_PATH |
sqlite+aiosqlite:////var/lib/wireguard-ui/wireguard_ui.db |
URL de connexion SQLAlchemy async. Accepte aussi un chemin brut, une URL sqlite:///, ou postgres:///postgresql:// (converties automatiquement vers le driver async asyncpg). |
DATA_DIR |
/var/lib/wireguard-ui |
Répertoire de données applicatives (DB par défaut, clé secrète générée). |
WireGuard
| Variable |
Défaut |
Description |
WIREGUARD_AUTOSTART |
true |
Démarre automatiquement le service WireGuard au lancement de l'application (voir lifespan). |
Email
| Variable |
Défaut |
Description |
MAIL_FROM |
no-reply@wg.ui |
Adresse expéditrice des emails de configuration. |
MAIL_NAME |
WireGuardUI |
Nom affiché comme expéditeur. |
Les autres réglages SMTP (serveur, port, identifiants, TLS/SSL) se configurent depuis l'interface d'administration (page SMTP), pas via l'environnement — voir services/smtp.py.
Réglages système (hôte Docker)
Ces sysctl ne sont pas des variables de l'application mais doivent être activés sur le conteneur pour que WireGuard fonctionne :
| Sysctl |
Rôle |
net.ipv4.ip_forward=1 |
Nécessaire pour relayer (router) le trafic des pairs vers l'interface principale. |
net.ipv4.conf.all.src_valid_mark=1 |
Nécessaire pour la validation des sources après marquage de paquets par WireGuard. |