68 %. C’est la proportion d’espace disque occupée par le seul répertoire wp-content/uploads sur un serveur de recrutement observé après dix-huit mois d’activité, alors que la base de données elle-même ne représente qu’une fraction marginale du total. Le constat est net : ce n’est pas WordPress qui pèse lourd, ce sont les pièces jointes.
Un cabinet de recrutement qui traite plusieurs centaines de candidatures par mois accumule des CV au format PDF ou Word, souvent accompagnés de lettres de motivation et parfois de portfolios en pièce jointe. Ce flux ne ralentit jamais : chaque candidature ajoute son lot de fichiers, et rien dans le fonctionnement normal du site ne vient les supprimer.
Pourquoi le disque applicatif n’est pas le bon endroit
Le répertoire wp-content/uploads vit par défaut sur le même disque que le code de WordPress et, souvent, sur le même volume que les journaux du serveur web et le cache PHP. Quand ce disque commence à se remplir, plusieurs symptômes apparaissent en cascade : les sauvegardes automatiques échouent silencieusement faute d’espace temporaire, les mises à jour d’extensions se bloquent en cours de décompression, et dans les cas les plus sévères, MySQL lui-même refuse d’écrire de nouvelles lignes.
Un disque plein n’est jamais un problème isolé : il se propage à tous les services qui partagent le même volume, y compris ceux qui n’ont rien à voir avec les candidatures.
La bonne architecture : séparer le stockage des documents
La solution la plus stable ne consiste pas à agrandir indéfiniment le disque du serveur applicatif, mais à déporter le répertoire des pièces jointes vers un espace de stockage dédié, monté en réseau. Deux approches courantes cohabitent :
- Un volume bloc supplémentaire, monté via
fstab, dédié uniquement àwp-content/uploads; - Un stockage objet compatible S3, monté localement via
s3fsou intégré directement à WordPress via le filtreupload_dir.
Rediriger les uploads sans toucher au thème
WordPress expose le filtre upload_dir précisément pour ce type de besoin, sans qu’il soit nécessaire de modifier le moindre appel dans le thème ou dans l’extension de candidature en ligne :
add_filter( 'upload_dir', function ( $dirs ) {
$base = '/mnt/stockage-candidatures';
$dirs['basedir'] = $base . $dirs['subdir'];
$dirs['path'] = $base . $dirs['subdir'];
return $dirs;
} );

Ce filtre agit à la racine du système de gestion des médias, ce qui signifie que la fonction native wp_handle_upload(), utilisée par la plupart des extensions de formulaire de candidature, écrit désormais directement sur le volume dédié sans code supplémentaire côté formulaire.
Le montage réseau : robustesse avant tout
Un point souvent négligé : un montage réseau qui se déconnecte silencieusement transforme des écritures de fichiers en erreurs PHP fatales. L’entrée fstab doit donc inclure des options qui empêchent un montage fantôme d’accepter des écritures dans le vide :
UUID=1234-5678 /mnt/stockage-candidatures nfs defaults,_netdev,hard,timeo=30 0 0
L’option hard impose de bloquer les écritures jusqu’au rétablissement du réseau plutôt que d’échouer silencieusement, ce qui évite de perdre une candidature au pire moment.
Gérer le cycle de vie des documents
Séparer le stockage règle le problème de volume, mais pas celui de la conservation dans le temps. Un cabinet de recrutement est tenu de purger les candidatures non retenues après une durée limitée, ce qui suppose une tâche planifiée plutôt qu’une purge manuelle :
wp cron event schedule purge_candidatures_expirees now daily
Cette tâche peut s’appuyer sur une métadonnée de date de dépôt enregistrée à chaque candidature, comparée à la politique de conservation définie par le cabinet, pour supprimer à la fois l’entrée en base et le fichier physique correspondant sur le volume dédié.
Un principe simple qui évite bien des sueurs froides : jamais de purge automatique sans avoir d’abord vérifié, sur un échantillon, que le fichier physique et l’entrée en base disparaissent bien ensemble, jamais l’un sans l’autre.
Notre verdict
Séparer le stockage des pièces jointes volumineuses du disque applicatif n’est pas un luxe réservé aux gros volumes : c’est une précaution qui protège l’ensemble du serveur contre un effet domino provoqué par un seul type de contenu. Le filtre upload_dir rend ce déport transparent pour le reste du site, à condition de traiter le montage réseau avec la rigueur qu’il mérite.