Migration Debian 12 → Debian 13 (Trixie) Retour d’expérience réel, problèmes et solutions

Contexte

Migrer un serveur Debian en production n’est jamais anodin.
Dans mon cas, le passage de Debian 12 (Bookworm) à Debian 13 (Trixie) a été beaucoup plus brutal que prévu : services cassés, configurations obsolètes, dépendances Python disparues, et même des logiciels pourtant “standards” devenus incompatibles.

Voici un retour d’expérience concret, avec tous les pièges rencontrés, leurs solutions, et une checklist post-migration pour éviter d’y passer des heures comme moi.

Situation de départ

Serveur distant (ovh) avec :

  • Apache + PHP (WordPress)
  • Postfix + Dovecot + Roundcube
  • Webmin / Virtualmin
  • Fail2Ban, firewalld / nftables
  • Serveur Minecraft via Crafty
  • Docker (partiel)
  • ProFTPD

Migration effectuée via upgrade in-place.

1️⃣ Sites WordPress en erreur 503

🔍 Diagnostic

Commandes utilisées pour identifier la cause
curl -I https://monsite.tld
sudo systemctl status apache2
sudo tail -n 50 /var/log/apache2/error.log
sudo systemctl status php8.4-fpm

🧠 Cause

Apache fonctionnait, mais PHP-FPM n’était pas correctement configuré / socket absent.

🛠️ Solution

sudo apt install php8.4-fpm
sudo systemctl enable --now php8.4-fpm

Correction des VirtualHosts Apache :

<FilesMatch \.php$>
  SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>

2️⃣ Erreur WordPress : extension MySQL absente

🔍 Diagnostic

Commandes de vérification
php -m | grep mysql
php -v

🧠 Cause

PHP 8.4 installé, mais sans module MySQL.

🛠️ Solution

sudo apt install php8.4-mysql
sudo systemctl restart php8.4-fpm apache2

3️⃣ Dovecot ne démarre plus

🔍 Diagnostic

sudo systemctl status dovecot
sudo doveconf

🧠 Cause

Incompatibilités de syntaxe suite au passage à Dovecot 2.4 (directives obsolètes).

🛠️ Solution

  • Ajout obligatoire :
dovecot_config_version = 2.4.1

Migration des directives SSL :

ssl_server {
  cert_file = /etc/ssl/...
  key_file  = /etc/ssl/...
}

4️⃣ SMTP Roundcube – erreur 454

🔍 Diagnostic

ss -lntp | grep 587
sudo postconf -n | grep sasl
ls -l /var/spool/postfix/private/auth

🧠 Cause

Socket d’authentification SASL absent.

🛠️ Solution

service auth {
  unix_listener /var/spool/postfix/private/auth {
    user = postfix
    group = postfix
    mode = 0660
  }
}

5️⃣ Webmin – erreur Authentic Theme

🔍 Diagnostic

webmin -version
ls /usr/share/webmin/authentic-theme

🧠 Cause

Incompatibilité thème / version Webmin après upgrade.

🛠️ Solution

  • Mise à jour complète du système
  • Réinstallation du thème
  • Redémarrage final du serveur

6️⃣ Services secondaires cassés

Fail2Ban

Diagnostic

journalctl -xeu fail2ban

Cause : dépendances Python manquantes → résolu après upgrade complet.

Firewalld

Serveur déjà sous nftables → suppression complète de firewalld.

ProFTPD

Directives obsolètes supprimées une à une après analyse via :

proftpd -t

Crafty / Minecraft

Diagnostic

systemctl status crafty
java -version

Cause : Java absent après migration.

Solution

sudo apt install openjdk-21-jre-headless

Encadré – À ne surtout pas oublier

  • ✔ Toujours vérifier PHP-FPM après upgrade
  • ✔ Tester Dovecot avec doveconf
  • ✔ Vérifier les dépôts tiers (Docker, CrowdSec)
  • ✔ Ne pas mélanger firewalld et nftables
  • ✔ Redémarrer uniquement à la fin

Conclusion

Une migration Debian majeure est avant tout un exercice de diagnostic. Les erreurs sont rarement graves, mais toujours révélatrices d’un changement de paradigme.
J’y ai passé quand même 6h environ, avec l’aide dune IA…

BONUS

📐 Timeline illustrée (avant / pendant / après)

🟢 AVANT

  • Debian 12 stable
  • Tous services OK
  • Sauvegardes faites

⬇️

🟡 PENDANT

  • Upgrade système
  • Redémarrage
  • Découverte des services cassés
  • Corrections une par une

⬇️

🔵 APRÈS

  • Debian 13 propre
  • Services compatibles
  • Configs modernisées

🔁 Script de pré-migration Debian 14 (ready)

#!/bin/bash
echo "=== PRE-MIGRATION CHECK DEBIAN ==="

echo "[1] Version Debian"
lsb_release -a

echo "[2] Services en erreur"
systemctl --failed

echo "[3] Sauvegardes ?"
read -p "Confirmer que les sauvegardes sont OK (yes/no) : " r
[ "$r" != "yes" ] && exit 1

echo "[4] Dépôts non Debian"
grep -R ^deb /etc/apt | grep -v debian

echo "[5] PHP"
php -v || echo "PHP absent"
ls /etc/php/*/fpm || echo "PHP-FPM absent"

echo "[6] Mail"
postconf -n | grep sasl
doveconf -n | head -n 5

echo "[7] Docker"
docker --version || echo "Docker absent"

echo "=== FIN CHECK ==="

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.