#
Guide de Déploiement MSPR
#
Aperçu
Ce guide fournit des instructions complètes pour déployer l'application MSPR (Surveillance des Pandémies) sur les trois clusters cibles : États-Unis, France et Suisse.
#
Table des Matières
Prérequis Démarrage Rapide Déploiements Spécifiques par Cluster Déploiement en Production Surveillance et Maintenance Dépannage
#
Prérequis
#
Exigences Système
- Docker : Version 20.10 ou supérieure
- Docker Compose : Version 2.0 ou supérieure
- Node.js : Version 20 ou supérieure (pour le développement local)
- Python : Version 3.11 ou supérieure (pour les processus ETL)
- PostgreSQL : Version 16 ou supérieure
- Git : Pour la gestion du code source
#
Exigences d'Infrastructure
- CPU : Minimum 4 cœurs, recommandé 8 cœurs
- Mémoire : Minimum 8GB RAM, recommandé 16GB
- Stockage : Minimum 100GB SSD, recommandé 500GB
- Réseau : Connexion internet stable avec support HTTPS
#
Exigences d'Accès
- Accès administrateur aux serveurs cibles
- Identifiants de base de données et chaînes de connexion
- Certificats SSL/TLS pour le déploiement en production
- Accès au pipeline CI/CD (GitHub Actions)
#
Démarrage Rapide
#
1. Cloner le Dépôt
git clone https://github.com/your-org/mspr.git
cd mspr
#
2. Configuration de l'Environnement
# Copier le modèle d'environnement
cp .env.example .env
# Éditer les variables d'environnement
nano .env
#
3. Générer les Certificats SSL (Développement)
# Générer des certificats auto-signés pour le développement
./security/certificates/generate-certs.sh \
--domain localhost \
--cluster us \
--environment development
#
4. Chargement Automatique des Données
Note importante : Le système utilise maintenant un processus ETL externe simplifié pour une meilleure fiabilité et facilité de maintenance.
# Option 1: Déploiement complet automatique avec données (RECOMMANDÉ)
./deploy-with-data.sh
# Option 2: Déploiement manuel étape par étape
# Démarrer PostgreSQL d'abord
docker-compose -f infrastructure/docker/docker-compose.yml up -d postgres
# Attendre que PostgreSQL soit prêt
sleep 10
# Exécuter l'ETL externe pour charger les données
./run-etl.sh
# Démarrer tous les autres services
docker-compose -f infrastructure/docker/docker-compose.yml up -d
#
Processus ETL Externe
L'ETL utilise maintenant un script externe avec uv
pour la gestion des environnements Python :
# Le script run-etl.sh effectue automatiquement :
# 1. Création d'un environnement virtuel Python avec uv
# 2. Installation des dépendances depuis requirements.txt
# 3. Exécution séquentielle des scripts Python :
# - etl/fetch.py : Téléchargement des données
# - etl/main.py : Traitement et nettoyage
# - etl/postgres.py : Insertion en base de données
#
5. Vérification du Chargement des Données
# Vérifier que les données ont été chargées
docker exec mspr-postgres psql -U mspr -d mspr -c "
SELECT 'COVID-19' as dataset, COUNT(*) as records FROM covid_data
UNION ALL
SELECT 'MPOX' as dataset, COUNT(*) as records FROM mpox_data;
"
# Résultat attendu:
# dataset | records
# ----------+---------
# COVID-19 | 68400
# MPOX | 15822
#
6. Vérifier le Déploiement
# Vérifier la santé de l'API
curl http://localhost:3001/health
# Vérifier le frontend
curl http://localhost:3000/
# Voir les logs
docker-compose -f infrastructure/docker/docker-compose.yml logs -f
#
Cluster-Specific Deployments
#
United States Cluster
#
Configuration
# Copy US-specific environment
cp .env.us .env
# Key features enabled:
# - API Technical (full data access)
# - Data visualization
# - ETL processing
# - High-performance optimization
#
Deployment
# Deploy US cluster
./infrastructure/scripts/deploy.sh \
--cluster us \
--environment production \
--verbose
# Verify US-specific features
curl -H "Authorization: Bearer $API_TOKEN" \
http://localhost:3002/api/technical/raw-data
#
Performance Tuning
# US cluster performance settings
HIGH_VOLUME_MODE: true
PERFORMANCE_OPTIMIZATION: true
MAX_CONNECTIONS: 200
WORKER_PROCESSES: 4
CACHE_TTL: 3600
#
France Cluster
#
GDPR Compliance Setup
# Copy France-specific environment
cp .env.france .env
# Enable GDPR features
export GDPR_COMPLIANCE=true
export DATA_RETENTION_DAYS=90
export ENCRYPT_PERSONAL_DATA=true
export CLUSTER_LANGUAGES=fr
#
Deployment
# Deploy France cluster with GDPR compliance
./infrastructure/scripts/deploy.sh \
--cluster france \
--environment production \
--verbose
# Verify GDPR endpoints and pages
curl http://localhost:3000/mentions-legales
curl http://localhost:3000/politique-confidentialite
curl http://localhost:3000/politique-cookies
#
GDPR Configuration et Fonctionnalités
# France cluster GDPR settings
GDPR_COMPLIANCE: true
DATA_RETENTION_DAYS: 90
ENABLE_CONSENT_MANAGEMENT: true
ENABLE_DATA_PORTABILITY: true
ENABLE_RIGHT_TO_DELETION: true
ANONYMIZE_IP: true
COOKIE_CONSENT_REQUIRED: true
CLUSTER_LANGUAGES: fr
#
Pages RGPD Implémentées
- Mentions Légales (
/mentions-legales
) : Informations légales complètes - Politique de Confidentialité (
/politique-confidentialite
) : Traitement des données personnelles - Politique des Cookies (
/politique-cookies
) : Gestion des cookies et traceurs - Bannière de Cookies : Consentement utilisateur avec persistance
- Composant de Conformité RGPD : Badges et liens de conformité
#
Fonctionnalités RGPD
- Gestion du consentement cookies avec localStorage
- Liens vers DPO (Délégué à la Protection des Données)
- Informations sur les droits des utilisateurs
- Politique de rétention des données (90 jours)
- Anonymisation des adresses IP
#
Switzerland Cluster
#
Multilingual Setup
# Copy Switzerland-specific environment
cp .env.switzerland .env
# Configure multilingual support
export CLUSTER_LANGUAGES=fr,de,it
export DEFAULT_LANGUAGE=fr
export AUTO_DETECT_LANGUAGE=true
#
Deployment
# Deploy Switzerland cluster (minimal configuration)
./infrastructure/scripts/deploy.sh \
--cluster switzerland \
--environment production \
--verbose
# Verify multilingual support
curl http://localhost:3000/?lang=fr
curl http://localhost:3000/?lang=de
curl http://localhost:3000/?lang=it
# Test language switching
curl -H "Accept-Language: de" http://localhost:3000/
curl -H "Accept-Language: it" http://localhost:3000/
#
Configuration Multilingue
# Switzerland cluster multilingual settings
CLUSTER_FEATURES: "" # No advanced features
CLUSTER_LANGUAGES: fr,de,it
DEFAULT_LANGUAGE: fr
AUTO_DETECT_LANGUAGE: true
ENABLE_API_TECHNICAL: false
ENABLE_DATAVIZ: false
ENABLE_ETL: false
ENABLE_REDIS: false
#
Système de Traduction
- Langues supportées : Français, Allemand, Italien
- Détection automatique : Basée sur les paramètres du cluster et du navigateur
- Sélecteur de langue : Interface utilisateur adaptative
- Traductions complètes : Navigation, données, interface utilisateur
- Persistance : Choix de langue sauvegardé en localStorage
#
Fonctionnalités Multilingues
- Middleware Next.js pour la gestion des locales
- Provider de traduction React Context
- Composants de sélection de langue (dropdown, boutons, compact)
- Configuration cluster-spécifique des langues disponibles
- Fallback automatique vers la langue par défaut
#
Production Deployment
#
1. Pre-Deployment Checklist
#
Security Audit
# Run security scan
npm run security:scan
# Check for vulnerabilities
docker run --rm -v $(pwd):/app aquasec/trivy fs /app
# Validate configurations
./scripts/validate-config.sh
#
Environment Validation
# Validate all required environment variables
./scripts/validate-env.sh
# Test database connectivity
./scripts/test-db-connection.sh
# Verify SSL certificates
./scripts/verify-certificates.sh
#
2. Infrastructure Preparation
#
Database Setup
-- Create production databases
CREATE DATABASE mspr_us;
CREATE DATABASE mspr_france;
CREATE DATABASE mspr_switzerland;
-- Create users with appropriate permissions
CREATE USER mspr_us_user WITH PASSWORD 'secure_password';
CREATE USER mspr_france_user WITH PASSWORD 'secure_password';
CREATE USER mspr_switzerland_user WITH PASSWORD 'secure_password';
-- Grant permissions
GRANT ALL PRIVILEGES ON DATABASE mspr_us TO mspr_us_user;
GRANT ALL PRIVILEGES ON DATABASE mspr_france TO mspr_france_user;
GRANT ALL PRIVILEGES ON DATABASE mspr_switzerland TO mspr_switzerland_user;
#
Load Balancer Configuration
# Production load balancer configuration
upstream backend_us {
least_conn;
server us-backend-1:3001 max_fails=3 fail_timeout=30s;
server us-backend-2:3001 max_fails=3 fail_timeout=30s;
}
upstream frontend_us {
least_conn;
server us-frontend-1:3000 max_fails=3 fail_timeout=30s;
server us-frontend-2:3000 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl http2;
server_name us.mspr.example.com;
ssl_certificate /etc/nginx/ssl/us/cert.crt;
ssl_certificate_key /etc/nginx/ssl/us/private.key;
location /api {
proxy_pass http://backend_us;
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;
}
location / {
proxy_pass http://frontend_us;
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;
}
}
#
3. Production Deployment Process
#
Automated Deployment
# Deploy using CI/CD pipeline
gh workflow run deploy-production.yml \
-f cluster=us \
-f skip_backup=false
# Monitor deployment progress
gh run list --workflow=deploy-production.yml
# Check deployment status
gh run view [RUN_ID]
#
Manual Deployment
# Create production backup
./infrastructure/scripts/backup.sh \
--cluster us \
--type full \
--retention 30
# Deploy to production
./infrastructure/scripts/deploy.sh \
--cluster us \
--environment production \
--force-recreate
# Verify deployment
./scripts/post-deployment-tests.sh us production
#
4. Post-Deployment Verification
#
Health Checks
# API health check
curl -f https://us.mspr.example.com/health
# Database connectivity
docker exec -it mspr-backend-us \
pnpm dlx prisma db ping
# Service status
docker ps --filter "name=mspr"
# Log verification
docker logs mspr-backend-us --tail 100
docker logs mspr-frontend-us --tail 100
#
Performance Testing
# Run load tests
npm run test:load:production
# Monitor resource usage
docker stats
# Check response times
curl -w "@curl-format.txt" -o /dev/null -s https://us.mspr.example.com/
#
Monitoring and Maintenance
#
1. Monitoring Setup
#
Prometheus Configuration
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: "mspr-backend"
static_configs:
- targets: ["backend:3001"]
metrics_path: "/metrics"
- job_name: "mspr-frontend"
static_configs:
- targets: ["frontend:3000"]
metrics_path: "/metrics"
- job_name: "postgres"
static_configs:
- targets: ["postgres:5432"]
#
Grafana Dashboards
{
"dashboard": {
"title": "MSPR Application Metrics",
"panels": [
{
"title": "API Response Time",
"type": "stat",
"targets": [
{
"expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))",
"legendFormat": "95th percentile"
}
]
},
{
"title": "Database Connections",
"type": "graph",
"targets": [
{
"expr": "pg_stat_database_numbackends",
"legendFormat": "Active connections"
}
]
}
]
}
}
#
2. Log Management
#
Centralized Logging
# docker-compose.override.yml for logging
version: "3.8"
services:
backend:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
labels: "service=backend,cluster=us"
frontend:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
labels: "service=frontend,cluster=us"
#
Log Analysis
# View recent logs
docker-compose logs --tail=100 -f
# Search for errors
docker-compose logs | grep -i error
# Monitor specific service
docker-compose logs -f backend
# Export logs for analysis
docker-compose logs --since 24h > logs_$(date +%Y%m%d).txt
#
3. Backup and Recovery
#
Automated Backups
# Schedule daily backups (crontab)
0 2 * * * /path/to/mspr/infrastructure/scripts/backup.sh --cluster us --type full
# Verify backup integrity
./infrastructure/scripts/verify-backup.sh backup_20240101_020000.tar.gz
# Test restore process
./infrastructure/scripts/restore.sh \
--cluster us \
--file backup_20240101_020000 \
--type db-only
#
Disaster Recovery
# Full system restore
./infrastructure/scripts/restore.sh \
--cluster us \
--file latest_backup \
--type full \
--force
# Verify restored system
./scripts/verify-system-integrity.sh us
#
4. Updates and Maintenance
#
Security Updates
# Update base images
docker-compose pull
# Rebuild with latest security patches
docker-compose build --no-cache
# Deploy updated images
./infrastructure/scripts/deploy.sh \
--cluster us \
--environment production \
--force-recreate
#
Application Updates
# Deploy new application version
git pull origin main
# Run database migrations
docker-compose exec backend pnpm dlx prisma migrate deploy
# Restart services with zero downtime
docker-compose up -d --no-deps backend
docker-compose up -d --no-deps frontend
#
Troubleshooting
#
Common Issues
#
1. Service Start Failures
# Check service logs
docker-compose logs [service_name]
# Verify environment variables
docker-compose config
# Check port conflicts
netstat -tulpn | grep :3000
netstat -tulpn | grep :3001
#
2. Database Connection Issues
# Test database connectivity
docker-compose exec backend node -e "
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
prisma.\$connect().then(() => console.log('Connected')).catch(console.error);
"
# Check database logs
docker-compose logs postgres
# Verify database configuration
docker-compose exec postgres psql -U mspr_user -d mspr -c "\\l"
#
3. SSL/TLS Issues
# Verify certificate validity
openssl x509 -in security/certificates/us/production/cert.crt -text -noout
# Test SSL configuration
openssl s_client -connect localhost:443 -servername localhost
# Check certificate expiration
./scripts/check-cert-expiry.sh
#
4. Performance Issues
# Monitor resource usage
docker stats
# Check application metrics
curl http://localhost:3001/metrics
# Analyze slow queries
docker-compose exec postgres psql -U mspr_user -d mspr -c "
SELECT query, mean_time, calls, total_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
"
#
5. ETL et Chargement des Données
# Vérifier le statut du processus ETL
./run-etl.sh --check-status
# Nettoyer et relancer l'ETL
./run-etl.sh --clean-reload
# Vérifier la connectivité à la base de données
docker exec mspr-postgres psql -U mspr -d mspr -c "SELECT version();"
# Compter les enregistrements chargés
docker exec mspr-postgres psql -U mspr -d mspr -c "
SELECT 'covid_data' as table_name, COUNT(*) as records FROM covid_data
UNION ALL
SELECT 'mpox_data' as table_name, COUNT(*) as records FROM mpox_data;
"
# Vérifier les logs ETL
tail -f etl/logs/etl-$(date +%Y%m%d).log
#
6. Problèmes de Traduction
# Vérifier la configuration des langues
curl http://localhost:3000/api/config/languages
# Tester la détection automatique
curl -H "Accept-Language: de,en;q=0.9" http://localhost:3000/
# Vérifier les traductions manquantes
npm run validate:translations
# Redémarrer avec langue spécifique
CLUSTER_LANGUAGES=fr,de,it docker-compose up -d frontend
#
7. Problèmes RGPD (Cluster France)
# Vérifier les pages légales
curl http://localhost:3000/mentions-legales
curl http://localhost:3000/politique-confidentialite
curl http://localhost:3000/politique-cookies
# Tester la bannière de cookies
curl -c cookies.txt http://localhost:3000/
cat cookies.txt
# Vérifier la configuration RGPD
docker-compose exec frontend env | grep GDPR
#
Emergency Procedures
#
System Outage
# 1. Assess the situation
./scripts/health-check-all.sh
# 2. Check recent changes
git log --oneline -10
# 3. Rollback if necessary
./infrastructure/scripts/rollback.sh \
--cluster us \
--version previous
# 4. Restore from backup if needed
./infrastructure/scripts/restore.sh \
--cluster us \
--file latest_good_backup \
--force
#
Security Incident
# 1. Isolate affected systems
./scripts/isolate-cluster.sh us
# 2. Collect logs for analysis
./scripts/collect-security-logs.sh us
# 3. Reset credentials
./scripts/rotate-secrets.sh us
# 4. Restore from clean backup
./infrastructure/scripts/restore.sh \
--cluster us \
--file pre_incident_backup \
--type full
#
Système de Traduction Multilingue
#
Architecture du Système i18n
Le système de traduction utilise une architecture modulaire avec React Context pour la gestion des langues :
// Configuration des langues supportées
export const locales = ["fr", "de", "it", "en"] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = "fr";
#
Composants Principaux
#
1. TranslationProvider
// Provider principal pour la gestion des traductions
<TranslationProvider>
<ClusterLanguageManager />
<div>
<Navigation />
<main>{children}</main>
<Footer />
</div>
</TranslationProvider>
#
2. ClusterLanguageManager
Gère la détection et configuration automatique des langues selon le cluster :
// Logique de détection des langues
const availableLanguages = clusterLanguages.filter((lang) =>
locales.includes(lang as Locale)
);
// Configuration automatique selon le cluster
switch (clusterName) {
case "switzerland": // fr, de, it
case "france": // fr uniquement
case "us": // en uniquement
}
#
3. LanguageSelector
Composant de sélection de langue avec trois modes :
- Dropdown : Menu déroulant complet
- Buttons : Boutons de sélection directe
- Compact : Version compacte pour espaces restreints
#
Configuration par Cluster
#
Variables d'Environnement
# Cluster États-Unis
CLUSTER_LANGUAGES=en
NEXT_PUBLIC_CLUSTER_LANGUAGES=en
# Cluster France
CLUSTER_LANGUAGES=fr
NEXT_PUBLIC_CLUSTER_LANGUAGES=fr
# Cluster Suisse
CLUSTER_LANGUAGES=fr,de,it
NEXT_PUBLIC_CLUSTER_LANGUAGES=fr,de,it
#
Next.js Configuration
// next.config.ts - Configuration pour App Router
export default {
output: "standalone",
env: {
NEXT_PUBLIC_CLUSTER_LANGUAGES: process.env.CLUSTER_LANGUAGES || "en",
},
// Note: i18n is handled by middleware in App Router
};
#
Dictionnaires de Traduction
#
Structure des Traductions
// site/src/lib/translations/
├── fr.ts // Français (défaut)
├── de.ts // Allemand
├── it.ts // Italien
└── en.ts // Anglais
#
Exemple de Dictionnaire
export const translations = {
nav: {
home: "Accueil",
covid: "COVID-19",
mpox: "MPOX",
compare: "Comparer",
allData: "Toutes les Données",
},
data: {
totalCases: "Cas Total",
newCases: "Nouveaux Cas",
totalDeaths: "Décès Total",
country: "Pays",
},
legal: {
privacyPolicy: "Politique de Confidentialité",
cookiePolicy: "Politique des Cookies",
gdprCompliant: "Conforme RGPD",
},
};
#
Utilisation dans les Composants
#
Hook useTranslation
import { useTranslation } from "@/components/TranslationProvider";
function MyComponent() {
const { t, locale, setLocale } = useTranslation();
return (
<div>
<h1>{t("nav.home")}</h1>
<p>Langue actuelle: {locale}</p>
<button onClick={() => setLocale("de")}>Deutsch</button>
</div>
);
}
#
Traductions Imbriquées
// Accès aux traductions imbriquées
t("data.metrics.totalCases", "Cas Total"); // avec fallback
t("legal.gdpr.userRights"); // traduction complexe
#
Middleware de Langue
Le middleware Next.js gère automatiquement les locales :
// site/src/middleware.ts
export function middleware(request: NextRequest) {
const pathname = request.nextUrl.pathname;
// Détection automatique des locales dans l'URL
const pathnameIsMissingLocale = locales.every(
(locale) => !pathname.startsWith(`/${locale}/`)
);
// Pas de redirection forcée, gestion côté client
return NextResponse.next();
}
#
Tests et Validation
#
Tests de Traduction
# Vérifier les traductions manquantes
npm run test:i18n
# Valider la cohérence des dictionnaires
npm run validate:translations
# Tester le switching de langues
npm run test:language-switching
#
Conformité RGPD
#
Vue d'Ensemble
Le système RGPD est spécifiquement conçu pour le cluster France avec une conformité complète au Règlement Général sur la Protection des Données.
#
Pages Légales Implémentées
#
1. Mentions Légales (/mentions-legales
)
// Structure complète des mentions légales
- Informations sur l'éditeur (OMS)
- Responsable de publication
- Hébergement et infrastructure
- Droits de propriété intellectuelle
- Responsabilité et garanties
- Droit applicable et juridiction
#
2. Politique de Confidentialité (/politique-confidentialite
)
// Traitement des données personnelles
- Types de données collectées
- Finalités du traitement
- Bases légales (Art. 6 RGPD)
- Durée de conservation (90 jours)
- Droits des utilisateurs
- Mesures de sécurité
- Transferts de données
#
3. Politique des Cookies (/politique-cookies
)
// Gestion des cookies et traceurs
- Types de cookies utilisés
- Finalités des cookies
- Durée de vie
- Paramétrage et refus
- Cookies tiers
- Mise à jour de la politique
#
Composants RGPD
#
1. CookieBanner
// Bannière de consentement cookies
export default function CookieBanner() {
const [showBanner, setShowBanner] = useState(false);
// Gestion du consentement
const handleAccept = () => {
localStorage.setItem("cookieConsent", "accepted");
setShowBanner(false);
};
const handleDecline = () => {
localStorage.setItem("cookieConsent", "declined");
setShowBanner(false);
};
}
#
2. GDPRCompliance
// Composant de conformité RGPD
export default function GDPRCompliance() {
return (
<div className="gdpr-compliance">
<div className="gdpr-badges">
<span className="badge">🔒 Conforme RGPD</span>
<span className="badge">🇪🇺 Conforme UE</span>
</div>
<div className="gdpr-links">
<Link href="/mentions-legales">Mentions Légales</Link>
<Link href="/politique-confidentialite">Confidentialité</Link>
<Link href="/politique-cookies">Cookies</Link>
</div>
</div>
);
}
#
Configuration RGPD
#
Variables d'Environnement
# Cluster France - Configuration RGPD
GDPR_COMPLIANCE=true
DATA_RETENTION_DAYS=90
ENCRYPT_PERSONAL_DATA=true
ENABLE_CONSENT_MANAGEMENT=true
ENABLE_DATA_PORTABILITY=true
ENABLE_RIGHT_TO_DELETION=true
ANONYMIZE_IP=true
COOKIE_CONSENT_REQUIRED=true
#
Paramètres de Sécurité
// Configuration de sécurité RGPD
const gdprConfig = {
dataRetention: 90, // jours
encryptPersonalData: true,
anonymizeIp: true,
cookieConsentRequired: true,
auditLogging: true,
dataPortability: true,
rightToErasure: true,
};
#
Droits des Utilisateurs
#
Droits Implémentés
- Droit d'accès (Art. 15 RGPD)
- Droit de rectification (Art. 16 RGPD)
- Droit à l'effacement (Art. 17 RGPD)
- Droit à la portabilité (Art. 20 RGPD)
- Droit d'opposition (Art. 21 RGPD)
- Droit de limitation (Art. 18 RGPD)
#
Contact DPO
// Informations Délégué à la Protection des Données
const dpoContact = {
name: "Délégué à la Protection des Données",
email: "dpo@who.int",
address:
"Organisation Mondiale de la Santé, Avenue Appia 20, 1211 Genève 27",
phone: "+41 22 791 21 11",
};
#
Audit et Conformité
#
Journalisation RGPD
// Log des actions RGPD
const gdprLogger = {
logDataAccess: (userId: string, dataType: string) => {},
logConsentChange: (userId: string, consent: boolean) => {},
logDataDeletion: (userId: string, reason: string) => {},
logDataExport: (userId: string, format: string) => {},
};
#
Rapports de Conformité
# Génération de rapports RGPD
npm run gdpr:audit-report
npm run gdpr:consent-report
npm run gdpr:data-retention-report
#
Mise à Jour et Maintenance
#
Revue Périodique
- Fréquence : Trimestrielle
- Éléments : Politique de confidentialité, mentions légales, cookies
- Responsable : Équipe juridique + DPO
#
Veille Réglementaire
- Suivi des évolutions RGPD
- Mise à jour des pratiques
- Formation des équipes
#
Support and Resources
#
Documentation
#
Monitoring Dashboards
- Grafana: http://localhost:3001/grafana
- Prometheus: http://localhost:9090
- Application Logs:
docker-compose logs -f
#
Contact Information
- Technical Support: tech-support@mspr.example.com
- Security Issues: security@mspr.example.com
- Emergency: +1-XXX-XXX-XXXX