Aller au contenu

Configuration

Toute la configuration runtime est injectée via des variables d'environnement chargées depuis backend.env et .env.

Référence complète en anglais

La référence complète de toutes les variables est disponible en anglais : Variables d'environnement →


Variables essentielles (backend.env)

Base de données

Variable Type Obligatoire Description
DATABASE_URL string Oui Chaîne de connexion PostgreSQL : postgresql://repod:<mot-de-passe>@db:5432/repod. db/engine.py lève une RuntimeError au démarrage si absente. Toutes les données relationnelles (utilisateurs, index des manifestes, inventaire, jobs d'installation, recherche de paquets, ssh_known_hosts) y sont stockées via SQLAlchemy Core + Alembic.

Format de dépôt

Variable Type Défaut Description
REPO_FORMAT string apt Lu une seule fois au démarrage par format_router.py. Une valeur parmi apt, rpm, apk, both (apt+rpm), ou all (apt+rpm+apk).

Sécurité et authentification

Variable Type Obligatoire Description
JWT_SECRET_KEY string Oui Clé de signature HMAC-SHA256 pour les tokens JWT. Générer avec openssl rand -hex 32. L'application refuse de démarrer si vide en production.
JWT_EXPIRE_MINUTES integer Non Durée de vie des tokens en minutes (défaut : 60).
SETTINGS_ENCRYPTION_KEY string Recommandé Clé dédiée pour chiffrer les secrets de settings.json (mot de passe SMTP/LDAP, client_secret OIDC). Générer avec openssl rand -hex 32. À défaut, repli sur JWT_SECRET_KEY (avertissement au démarrage).
WEBHOOK_SECRET string Oui Secret HMAC pour /webhooks/github et /webhooks/kev. Générer avec openssl rand -hex 32. L'application refuse de démarrer en production si vide ou égal à la valeur par défaut.
ADMIN_USERNAME string Non Nom d'utilisateur d'un admin à pré-provisionner au démarrage. N'a d'effet qu'avec un ADMIN_PASSWORD_HASH valide. Si absent, aucun admin n'est créé : utiliser l'assistant de configuration (POST /api/v1/setup).
ADMIN_PASSWORD_HASH string Non Hash bcrypt ($2a$/$2b$/$2y$) du mot de passe admin. Chaque $ doit être doublé en $$ dans le fichier. Si vide ou invalide, aucun admin n'est créé et l'assistant de configuration reste disponible.
SETUP_TOKEN string Non Si défini, POST /api/v1/setup exige un header X-Setup-Token correspondant — ferme la fenêtre de course avant la création du premier admin.
CORS_ORIGINS string Non Origines CORS autorisées (ex. https://repod.example.com).
TRUSTED_PROXIES string Non IPs de confiance pour X-Forwarded-For (défaut : 127.0.0.1,172.16.0.0/12).

Comportement runtime

Variable Valeurs Description
ENV development / production production active le mode strict (refuse JWT_SECRET_KEY faible, désactive Swagger).
APP_VERSION string Version retournée par /health.

Variables frontend (.env, build-time)

Build-time uniquement

Les variables REACT_APP_* sont intégrées dans le bundle JavaScript au moment du docker build. Toute modification nécessite une reconstruction de l'image.

Variable Défaut Description
REACT_APP_API_URL (vide) Doit rester vide en déploiement normal — le frontend utilise alors des URLs relatives (/api/v1/...) via son reverse proxy Nginx. Définir une URL absolue casse l'accès cross-host.
REACT_APP_REPO_URL http://localhost URL du serveur de dépôts APT/APK affichée aux utilisateurs.
REACT_APP_RPM_REPO_URL http://localhost:8080 URL du serveur de dépôts RPM affichée aux utilisateurs.
BIND_HOST 0.0.0.0 Interface d'écoute des conteneurs. Mettre 127.0.0.1 en production derrière un reverse proxy.
POSTGRES_PASSWORD repod_dev_password Mot de passe de l'utilisateur PostgreSQL repod — doit correspondre au mot de passe dans DATABASE_URL (backend.env). À changer en production.

Exemple backend.env de production

backend.env
# ── Base de données ───────────────────────────────────────────────────────────
DATABASE_URL=postgresql://repod:CHANGE_MOI@db:5432/repod

# ── Format de dépôt ───────────────────────────────────────────────────────────
REPO_FORMAT=all

# ── Sécurité ──────────────────────────────────────────────────────────────────
JWT_SECRET_KEY=a3f8c2e1d4b7a9f0e2c5d8b1a4f7e0c3d6b9a2f5e8c1d4b7a0f3e6c9d2b5a8f1
JWT_EXPIRE_MINUTES=60
SETTINGS_ENCRYPTION_KEY=7f1e4a9c2b8d5f0a3e6c9b2d5f8a1c4e7b0d3f6a9c2e5b8d1f4a7c0e3b6d9f2a
WEBHOOK_SECRET=9d2f5b8e1a4c7f0d3b6e9c2a5f8d1b4e7c0a3f6d9b2e5c8f1a4d7b0e3c6f9a2d

# Optionnel : pré-provisionner le premier admin (sinon, utiliser l'assistant
# de configuration POST /api/v1/setup au premier accès — recommandé)
#ADMIN_USERNAME=admin
#ADMIN_PASSWORD_HASH=$$2b$$12$$exampleHashHere...

# Optionnel : protéger POST /api/v1/setup avant la création du premier admin
#SETUP_TOKEN=4e7a0d3f6b9c2e5a8d1f4b7e0c3a6d9f2b5e8c1a4d7f0b3e6c9a2d5f8b1e4c7a

# ── Environnement ─────────────────────────────────────────────────────────────
ENV=production
APP_VERSION=v1.2.0

# ── Reverse proxy ─────────────────────────────────────────────────────────────
TRUSTED_PROXIES=127.0.0.1
CORS_ORIGINS=https://repod.example.com

# ── LDAP (optionnel) ──────────────────────────────────────────────────────────
LDAP_URL=ldaps://dc.example.com:636
LDAP_BIND_DN=CN=repod-svc,OU=ServiceAccounts,DC=example,DC=com
LDAP_BIND_PASSWORD=mot-de-passe-service
LDAP_BASE_DN=OU=Users,DC=example,DC=com
LDAP_USER_ATTR=sAMAccountName

# ── SMTP (optionnel) ──────────────────────────────────────────────────────────
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=repod@example.com
SMTP_PASSWORD=mot-de-passe-smtp
SMTP_FROM=repod@example.com