Variables d'environnement Veza
Référence complète des variables d'environnement utilisées par la plateforme Veza.
v0.9.1 : Migration JWT RS256 (JWT_PRIVATE_KEY_PATH, JWT_PUBLIC_KEY_PATH).
Voir aussi : .env.example, veza-backend-api/.env.template, veza-stream-server/.env.example.
Backend API (veza-backend-api)
Authentification JWT (v0.9.1 RS256)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
JWT_PRIVATE_KEY_PATH |
Chemin vers la clé privée RSA (signature) |
string |
Oui (prod) |
— |
/secrets/jwt-private.pem |
JWT_PUBLIC_KEY_PATH |
Chemin vers la clé publique RSA (vérification) |
string |
Oui (prod) |
— |
/secrets/jwt-public.pem |
JWT_SECRET |
Secret HS256 (déprécié, fallback dev uniquement) |
string |
Si pas RS256 |
— |
min 32 chars |
JWT_ISSUER |
Issuer claim (access/refresh tokens) |
string |
Non |
veza-api |
veza-api |
JWT_AUDIENCE |
Audience claim |
string |
Non |
veza-platform |
veza-platform |
JWT_ACCESS_TOKEN_DURATION |
Durée access token |
duration |
Non |
15m |
5m, 1h |
JWT_REFRESH_TOKEN_DURATION |
Durée refresh token |
duration |
Non |
30d |
7d, 14d |
Génération des clés RS256 :
scripts/generate-jwt-keys.sh
# ou manuellement :
openssl genrsa -out jwt-private.pem 2048
openssl rsa -in jwt-private.pem -pubout -out jwt-public.pem
Base de données
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
DATABASE_URL |
URL connexion PostgreSQL |
string |
Oui |
— |
postgres://veza:password@localhost:5432/veza?sslmode=disable |
DATABASE_READ_URL |
URL réplica lecture (optionnel) |
string |
Non |
— |
postgres://veza:password@replica:5432/veza |
Redis
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
REDIS_URL |
URL connexion Redis |
string |
Oui |
— |
redis://localhost:6379 |
REDIS_ENABLE |
Activer Redis |
bool |
Non |
true |
true, false |
CORS & Domaine
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
APP_DOMAIN |
Domaine applicatif |
string |
Non |
veza.fr |
veza.fr, app.veza.com |
CORS_ALLOWED_ORIGINS |
Origines CORS autorisées |
string |
Oui |
— |
http://veza.fr:5173 |
FRONTEND_URL |
URL frontend (OAuth, reset) |
string |
Non |
http://localhost:5173 |
https://app.veza.com |
Autres services
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
STREAM_SERVER_URL |
URL stream server |
string |
Non |
http://veza.fr:8082 |
http://stream:8082 |
STREAM_SERVER_INTERNAL_API_KEY |
Clé API interne transcode |
string |
Non |
— |
secret partagé |
CHAT_SERVER_URL |
URL chat (legacy) |
string |
Non |
http://veza.fr:8081 |
— |
RABBITMQ_URL |
URL RabbitMQ |
string |
Non |
— |
amqp://veza:password@localhost:5672/ |
Live Streaming (v0.10.6 F471)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
RTMP_CALLBACK_SECRET |
Secret partagé pour callbacks Nginx-RTMP (on_publish/publish_done) |
string |
Oui (prod) |
— |
secret partagé |
STREAM_HLS_BASE_URL |
Base URL des playlists HLS (stream_url dans live_streams) |
string |
Non |
http://localhost:18083/live |
https://stream.veza.app/live |
NGINX_RTMP_HOST |
Hôte RTMP affiché aux streamers (rtmp_url) |
string |
Non |
stream.veza.app |
localhost, stream.veza.app |
Nginx-RTMP : profils Docker live. Ports 1935 (RTMP), 18083 (HTTP HLS). Callbacks vers POST /api/v1/live/callback/publish et .../publish_done.
Elasticsearch (v0.10.2 F361-F365)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
ELASTICSEARCH_URL |
URL Elasticsearch |
string |
Non |
— |
http://localhost:9200 |
ELASTICSEARCH_INDEX |
Préfixe des indices |
string |
Non |
veza-platform |
veza-platform |
ELASTICSEARCH_AUTO_INDEX |
Réindexer au démarrage |
bool |
Non |
false |
true |
Note : Si ELASTICSEARCH_URL n'est pas défini, la recherche utilise PostgreSQL (fallback gracieux). Admin : POST /api/v1/admin/search/reindex pour réindexation manuelle.
Rate limiting (v0.9.2 TASK-SEC-003)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
RATE_LIMIT_IP_PER_HOUR |
Requêtes/heure par IP (non-auth) |
int |
Non |
100 (prod), 500 (dev) |
100 |
RATE_LIMIT_USER_PER_HOUR |
Requêtes/heure par utilisateur auth |
int |
Non |
1000 (prod), 2000 (dev) |
1000 |
Endpoint /metrics (v0.9.2 TASK-SEC-006)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
METRICS_BEARER_TOKEN |
Token Bearer pour accès Prometheus |
string |
Non |
— |
secret partagé |
METRICS_ALLOWED_IPS |
IPs autorisées (exact ou CIDR, CSV) |
string |
Non |
— |
10.0.0.0/8,127.0.0.1 |
METRICS_PUBLIC_IN_DEV |
Si true et non-prod, accès sans auth |
bool |
Non |
false |
true |
Note : Si ni METRICS_BEARER_TOKEN ni METRICS_ALLOWED_IPS n'est défini, l'accès à /metrics est refusé (403) en production.
Taille des payloads (v0.9.2 TASK-SEC-005)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
MAX_JSON_BODY_SIZE |
Taille max body JSON (bytes) |
int |
Non |
1048576 (1MB) |
2097152 (2MB) |
Upload audio : 500MB par défaut (UploadConfig.MaxAudioSize dans services.DefaultUploadConfig).
Headers HTTP de sécurité appliqués globalement via middleware.SecurityHeaders() (router.go) :
| Header |
Valeur |
Rôle |
| Strict-Transport-Security |
max-age=31536000; includeSubDomains; preload |
HSTS (prod) |
| X-Content-Type-Options |
nosniff |
Anti MIME sniffing |
| X-Frame-Options |
DENY (SAMEORIGIN pour Swagger) |
Anti clickjacking |
| X-XSS-Protection |
1; mode=block |
XSS legacy |
| Referrer-Policy |
strict-origin-when-cross-origin |
Referrer |
| Permissions-Policy |
geolocation=(), microphone=(), … |
Restriction features |
| Content-Security-Policy |
default-src 'none'; … |
CSP |
| X-Permitted-Cross-Domain-Policies |
none |
Flash/PDF |
| Cross-Origin-Embedder-Policy |
require-corp |
COEP |
| Cross-Origin-Opener-Policy |
same-origin |
COOP |
| Cross-Origin-Resource-Policy |
same-origin |
CORP |
Stream Server (veza-stream-server)
JWT (v0.9.1 RS256)
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
JWT_PUBLIC_KEY_PATH |
Chemin clé publique RSA (vérification) |
string |
Oui (prod) |
— |
/secrets/jwt-public.pem |
JWT_SECRET |
Secret HS256 (phase transition uniquement) |
string |
Si pas RS256 |
— |
min 32 chars |
JWT_EXPIRATION |
TTL tokens (secondes) |
int |
Non |
3600 |
300, 3600 |
Remarque : Le stream server valide les tokens émis par le backend. Il utilise la clé publique partagée (JWT_PUBLIC_KEY_PATH) pour RS256.
Variables communes (veza-common)
Services Rust utilisant veza-common (config_rust JwtConfig) :
| Variable |
Description |
Type |
Requis |
Valeur par défaut |
Exemple |
JWT_SECRET |
Secret JWT |
string |
Oui |
— |
min 32 chars (VEZA-SEC-001) |
JWT_ISSUER |
Issuer |
string |
Non |
veza-api |
veza-api |
JWT_AUDIENCE |
Audience |
string |
Non |
veza-platform |
veza-platform |
Validation (TASK-QA-009)
Valider les variables avant démarrage :
./scripts/validate-env.sh development # ou production, test
Intégré dans make doctor.
Checklist de démarrage
- Copier
.env.example vers .env (racine) et veza-backend-api/.env.template vers veza-backend-api/.env
- Pour RS256 : exécuter
scripts/generate-jwt-keys.sh et configurer JWT_PRIVATE_KEY_PATH, JWT_PUBLIC_KEY_PATH
- Configurer
DATABASE_URL, REDIS_URL, CORS_ALLOWED_ORIGINS
- Valider :
./scripts/validate-env.sh development
- En production : ne jamais commiter
.env ni les fichiers .pem