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.
- Migration 0152 :
-
Types DB générés
npm run generate:types- Vérifier que les nouvelles tables sont dans
database.types.ts
- Vérifier que les nouvelles tables sont dans
-
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 que
-
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
-
useJobRunsimporte correctement -
JobRunStatusBadgeetJobRunProgressdisponibles
-
-
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
-
JobRunsControllervérifie les permissions org - Workers vérifient
orgIddans 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
- Désactiver workers :
-
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 : _______________