Migrer Symfony sans interruption de service
La migration d'une application Symfony de la version 2.8 à 6.4 est un défi majeur. Chez Keytchens, nous avons réalisé cette migration sur une plateforme en production gérant des commandes en temps réel, sans aucune interruption de service.
Stratégie de migration progressive
Plutôt qu'une réécriture complète, nous avons opté pour une migration incrémentale :
- Phase 1 : Symfony 2.8 → 3.4 (compatibilité ascendante)
- Phase 2 : Symfony 3.4 → 4.4 (migration vers la structure Flex)
- Phase 3 : Symfony 4.4 → 5.4 (suppression des dépréciations)
- Phase 4 : Symfony 5.4 → 6.4 (adoption PHP 8.1+)
Outils indispensables
# Détecter les dépréciations
composer require symfony/phpunit-bridge
PHPUnit_SYMFONY_DEPRECATIONS_HELPER=max[total]=0 php bin/phpunit
# Rectifier automatiquement
composer require rector/rector
vendor/bin/rector process src --set symfony54
Points critiques
# Migration des services (avant - services.yml)
services:
app.manager.order:
class: App\Manager\OrderManager
arguments: ['@doctrine.orm.entity_manager']
# Après - services.yaml avec autowiring
services:
_defaults:
autowire: true
autoconfigure: true
App\:
resource: '../src/'
Gestion du zero-downtime
Pour maintenir le service pendant la migration :
- Déploiement blue-green avec Docker
- Feature flags pour activer progressivement les nouvelles fonctionnalités
- Tests de régression automatisés couvrant 85% du code
- Rollback automatique en cas de détection d'erreurs
Cette migration a permis d'améliorer les performances de 40% et de réduire la dette technique de manière significative.