veilletech.fr
19 août Feed du jour
#03 LARAVEL Article

Laravel : migrer son stockage sans coupure

Plus jamais de sync massive.

Laravel 13.26 introduit un driver de filesystem read-through qui compose un disque principal et un disque de repli. À la première lecture, le fichier absent du disque principal est servi depuis l'ancien puis recopié. Les fichiers réellement consultés migrent d'eux-mêmes, les fichiers morts restent où ils sont.

2 min de lecturevidéo 1:08
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le problème qu'il règle
  3. Le comportement obtenu
  4. Le piège
  5. À savoir
  6. À retenir

Ce qui se passe

Laravel 13.26 ajoute un driver de filesystem read-through, qui compose deux disques : un principal et un disque de repli.

Une lecture cherche d'abord sur le disque principal. Si le fichier n'y est pas encore, il est servi depuis l'ancien disque et recopié au passage vers le nouveau.

Le problème qu'il règle

Une migration de bucket bute toujours sur le même point : le transfert de masse. Synchroniser plusieurs millions de fichiers entre deux fournisseurs se compte en jours, se facture en egress, et déplace autant de fichiers morts que de fichiers vivants.

Gérer la double lecture dans le code applicatif évite le transfert, mais éparpille des Storage::disk('old') dans chaque chemin de lecture — et ce genre de fallback survit longtemps à la migration qui l'a justifié.

Le comportement obtenu

Les fichiers effectivement consultés basculent d'eux-mêmes vers le nouveau disque, à leur première lecture. Ceux que personne ne demande restent en place. La bascule ne se joue pas sur un déploiement unique, et le retour arrière est un changement de configuration.

Le piège

Deux règles de routage à connaître avant la production. Les listings de répertoire ne consultent que le disque principal : un code qui itère un dossier ne verra pas ce qui dort encore sur le fallback. Les suppressions ne touchent que le principal — supprimer un fichier encore présent sur l'ancien disque le fait réapparaître à la lecture suivante.

La promotion est par ailleurs volontairement best-effort : si la copie vers le principal échoue, la lecture réussit quand même et l'exception est avalée. 'throw_on_promotion_failure' => true inverse ce choix.

À savoir

Arrivé par la PR #61140, signée Taylor Otwell. Le disque se compose à partir de deux disques déclarés, ou de deux configurations inline.