Skip to content

Configuration ​

Tout se règle dans le fichier .env à la racine du dépôt, créé par scripts/setup.sh. Chaque variable est aussi commentée dans .env.example. Le reste — rôles, catégories, messages, délais, webhooks… — se règle depuis le dashboard et vit en base de données.

Après une modification

docker compose up -d suffit : seul le conteneur concerné redémarre.

Discord et adresse publique ​

VariableRôle
DISCORD_TOKENToken du bot (portail développeur → Bot → Reset Token)
DISCORD_CLIENT_IDID de l'application (General Information)
DISCORD_CLIENT_SECRETSecret OAuth2 (OAuth2 → Client Secret)
PUBLIC_HOSTDomaine du dashboard, sans https:// (tickets.example.com)
PUBLIC_URLAdresse publique complète, en https://, sans barre finale
DISCORD_CALLBACK_URLFacultatif : par défaut PUBLIC_URL + /api/auth/discord/callback, l'adresse à enregistrer dans le portail Discord

HTTPS et conteneurs ​

VariableRôle
COMPOSE_FILEFichiers compose utilisés, séparés par :. Base : docker-compose.yml ; ajoute docker-compose.caddy.yml (Caddy inclus, Let's Encrypt) ou docker-compose.traefik.yml (ton Traefik), et docker-compose.backup.yml (sauvegardes)
ACME_EMAILE-mail pour Let's Encrypt (Caddy)
TICKETBOT_VERSIONVersion de l'image : latest, ou une version précise (v3.0.4) pour ne mettre à jour que quand tu le décides
BIND_ADDRESS / WEB_PORTSans Caddy ni Traefik : adresse et port publiés sur la machine (127.0.0.1:3000 par défaut, à mettre derrière ton propre proxy)
TRUST_PROXY_HOPSNombre de proxys devant l'application (1 ; 2 derrière Cloudflare), pour connaître la vraie adresse IP des visiteurs
TRUSTED_PROXY_HOSTNom du proxy dont l'en-tête X-Forwarded-For est cru (posé tout seul par les fichiers Caddy et Traefik). Vide : l'en-tête n'est cru que venant d'une adresse locale ou privée
TZFuseau horaire (heure des sauvegardes)

Secrets ​

Générés par setup.sh (openssl rand -hex 32 à la main). Garde une copie du .env hors du serveur : sans ENCRYPTION_KEY, les transcripts et les secrets 2FA sont illisibles ; sans BACKUP_KEY, les sauvegardes aussi.

VariableRôle
DB_ROOT_PASSWORDMot de passe administrateur de MariaDB — jamais transmis au bot
DB_PASSWORDMot de passe du compte botuser, limité aux bases du bot
REDIS_PASSWORDMot de passe de Redis
SESSION_SECRETClé des sessions du dashboard (32 caractères au moins)
ENCRYPTION_KEYClé AES-256 des secrets 2FA et des transcripts (rotation)
BACKUP_KEYClé de chiffrement des sauvegardes
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_CONTACTNotifications push du dashboard (facultatif)

Instance ​

VariableRôle
OWNER_IDSComptes Discord co-propriétaires de l'instance, en plus du propriétaire de l'application (IDs séparés par des virgules)
ALLOWED_GUILDSSi renseigné, seuls ces serveurs Discord sont acceptés : le bot quitte aussitôt tout autre serveur
PRIVACY_URLTa propre page de confidentialité (par défaut, la page intégrée /confidentialite)
CONTACT_EMAILE-mail de contact affiché sur la page de confidentialité
TRANSCRIPT_RETENTION_DAYSDurée de conservation des transcripts, en jours (vide : indéfiniment)
BACKUP_TIME / BACKUP_KEEP_DAYSHeure de la sauvegarde nocturne (03:00) et durée de conservation des archives (30 jours)

Base de données ​

Par défaut db, 3306, botuser, ticketbot_global : les noms du compose. À ne changer que pour une base externe : DB_HOST, DB_PORT, DB_USER, DB_NAME.

Réglages rares : config.json ​

Quelques réglages n'ont pas de variable. Mets-les dans un config.json (modèle : config.example.json) et monte-le dans le conteneur (lignes commentées de docker-compose.yml). Les variables d'environnement l'emportent toujours sur lui.

CléDéfautRôle
retention.loginLogsDays90Conservation des connexions au dashboard (adresses IP)
retention.errorLogsDays30Conservation du journal d'erreurs
retention.auditLogDays365Conservation du journal de chaque serveur
retention.sessionsDays7Conservation du suivi des sessions
retention.instanceAuditDays730Conservation du journal de l'instance
rateLimits.apiPerMinute200Requêtes par minute et par adresse sur l'API
dashboard.previousEncryptionKeys[]Anciennes clés acceptées en lecture pendant une rotation
database.tenantConnectionLimit5Connexions MariaDB par serveur Discord (à augmenter pour un serveur très actif)
webEnabledtruefalse : bot seul, sans dashboard