Référence de configuration du Hub
Référence complète de toutes les variables d'environnement du Hub Watchflare : secrets obligatoires, base de données, ports, mode TLS, sécurité des cookies et fenêtre d'horodatage gRPC.
Le Hub se configure entièrement par variables d’environnement. Lors d’un déploiement avec Docker Compose, elles sont lues depuis le fichier .env dans le même répertoire que docker-compose.yml. Lorsque vous exécutez le binaire directement, placez un fichier .env à côté du binaire ou exportez les variables dans le shell.
Secrets obligatoires
| Variable | Longueur min. | Obligatoire | Description |
|---|---|---|---|
POSTGRES_PASSWORD | Aucune | Oui | Mot de passe de l’instance TimescaleDB. Aucune longueur minimale n’est imposée, mais utilisez une valeur aléatoire solide. |
JWT_SECRET | 32 caractères | Oui | Signe les cookies de session utilisateur et chiffre les secrets TOTP pour le 2FA. Le Hub s’arrête au démarrage s’il manque ou s’il est trop court. |
NOTIFICATION_ENCRYPTION_KEY | 32 caractères | Pour les notifications | Chiffre les identifiants SMTP et les URL des canaux de notification (Discord, Slack, etc.) stockés en base. Le Hub démarre sans, mais le stockage des notifications sera indisponible. Le Hub s’arrête si elle est définie mais trop courte. |
Générez les trois avec :
POSTGRES_PASSWORD=$(openssl rand -base64 32)
JWT_SECRET=$(openssl rand -base64 32)
NOTIFICATION_ENCRYPTION_KEY=$(openssl rand -base64 32) Danger
Gardez ces valeurs secrètes. Sauvegardez-les hors des volumes Docker. Changer JWT_SECRET invalide toutes les sessions utilisateur actives et désactive le 2FA pour les utilisateurs qui l’avaient activé (leurs secrets TOTP ne peuvent plus être déchiffrés, ils doivent donc s’enrôler à nouveau). Changer NOTIFICATION_ENCRYPTION_KEY rend illisibles les identifiants e-mail enregistrés, et vous devrez les resaisir.
Base de données
| Variable | Défaut | Description |
|---|---|---|
POSTGRES_HOST | localhost | Nom d’hôte de l’instance PostgreSQL. Docker Compose le remplace par postgres (le nom du service). |
POSTGRES_PORT | 5432 | Port PostgreSQL |
POSTGRES_USER | watchflare | Utilisateur de la base |
POSTGRES_PASSWORD | watchflare_dev | Mot de passe de la base. Le binaire retombe sur watchflare_dev si la variable n’est pas définie : surchargez-la toujours en production. Docker Compose l’impose comme obligatoire via :?. |
POSTGRES_DB | watchflare | Nom de la base |
POSTGRES_SSLMODE | disable | Mode SSL PostgreSQL. disable est sûr lorsque les deux conteneurs partagent un réseau Docker. |
Remarque
Lorsque vous utilisez le fichier Docker Compose de Déployer avec Docker, POSTGRES_HOST est déjà défini à postgres dans le fichier Compose et n’a pas besoin de figurer dans votre .env.
Ports
| Variable | Défaut | Description |
|---|---|---|
HUB_PORT | 8080 | Docker uniquement. Port externe exposé sur l’hôte pour le serveur HTTP et le tableau de bord. Le port interne du conteneur est toujours 8080. |
GRPC_PORT | 50051 | Port des connexions gRPC des agents. Doit être joignable depuis tous les hôtes surveillés. |
Le port HTTP est fixé à 8080 à l’intérieur du conteneur. HUB_PORT ne fait que mapper le port externe. Par exemple, définissez HUB_PORT=80 pour servir le tableau de bord sur le port 80.
TLS
Le Hub utilise TLS pour toutes les communications gRPC avec les agents. Deux modes sont disponibles.
| Variable | Défaut | Description |
|---|---|---|
TLS_MODE | auto | auto : le Hub génère sa propre CA et son certificat serveur au premier démarrage. custom : fournissez vos propres fichiers de certificats (voir ci-dessous). |
TLS_PKI_DIR | /var/lib/watchflare/pki | Répertoire où sont stockés les certificats générés automatiquement. Persisté via le volume Docker pki_data. |
Certificats personnalisés (TLS_MODE=custom)
| Variable | Défaut | Description |
|---|---|---|
TLS_CERT_FILE | Aucun | Chemin du certificat serveur (PEM) |
TLS_KEY_FILE | Aucun | Chemin de la clé privée serveur (PEM) |
TLS_CA_FILE | Aucun | Chemin du certificat CA (PEM) distribué aux agents à l’enrôlement |
Attention
Lorsque vous utilisez TLS_MODE=custom, le certificat CA de TLS_CA_FILE est envoyé aux agents à l’enrôlement et épinglé sur chaque agent. Si vous effectuez une rotation de la CA, tous les agents enrôlés doivent être réenrôlés.
Voir certificats TLS pour un guide complet du mode custom.
Sécurité des cookies
Le Hub pose automatiquement le flag Secure sur le cookie de session JWT, d’après le contexte de la requête. Vous n’avez besoin de ces variables que si la détection automatique ne fonctionne pas pour votre configuration.
| Variable | Défaut | Description |
|---|---|---|
COOKIE_SECURE | (auto) | Force le flag Secure à on ou off. Accepte true ou false. Omettez-la pour utiliser la détection automatique (recommandé). |
COOKIE_DOMAIN | (vide) | Définissez-la à votre domaine lorsque vous servez le tableau de bord via un reverse proxy avec un nom d’hôte personnalisé (par ex. watchflare.example.com). |
TRUSTED_PROXIES | 127.0.0.1,::1 | Liste d’adresses IP séparées par des virgules, autorisées à poser X-Forwarded-Proto. Ajoutez l’IP de votre reverse proxy s’il s’exécute sur un hôte distinct. |
Règles de détection automatique (appliquées lorsque COOKIE_SECURE n’est pas défini) :
- Connexion HTTPS directe →
Secure: true X-Forwarded-Proto: httpsdepuis une IP de proxy de confiance →Secure: true- HTTP simple, sans proxy de confiance →
Secure: false
Attention
Si vous exposez le tableau de bord en HTTPS via un reverse proxy, assurez-vous que TRUSTED_PROXIES inclut l’IP du proxy. Sinon Secure vaudra false, et les navigateurs rejetteront le cookie en HTTPS.
Sécurité gRPC
| Variable | Défaut | Description |
|---|---|---|
GRPC_TIMESTAMP_WINDOW | 300 | Décalage d’horloge acceptable en secondes pour les timestamps HMAC des agents (±fenêtre). Les requêtes hors de cette fenêtre sont rejetées. La valeur par défaut est ±5 minutes. |
Augmentez cette valeur si les agents échouent fréquemment avec des avertissements de désynchronisation d’horloge et que vous ne pouvez pas synchroniser les horloges avec NTP. La baisser resserre la fenêtre d’attaque par rejeu.
Environnement
| Variable | Défaut | Description |
|---|---|---|
ENV | development | Définissez-la à production sur les instances déployées. Passe Gin en mode release (supprime la sortie de débogage). Le fichier Docker Compose la définit automatiquement. |
CORS_ORIGINS | http://localhost:5173 | Origines CORS autorisées, séparées par des virgules. Nécessaire uniquement lorsque le binaire Hub s’exécute séparément du frontend pendant le développement. Non requis pour Docker ou les installations binaires où le frontend est embarqué. |
Référence .env complète
# ── Required secrets ────────────────────────────────────────────
POSTGRES_PASSWORD= # required, generate with openssl rand -base64 32
JWT_SECRET= # required, min 32 characters
NOTIFICATION_ENCRYPTION_KEY= # optional, min 32 characters if set
# ── Database ─────────────────────────────────────────────────────
# POSTGRES_HOST=localhost # default: localhost (Compose sets it to 'postgres')
# POSTGRES_PORT=5432 # default: 5432
# POSTGRES_USER=watchflare # default: watchflare
# POSTGRES_DB=watchflare # default: watchflare
# POSTGRES_SSLMODE=disable # default: disable
# ── Ports ────────────────────────────────────────────────────────
# HUB_PORT=8080 # default: 8080 (Docker only)
# GRPC_PORT=50051 # default: 50051
# ── TLS ──────────────────────────────────────────────────────────
# TLS_MODE=auto # default: auto
# TLS_PKI_DIR=/var/lib/watchflare/pki
# Custom certs (TLS_MODE=custom only):
# TLS_CERT_FILE=/etc/watchflare/tls/cert.pem
# TLS_KEY_FILE=/etc/watchflare/tls/key.pem
# TLS_CA_FILE=/etc/watchflare/tls/ca.pem
# ── Cookie security ──────────────────────────────────────────────
# COOKIE_DOMAIN=watchflare.example.com
# TRUSTED_PROXIES=127.0.0.1,::1
# COOKIE_SECURE= # omit for auto-detection
# ── gRPC security ────────────────────────────────────────────────
# GRPC_TIMESTAMP_WINDOW=300 # default: 300s (±5 minutes)
# ── Environment ──────────────────────────────────────────────────
# ENV=production Étapes suivantes
- Reverse proxy : placez Traefik, Caddy ou Nginx devant le Hub pour le HTTPS
- Configuration HTTPS : configurez les cookies sécurisés après avoir activé le HTTPS
- Certificats TLS : apportez votre propre CA et certificat serveur
- Notifications e-mail : configurez SMTP pour l’envoi des alertes
- Canaux de notification : envoyez les alertes vers Discord, Slack, Telegram, Matrix, Ntfy, Gotify, SMTP, et 20+ autres via Shoutrrr