Installation Docker
Déploiement via Docker Compose.
Prérequis
- Docker 24+
- Docker Compose 2.20+
- Credentials Enedis DataHub
# Vérifier les versions
docker --version
docker compose version
Installation
Étape 1 : Cloner le dépôt
git clone https://github.com/MyElectricalData/myelectricaldata_new.git
cd myelectricaldata_new
Étape 2 : Configurer l'environnement
# Copier le fichier exemple
cp apps/api/.env.example apps/api/.env.docker
# Éditer la configuration
vim apps/api/.env.docker
Configuration minimale requise :
# Mode serveur
SERVER_MODE=true
# Base de données
DATABASE_URL=postgresql+asyncpg://myelectricaldata:your-password@postgres:5432/myelectricaldata
# Cache
REDIS_URL=redis://valkey:6379/0
# Enedis (REQUIS)
ENEDIS_CLIENT_ID=your-enedis-client-id
ENEDIS_CLIENT_SECRET=your-enedis-client-secret
ENEDIS_ENVIRONMENT=production
# JWT (générer avec: openssl rand -hex 32)
SECRET_KEY=your-super-secret-key-minimum-32-characters
# Administration
ADMIN_EMAILS=admin@example.com
Étape 3 : Démarrer les services
PostgreSQL et Valkey
docker-compose.server.yml ne démarre que le backend et le frontend : PostgreSQL et Valkey doivent être fournis à part, et DATABASE_URL / REDIS_URL pointer vers eux. Le frontend transmet les appels /api au backend (API_PROXY_URL).
# Démarrer en arrière-plan
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker up -d
# Vérifier le statut
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker ps
Étape 4 : Appliquer les migrations
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic upgrade head
Étape 5 : Accéder à l'application
- Frontend : http://localhost:8000
- API Docs : http://localhost:8081/docs
- pgAdmin : http://localhost:5050 (optionnel)
Services déployés
┌────────────────────────────────────────────────────────┐
│ Docker Compose │
├────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Frontend │────▶│ Backend │────▶│PostgreSQL│ │
│ │ :8000 │ │ :8081 │ │ :5432 │ │
│ └──────────┘ └────┬─────┘ └──────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Valkey │ │ pgAdmin │ │
│ │ :6379 │ │ :5050 │ │
│ └──────────┘ └──────────┘ │
│ │
└────────────────────────────────────────────────────────┘
Commandes utiles
Gestion des services
# Démarrer
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker up -d
# Arrêter
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker down
# Redémarrer
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker restart
# Voir les logs
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker logs -f
# Logs d'un service spécifique
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker logs -f backend
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker logs -f frontend
Base de données
# Accès shell PostgreSQL (serveur externe, hôte de DATABASE_URL)
psql -h <hote-postgres> -U myelectricaldata myelectricaldata
# Appliquer les migrations
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic upgrade head
# Rollback dernière migration
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic downgrade -1
# Créer une nouvelle migration
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic revision --autogenerate -m "Description"
# Backup (serveur PostgreSQL externe)
pg_dump -h <hote-postgres> -U myelectricaldata myelectricaldata > backup.sql
# Restore
psql -h <hote-postgres> -U myelectricaldata myelectricaldata < backup.sql
Maintenance
# Mettre à jour
git pull
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker pull
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker up -d
# Nettoyer les ressources inutilisées
docker system prune -f
Configuration avancée
Variables d'environnement complètes
# Mode
SERVER_MODE=true
# Base de données
DATABASE_URL=postgresql+asyncpg://myelectricaldata:password@postgres:5432/myelectricaldata
# Cache
REDIS_URL=redis://valkey:6379/0
# Enedis
ENEDIS_CLIENT_ID=xxx
ENEDIS_CLIENT_SECRET=xxx
ENEDIS_ENVIRONMENT=production
ENEDIS_REDIRECT_URI=http://localhost:8081/oauth/callback
# RTE (optionnel)
RTE_CLIENT_ID=xxx
RTE_CLIENT_SECRET=xxx
# JWT
SECRET_KEY=xxx
ACCESS_TOKEN_EXPIRE_DAYS=30
# Administration
ADMIN_EMAILS=admin@example.com,admin2@example.com
# URLs
FRONTEND_URL=http://localhost:8000
BACKEND_URL=http://localhost:8081
# Logging
LOG_LEVEL=INFO
# Rate limiting
RATE_LIMIT_PER_SECOND=5
DAILY_QUOTA=10000
Personnaliser les ports
Modifier docker-compose.yml :
services:
frontend:
ports:
- "3000:80" # Au lieu de 8000
backend:
ports:
- "8080:8000" # Au lieu de 8081
Ajouter un reverse proxy (Caddy)
# docker-compose.override.yml
services:
caddy:
image: caddy:2-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- frontend
- backend
volumes:
caddy_data:
# Caddyfile
myelectricaldata.example.com {
reverse_proxy frontend:80
handle /api/* {
reverse_proxy backend:8000
}
handle /docs* {
reverse_proxy backend:8000
}
}
Dépannage
Le backend ne démarre pas
# Vérifier les logs
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker logs backend
# Problèmes courants :
# - DATABASE_URL incorrect
# - REDIS_URL incorrect
# - SECRET_KEY manquant
# - ENEDIS_CLIENT_ID/SECRET manquants
Erreur de connexion à PostgreSQL
# PostgreSQL est externe : tester la connexion depuis l'hôte de DATABASE_URL
pg_isready -h <hote-postgres> -p 5432
# Erreurs de connexion vues par le backend
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker logs backend
Erreur de connexion à Valkey
# Vérifier que Valkey est démarré
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker ps valkey
# Tester la connexion
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec valkey redis-cli ping
Migrations échouent
# Vérifier l'état actuel
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic current
# Voir l'historique
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic history
# Forcer le stamp (si base existante)
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic stamp head
Mise à jour
# Arrêter les services
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker down
# Récupérer les mises à jour
git pull
# Reconstruire et démarrer
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker up -d --build
# Appliquer les migrations
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker exec backend alembic upgrade head
Désinstallation
# Arrêter et supprimer les conteneurs
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker down
# Supprimer aussi les volumes (ATTENTION: perte de données)
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker down -v
# Supprimer les images
docker compose -f docker-compose.server.yml --env-file apps/api/.env.docker down --rmi all