Aller au contenu principal

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​


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