Skip to content

Déploiement

Ce guide couvre le déploiement de l'API d'Anonymisation, qui inclut un modèle d'apprentissage automatique pour détecter et anonymiser les informations personnellement identifiables (PII) dans les documents et les tableaux.

Exigences Système

Exigences Matérielles

GPU Requis

En raison de l'intégration du modèle GLiNER, une machine avec support GPU est nécessaire pour des performances optimales. Le modèle est affiné sur les noms et villes béninois pour une détection précise des PII.

Exigences Minimales: - GPU: NVIDIA GPU avec support CUDA (recommandé: 8 Go+ VRAM) - RAM: 16 Go minimum, 32 Go recommandés - Stockage: 50 Go+ d'espace libre - CPU: Processeur multi-cœurs (8+ cœurs recommandés)

Exigences Logicielles

  • Docker et Docker Compose
  • Pilotes CUDA (pour le support GPU)
  • Système d'exploitation basé sur Linux (Ubuntu 20.04+ recommandé)

Prérequis

Avant de déployer l'application, assurez-vous d'avoir configuré les services suivants:

1. Stockage Compatible S3

L'application nécessite un stockage compatible S3 pour la gestion des actifs. Configurez l'un des services suivants:

  • AWS S3: Bucket Amazon S3 standard
  • MinIO: Stockage auto-hébergé compatible S3
  • Autres services compatibles S3: DigitalOcean Spaces, Linode Object Storage, etc.

Configuration S3 requise:

S3_ENDPOINT=votre-endpoint-s3
S3_ACCESS_KEY=votre-cle-d-acces
S3_SECRET_KEY=votre-cle-secrete
S3_BUCKET_NAME=nom-de-votre-bucket
S3_REGION=votre-region

2. Identifiants SMTP

Pour les notifications par email et la gestion des utilisateurs, configurez les paramètres SMTP:

SMTP_HOST=votre-hote-smtp
SMTP_PORT=587
SMTP_USERNAME=votre-nom-utilisateur-smtp
SMTP_PASSWORD=votre-mot-de-passe-smtp
SMTP_USE_TLS=true
SMTP_FROM_EMAIL=noreply@votredomaine.com

Déploiement Docker

L'application est livrée avec un Dockerfile préconfiguré optimisé pour l'utilisation du GPU et du modèle GLiNER.

1. Cloner et Construire

# Cloner le dépôt
git clone <url-du-depot>
cd anonymisation-api

# Construire l'image Docker
docker build -t anonymisation-api:latest .

2. Configuration de l'Environnement

Créez un fichier .env avec les variables d'environnement requises:

# Configuration de la Base de Données
DATABASE_URL=postgresql://user:password@db:5432/anonymisation_db

# Configuration du Stockage S3
S3_ENDPOINT=https://votre-endpoint-s3.com
S3_ACCESS_KEY=votre-cle-d-acces
S3_SECRET_KEY=votre-cle-secrete
S3_BUCKET_NAME=anonymisation-assets
S3_REGION=us-east-1

# Configuration SMTP
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=votre-email@gmail.com
SMTP_PASSWORD=votre-mot-de-passe-d-application
SMTP_USE_TLS=true
SMTP_FROM_EMAIL=noreply@votredomaine.com

# Configuration de l'Application
SECRET_KEY=votre-cle-super-secrete-ici
API_HOST=0.0.0.0
API_PORT=8000
ENVIRONMENT=production

# Configuration GPU
CUDA_VISIBLE_DEVICES=0

3. Déploiement avec Docker Compose

Utilisez le docker-compose.yml fourni pour un déploiement complet:

services:
  postgres:
    container_name: postgres
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    ports:
      - "${POSTGRES_PORT}:5432"
    volumes:
      - ${POSTGRES_DATA}:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
      interval: 1s
      timeout: 5s
      retries: 10
    networks:
      - anonymization-network

  minio:
    container_name: minio
    image: quay.io/minio/minio
    restart: always
    command: server /data --console-address ":9001"
    ports:
      - "${MINIO_PORT1}:9000"
      - "${MINIO_PORT2}:9001"
    volumes:
      - ${MINIO_DATA}:/data
    environment:
      MINIO_ROOT_USER: ${MINIO_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD}
    networks:
      - anonymization-network

  backend:
    container_name: bj-anonymization-back
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    ports:
      - "${API_PORT}:8001"
    depends_on:
      postgres:
        condition: service_healthy
      minio:
        condition: service_started
    env_file:
      - .env
    command: ["make", "migrate-run"]
    networks:
      - anonymization-network

  frontend:
    container_name: bj-anonymization-front
    build:
      context: ../bj-anonymization-front
      dockerfile: Dockerfile
    restart: always
    ports:
      - "${FRONT_PORT}:3100"
    depends_on:
      - backend
    env_file:
      - .env
    networks:
      - anonymization-network

  docs:
    container_name: bj-anonymization-docs
    build:
      context: .
      dockerfile: Dockerfile.docs
    restart: always
    ports:
      - "${DOC_PORT}:8002"
    volumes:
      - ./docs:/app/docs
      - ./mkdocs.yml:/app/mkdocs.yml
    networks:
      - anonymization-network


networks:
  anonymization-network:
    driver: bridge
    name: anonymization-network

4. Démarrer les Services

# Démarrer tous les services
docker-compose up -d

# Vérifier l'état des services
docker-compose ps

# Voir les journaux
docker-compose logs -f api

Considérations pour le Déploiement en Production

1. Configuration du Reverse Proxy

Configurez Nginx comme reverse proxy pour la production:

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Augmenter les délais d'attente pour les téléchargements de fichiers volumineux
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
    }

    # Augmenter la taille maximale du corps pour les téléchargements de fichiers
    client_max_body_size 100M;
}

2. Configuration SSL/TLS

Activez HTTPS en utilisant Let's Encrypt ou vos certificats SSL:

# Utilisation de Certbot pour Let's Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.com

3. Sauvegarde de la Base de Données

Configurez des sauvegardes automatisées PostgreSQL:

```bash

!/bin/bash

backup-db.sh

DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/chemin/vers/sauvegardes" DB_NAME="anonymisation_db"

docker exec postgres_container pg_dump -U postgres $DB_NAME > $BACKUP_DIR/backup_$DATE.sql

Ne conserver que les 7 derniers jours de sauvegardes

find $BACKUP_DIR -name "backup_*.sql" -mtime +7 -delete ````