EcoData Platform 🌍

Plateforme de collecte de données pour le calcul du bilan carbone.

📋 Description

EcoData Platform est une application web full-stack permettant aux entreprises, partenaires et particuliers de dĂ©poser des fichiers CSV/Excel contenant des donnĂ©es pour le calcul du bilan carbone. L’équipe interne peut ensuite consulter, tĂ©lĂ©charger et gĂ©rer ces fichiers via une interface intuitive.

đŸ—ïž Architecture

┌─────────────────┐      ┌──────────────────┐      ┌─────────────────┐
│                 │      │                  │      │                 │
│   Streamlit     │─────▶│   FastAPI        │─────▶│   PostgreSQL    │
│   Frontend      │      │   Backend        │      │   Database      │
│   (Port 8501)   │      │   (Port 8000)    │      │   (Port 5432)   │
│                 │      │                  │      │                 │
└─────────────────┘      └──────────────────┘      └─────────────────┘
                                  │
                                  ▌
                         ┌──────────────────┐
                         │  File Storage    │
                         │  (uploads/)      │
                         └──────────────────┘

đŸ› ïž Stack Technique

  • Backend: Python FastAPI 0.104.1
  • Frontend: Streamlit 1.28.2
  • Base de donnĂ©es: PostgreSQL 15
  • ORM: SQLAlchemy 2.0.23
  • Containerisation: Docker & Docker Compose
  • Orchestration: Kubernetes
  • CI/CD: GitHub Actions

📩 Structure du Projet

ecodata-platform/
├── backend/
│   ├── main.py              # API REST FastAPI
│   ├── models.py            # Modùles SQLAlchemy
│   ├── database.py          # Configuration DB
│   ├── schemas.py           # SchĂ©mas Pydantic
│   ├── requirements.txt     # DĂ©pendances backend
│   └── Dockerfile          # Image Docker backend
├── frontend/
│   ├── app.py              # Application Streamlit
│   ├── requirements.txt    # DĂ©pendances frontend
│   └── Dockerfile          # Image Docker frontend
├── k8s/
│   ├── namespace.yaml
│   ├── backend-deployment.yaml
│   ├── frontend-deployment.yaml
│   ├── postgres-statefulset.yaml
│   └── secrets-and-pvc.yaml
├── .github/
│   └── workflows/
│       └── ci-cd.yml       # Pipeline CI/CD
├── docker-compose.yml      # Orchestration locale
└── README.md

🚀 Installation et Lancement

Prérequis

  • Python 3.11+
  • PostgreSQL 15+
  • Docker & Docker Compose (optionnel)
  • Kubernetes (pour dĂ©ploiement en production)

1. Installation Locale

Configuration PostgreSQL

# Créer la base de données et l'utilisateur
sudo -u postgres psql
CREATE DATABASE ecodata_db;
CREATE USER ecodata_user WITH PASSWORD 'ecodata_password';
GRANT ALL PRIVILEGES ON DATABASE ecodata_db TO ecodata_user;
\q

Backend

cd ecodata-platform/backend
 
# Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# ou
venv\Scripts\activate  # Windows
 
# Installer les dépendances
pip install -r requirements.txt
 
# Lancer le backend
python main.py
# ou
uvicorn main:app --reload

Le backend sera accessible sur http://localhost:8000

Frontend

cd ecodata-platform/frontend
 
# Installer les dépendances
pip install -r requirements.txt
 
# Lancer le frontend
streamlit run app.py

Le frontend sera accessible sur http://localhost:8501

2. Déploiement avec Docker Compose

cd ecodata-platform
 
# Construire et lancer tous les services
docker-compose up -d
 
# Voir les logs
docker-compose logs -f
 
# ArrĂȘter les services
docker-compose down

Services disponibles :

3. Déploiement sur Kubernetes

cd ecodata-platform/k8s
 
# Créer le namespace
kubectl apply -f namespace.yaml
 
# Créer les secrets et PVC
kubectl apply -f secrets-and-pvc.yaml
 
# Déployer PostgreSQL
kubectl apply -f postgres-statefulset.yaml
 
# Déployer le backend
kubectl apply -f backend-deployment.yaml
 
# Déployer le frontend
kubectl apply -f frontend-deployment.yaml
 
# Vérifier les déploiements
kubectl get pods -n ecodata-platform
kubectl get services -n ecodata-platform

📡 API Endpoints

Backend API (FastAPI)

  • GET / - Page d’accueil de l’API
  • GET /health - VĂ©rification de santĂ©
  • POST /api/upload - Upload de fichier CSV/Excel
    • Form data: file, user_type, user_name
  • GET /api/files - Liste des fichiers
    • Query params: user_type (optionnel), skip, limit
  • GET /api/files/{id} - DĂ©tails d’un fichier
  • DELETE /api/files/{id} - Supprimer un fichier
  • GET /api/stats - Statistiques globales

Documentation interactive : http://localhost:8000/docs

🎯 FonctionnalitĂ©s

Pour les Utilisateurs

  1. Upload de fichiers

    • Support CSV, Excel (.xlsx, .xls)
    • Types d’utilisateurs : mĂ©tier, partenaire, particulier
    • Aperçu des donnĂ©es avant upload
    • MĂ©tadonnĂ©es automatiques (lignes, colonnes)
  2. Dashboard

    • Statistiques globales
    • RĂ©partition par type d’utilisateur
    • Visualisations graphiques
  3. Gestion des fichiers

    • Liste filtrable par type
    • DĂ©tails de chaque fichier
    • Suppression sĂ©curisĂ©e
  4. Statistiques avancées

    • Évolution des uploads
    • Top fichiers volumineux
    • Analyses temporelles

🔒 SĂ©curitĂ©

  • Validation des types de fichiers
  • Sanitisation des noms de fichiers
  • Gestion sĂ©curisĂ©e des mots de passe (secrets K8s)
  • CORS configurĂ© pour le frontend
  • Isolation des containers

đŸ§Ș Tests

# Backend tests
cd backend
pytest tests/
 
# Lint
flake8 .

📝 Variables d’Environnement

Backend

  • DATABASE_URL: URL de connexion PostgreSQL
    • Format: postgresql://user:password@host:port/database

Frontend

  • API_URL: URL de l’API backend
    • DĂ©faut: http://localhost:8000

🚩 CI/CD

Le pipeline GitHub Actions effectue :

  1. Tests : Lint et tests unitaires
  2. Build : Construction des images Docker
  3. Push : Publication sur GitHub Container Registry
  4. Deploy : Déploiement automatique (à configurer)

đŸ‘„ Contributeurs

  • Projet final DevOps - ESIEE Paris 2025

📄 Licence

© 2025 ESIEE Paris - Projet Académique

🆘 Support

Pour toute question ou problĂšme :

  1. Vérifier les logs : docker-compose logs ou kubectl logs
  2. Consulter la documentation API : /docs
  3. Vérifier la connexion PostgreSQL

🔄 Mises à jour futures

  • Tests unitaires complets
  • Authentication et autorisation
  • Export des donnĂ©es
  • Notifications email
  • Analyses avancĂ©es de bilan carbone
  • Interface d’administration