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 ````