Aller au contenu principal

Workers Architecture - Checklist de déploiement

Checklist complète pour déployer l'architecture Workers BullMQ en production.

📋 Pré-déploiement

Base de données

  • Migrations exécutées

    npm run migrate
    • Migration 0152 : job_runs, outbox_events, file_objects
    • Migration 0153 : export_jobs, ai_tasks, documents, etc.
  • Types DB générés

    npm run generate:types
    • Vérifier que les nouvelles tables sont dans database.types.ts
  • Indexes créés

    -- Vérifier les indexes
    SELECT indexname, tablename
    FROM pg_indexes
    WHERE tablename IN ('job_runs', 'export_jobs', 'ai_tasks', 'documents');

Configuration

  • Variables d'environnement

    # .env
    QUEUE_WORKERS_ENABLED=true
    REDIS_HOST=your-redis-host
    REDIS_PORT=6379
    REDIS_PASSWORD=your-redis-password
    R2_BUCKET_NAME=your-bucket-name
    R2_ACCOUNT_ID=your-account-id
    R2_ACCESS_KEY_ID=your-access-key
    R2_SECRET_ACCESS_KEY=your-secret-key
  • Redis accessible

    redis-cli -h your-redis-host -p 6379 -a your-password PING
    # Doit retourner : PONG
  • R2/S3 accessible

    # Tester l'upload d'un fichier test

Code

  • Build sans erreurs

    npm run build
  • Linter sans erreurs

    npm run lint
  • Tests passent (si créés)

    npm run test

🚀 Déploiement

Backend

  • Démarrer les workers

    • Vérifier que QUEUE_WORKERS_ENABLED=true
    • Vérifier les logs au démarrage :
      WorkerExportModule initialized
      WorkerEmailModule initialized
      WorkerAiModule initialized
      WorkerDocModule initialized
  • Vérifier les queues Redis

    redis-cli KEYS "bull:*"
    # Doit afficher les queues : exports-v2, ai-insights
  • Tester un endpoint

    curl -X GET "https://api.example.com/api/export/async?entity=sessions&format=csv" \
    -H "Authorization: Bearer TOKEN"

Frontend

  • Build production

    npm run build:frontend
  • Vérifier les imports

    • useJobRuns importe correctement
    • JobRunStatusBadge et JobRunProgress disponibles
  • Tester le polling

    • Créer un export async
    • Vérifier que le polling démarre automatiquement
    • Vérifier que le polling s'arrête quand le job est terminé

🔍 Post-déploiement

Vérifications immédiates

  • Workers actifs

    -- Vérifier qu'il y a des job_runs récents
    SELECT COUNT(*) FROM job_runs
    WHERE queued_at > NOW() - INTERVAL '1 hour';
  • Queues fonctionnent

    # Vérifier la profondeur des queues
    redis-cli LLEN "bull:exports-v2:wait"
  • Logs structurés

    # Vérifier les logs avec corrélation
    grep "JobID\|jobRunId" logs/app.log | head -20

Monitoring

  • Métriques configurées

    • Temps de traitement par job
    • Taux de succès/échec
    • Profondeur des queues
    • Coûts IA (si applicable)
  • Alertes configurées

    • Queue depth > seuil
    • Taux d'échec > seuil
    • Workers down
  • DLQ monitoring

    • Vérifier régulièrement les jobs en DLQ
    • Processus de récupération en place

🛡️ Sécurité

  • Permissions vérifiées

    • JobRunsController vérifie les permissions org
    • Workers vérifient orgId dans les payloads
    • File objects accessibles uniquement par le propriétaire
  • Secrets sécurisés

    • Redis password dans variables d'environnement
    • R2 credentials dans variables d'environnement
    • Pas de secrets dans le code
  • Rate limiting

    • Limites sur les endpoints async
    • Quotas IA par utilisateur (si applicable)

📊 Performance

  • Concurrence configurée

    • Nombre de workers par queue
    • Concurrency par worker
  • Retries configurés

    • Nombre de tentatives par type de job
    • Backoff exponentiel configuré
  • Cleanup configuré

    • Jobs complétés supprimés après X jours
    • Jobs échoués conservés pour debug

🔄 Rollback plan

  • Plan de rollback documenté

    • Désactiver workers : QUEUE_WORKERS_ENABLED=false
    • Revenir aux endpoints sync si nécessaire
    • Migrations rollback si problème
  • Backup DB

    • Backup avant migration
    • Backup régulier des job_runs (pour audit)

✅ Validation finale

  • Test end-to-end

    • Export async fonctionne
    • Frontend peut poller et télécharger
    • Logs corrects avec corrélation
  • Performance acceptable

    • Temps de traitement < seuil
    • Pas de memory leaks
    • Queues ne s'accumulent pas
  • Documentation à jour

    • README mis à jour
    • Guide de démarrage disponible
    • Runbook pour opérations

📝 Notes de déploiement

Date de déploiement : _______________

Version déployée : _______________

Déployé par : _______________

Problèmes rencontrés : _______________

Résolution : _______________