afcfta-final-001

🐳 Guide de DĂ©ploiement Docker

Prérequis

Installation rapide

1. Cloner le repository

git clone https://github.com/aouggad-web/afcfta-final-001.git
cd afcfta-final-001

2. Configurer les variables d’environnement

cp .env.example .env
# Éditer .env avec vos credentials
nano .env

3. DĂ©marrer l’application

docker-compose up -d

4. Vérifier que tout fonctionne

# Vérifier les conteneurs
docker-compose ps

# Vérifier les logs
docker-compose logs -f backend

# Tester l'API
curl http://localhost:8000/health

Configuration des notifications

Email (Gmail)

  1. Activer 2FA sur Gmail
    • Aller sur https://myaccount.google.com/security
    • Activer la validation en 2 Ă©tapes
  2. Créer un App Password
    • Aller sur https://myaccount.google.com/apppasswords
    • CrĂ©er un nouveau mot de passe pour “Mail”
    • Copier le mot de passe gĂ©nĂ©rĂ© (16 caractĂšres)
  3. Ajouter dans .env:
    EMAIL_ENABLED=true
    EMAIL_SMTP_HOST=smtp.gmail.com
    EMAIL_SMTP_PORT=587
    EMAIL_SMTP_USER=your-email@gmail.com
    EMAIL_SMTP_PASSWORD=xxxx-xxxx-xxxx-xxxx
    EMAIL_FROM=noreply@afcfta.com
    EMAIL_TO=admin@domain.com,ops@domain.com
    

Email (Outlook/Office365)

EMAIL_ENABLED=true
EMAIL_SMTP_HOST=smtp-mail.outlook.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your-email@outlook.com
EMAIL_SMTP_PASSWORD=your-password
EMAIL_FROM=your-email@outlook.com
EMAIL_TO=admin@domain.com

Email (SendGrid)

EMAIL_ENABLED=true
EMAIL_SMTP_HOST=smtp.sendgrid.net
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=apikey
EMAIL_SMTP_PASSWORD=SG.your-sendgrid-api-key
EMAIL_FROM=noreply@yourdomain.com
EMAIL_TO=admin@domain.com

Slack

  1. Créer une app Slack
    • Aller sur https://api.slack.com/apps
    • Cliquer sur “Create New App”
    • Choisir “From scratch”
    • Donner un nom (ex: “AfCFTA Crawler”)
  2. Activer Incoming Webhooks
    • Dans la sidebar, aller sur “Incoming Webhooks”
    • Activer “Activate Incoming Webhooks”
    • Cliquer sur “Add New Webhook to Workspace”
    • SĂ©lectionner le canal de destination
  3. Copier l’URL webhook dans .env:
    SLACK_ENABLED=true
    SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXX
    SLACK_CHANNEL=#afcfta-monitoring
    

Commandes utiles

Gestion des conteneurs

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

# ArrĂȘter les services
docker-compose down

# Redémarrer un service
docker-compose restart backend

# Voir les logs en temps réel
docker-compose logs -f

# Voir les logs d'un service spécifique
docker-compose logs -f backend
docker-compose logs -f mongodb

# Voir l'état des conteneurs
docker-compose ps

Gestion des données

# Sauvegarder la base de données
docker-compose exec mongodb mongodump --out /data/backup

# Restaurer la base de données
docker-compose exec mongodb mongorestore /data/backup

# Accéder au shell MongoDB
docker-compose exec mongodb mongosh

# Supprimer les volumes (ATTENTION: perte de données)
docker-compose down -v

Mise à jour de l’application

# Récupérer les derniÚres modifications
git pull origin main

# Rebuilder et redémarrer
docker-compose up -d --build

# Voir les changements appliqués
docker-compose logs -f backend

Debugging

# Entrer dans le conteneur backend
docker-compose exec backend bash

# Vérifier les variables d'environnement
docker-compose exec backend env | grep EMAIL
docker-compose exec backend env | grep SLACK

# Tester la connectivité MongoDB
docker-compose exec backend python -c "from pymongo import MongoClient; client = MongoClient('mongodb://mongodb:27017'); print(client.server_info())"

Surveillance et monitoring

Health Check

L’API expose un endpoint de santĂ©:

curl http://localhost:8000/health

Réponse attendue:

{
  "status": "healthy",
  "database": "connected",
  "timestamp": "2025-02-06T12:00:00Z"
}

Logs

Les logs sont stockés dans:

Métriques

VĂ©rifier l’utilisation des ressources:

docker stats

Production

Sécurité

  1. Changer les mots de passe par défaut
    MONGO_ROOT_PASSWORD=your-very-secure-password-here
    
  2. Utiliser HTTPS
    • Ajouter un reverse proxy (Nginx, Traefik)
    • Configurer SSL/TLS
  3. Restreindre les ports
    • Modifier docker-compose.yml pour ne pas exposer MongoDB (port 27017)
  4. Variables d’environnement sensibles
    • Ne jamais commiter le fichier .env
    • Utiliser un gestionnaire de secrets (Vault, AWS Secrets Manager)

Performance

  1. Ajuster les ressources
    services:
      backend:
     deploy:
       resources:
         limits:
           cpus: '2'
           memory: 2G
         reservations:
           cpus: '1'
           memory: 1G
    
  2. Augmenter le nombre de workers
    services:
      backend:
     command: uvicorn backend.server:app --host 0.0.0.0 --port 8000 --workers 4
    

Backup automatique

Créer un cron job pour sauvegarder MongoDB:

# Éditer crontab
crontab -e

# Ajouter (sauvegarde quotidienne Ă  2h du matin)
0 2 * * * cd /path/to/afcfta-final-001 && docker-compose exec -T mongodb mongodump --out /data/backup/$(date +\%Y\%m\%d)

Troubleshooting

Le backend ne démarre pas

  1. Vérifier les logs:
    docker-compose logs backend
    
  2. Vérifier MongoDB:
    docker-compose ps mongodb
    docker-compose logs mongodb
    
  3. VĂ©rifier les variables d’environnement:
    docker-compose config
    

Les notifications ne fonctionnent pas

  1. Vérifier la configuration:
    docker-compose exec backend env | grep EMAIL
    docker-compose exec backend env | grep SLACK
    
  2. Tester la connectivité SMTP:
    docker-compose exec backend python -c "
    import smtplib
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    print('SMTP connection OK')
    "
    
  3. Vérifier les logs:
    docker-compose logs backend | grep -i notification
    

MongoDB n’est pas accessible

  1. Vérifier que le conteneur tourne:
    docker-compose ps mongodb
    
  2. Tester la connexion:
    docker-compose exec mongodb mongosh --eval "db.adminCommand('ping')"
    
  3. Vérifier le réseau:
    docker network ls
    docker network inspect afcfta_afcfta-network
    

Support

Pour obtenir de l’aide: