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
[email protected]
SMTP_PASSWORD=mot-de-passe-smtp
[email protected]