Aller au contenu principal

Configuration

Guide complet des variables d'environnement de l'API MyTelevision.

Fichier .env

Le fichier .env contient toutes les configurations de l'application. L'application valide les variables au démarrage avec Joi. Si une variable obligatoire manque, l'application ne démarrera pas.

cp .env.example .env

Variables obligatoires

VariableDescriptionExemple
DATABASE_URLURL de connexion PostgreSQLpostgresql://user:pass@localhost:5432/mytv
JWT_SECRETSecret JWT (min 32 caractères)votre-secret-jwt-securise-32-chars
JWT_REFRESH_SECRETSecret pour les refresh tokensvotre-refresh-secret-32-chars
STREAMING_SIGNING_SECRETSecret de signature streaming (min 32 caractères)votre-streaming-secret-32-chars

Variables par catégorie

Application

NODE_ENV=development
PORT=3052
API_PREFIX=api
API_VERSION=v2
Ports par environnement
  • Production : PORT=3050
  • Staging : PORT=3051
  • Développement : PORT=3052

Base de données (PostgreSQL)

DATABASE_URL=postgresql://mytv:mytv_password@localhost:5432/mytv_dev?schema=public
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10

Redis

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=mytv_redis_password
REDIS_DB=0

JWT et authentification

JWT_SECRET=votre-secret-jwt-minimum-32-caracteres-securise
JWT_EXPIRATION=15m
JWT_REFRESH_SECRET=votre-refresh-secret-minimum-32-caracteres
JWT_REFRESH_EXPIRATION=7d

Streaming

STREAMING_SIGNING_SECRET=votre-secret-streaming-32-caracteres
STREAMING_TOKEN_EXPIRES_IN=24h
STREAMING_TOKEN_MAX_USES=5

Stockage (Cloudflare R2)

R2_ACCOUNT_ID=your-account-id
R2_ACCESS_KEY_ID=your-access-key
R2_SECRET_ACCESS_KEY=your-secret-key
R2_BUCKET_NAME=mytv-media
R2_PUBLIC_URL=https://media.mytelevision.app

Firebase (authentification sociale)

FIREBASE_PROJECT_ID=your-project-id
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
FIREBASE_CLIENT_EMAIL=firebase-adminsdk@your-project.iam.gserviceaccount.com

TMDb API

TMDB_API_KEY=your-tmdb-api-key
TMDB_BASE_URL=https://api.themoviedb.org/3
TMDB_IMAGE_BASE_URL=https://image.tmdb.org/t/p

CORS

CORS_ORIGINS=https://app.mytelevision.app,https://admin.mytelevision.app
TRUST_PROXY=true

Configuration par environnement

VariableDéveloppementStagingProduction
NODE_ENVdevelopmentstagingproduction
PORT305230513050
LOG_LEVELdebuginfowarn
RATE_LIMITElevé (permissif)MoyenStrict
TRUST_PROXYfalsetruetrue

Variables requises par profil Docker

Variabledevstagingprod
JWT_SECRETdéfautrequisrequis
JWT_REFRESH_SECRETdéfautrequisrequis
STREAMING_SIGNING_SECRETdéfautrequisrequis
CORS_ORIGINSdéfautrequisrequis
TRUST_PROXYfalsetruetrue

URLs des environnements

EnvironnementURL APISwagger
Productionhttps://api.mytelevision.apphttps://api.mytelevision.app/api/docs
Staginghttps://staging-api.mytelevision.apphttps://staging-api.mytelevision.app/api/docs
Développementhttps://dev-api.mytelevision.apphttps://dev-api.mytelevision.app/api/docs

Exemple de fichier .env complet

# ============================================
# Application
# ============================================
NODE_ENV=development
PORT=3052
API_PREFIX=api
API_VERSION=v2

# ============================================
# Base de données (PostgreSQL)
# ============================================
DATABASE_URL=postgresql://mytv:mytv_password@localhost:5432/mytv_dev?schema=public
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10

# ============================================
# Redis
# ============================================
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=mytv_redis_password
REDIS_DB=0

# ============================================
# JWT & Authentification
# ============================================
JWT_SECRET=votre-secret-jwt-minimum-32-caracteres-securise
JWT_EXPIRATION=15m
JWT_REFRESH_SECRET=votre-refresh-secret-minimum-32-caracteres
JWT_REFRESH_EXPIRATION=7d

# ============================================
# Streaming
# ============================================
STREAMING_SIGNING_SECRET=votre-secret-streaming-32-caracteres
STREAMING_TOKEN_EXPIRES_IN=24h
STREAMING_TOKEN_MAX_USES=5

# ============================================
# Stockage (Cloudflare R2)
# ============================================
# R2_ACCOUNT_ID=your-account-id
# R2_ACCESS_KEY_ID=your-access-key
# R2_SECRET_ACCESS_KEY=your-secret-key
# R2_BUCKET_NAME=mytv-media
# R2_PUBLIC_URL=https://media.mytelevision.app

# ============================================
# Firebase (authentification sociale)
# ============================================
# FIREBASE_PROJECT_ID=your-project-id
# FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
# FIREBASE_CLIENT_EMAIL=firebase-adminsdk@your-project.iam.gserviceaccount.com

# ============================================
# TMDb API (auto-fill films/séries)
# ============================================
# TMDB_API_KEY=your-tmdb-api-key
# TMDB_BASE_URL=https://api.themoviedb.org/3
# TMDB_IMAGE_BASE_URL=https://image.tmdb.org/t/p

# ============================================
# CORS
# ============================================
# CORS_ORIGINS=https://app.mytelevision.app,https://admin.mytelevision.app
# TRUST_PROXY=false

Validation au démarrage

L'application utilise Joi pour valider toutes les variables d'environnement au démarrage. Si une variable obligatoire est manquante ou incorrecte, le serveur affiche un message d'erreur explicite et refuse de démarrer.

Génération de secrets sécurisés

Pour générer des secrets JWT et streaming de 32 caractères minimum :

# Via Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

# Via OpenSSL
openssl rand -hex 32

Prochaines étapes