Développement

Empêcher Mail-in-a-Box d’écraser votre configuration Nginx pour un Wiki (suite à mon précédent article)

Suite à mon précédent article sur l’installation de Mail‑in‑a‑Box, voici une petite astuce pour éviter qu’il n’écrase la configuration Nginx de votre Wiki hébergé sur le même serveur. Mail‑in‑a‑Box régénère ses fichiers Nginx chaque nuit, ce qui peut rendre votre site indisponible si vous avez une conf personnalisée. La solution ci‑dessous recopie automatiquement votre conf, la teste, recharge Nginx si tout va bien, et restaure l’ancienne en cas d’échec.

Lire mon précédent article

Le problème

Chaque nuit, Mail‑in‑a‑Box réécrit /etc/nginx/conf.d/*. Résultat : votre conf dédiée au Wiki est écrasée. Plutôt que de patcher MIAB, on ajoute un petit script « safe » + une tâche cron programmée après le passage de MIAB.

Le script de déploiement « safe »

Créer le fichier /usr/local/sbin/deploy_nginx_conf.sh avec le contenu ci‑dessous, puis rendez‑le exécutable.

#!/usr/bin/env bash
set -Eeuo pipefail

# — À ADAPTER —
SRC="/chemin/vers/local.conf"                 # votre fichier source (conf personnalisée)
DST="/etc/nginx/conf.d/local.conf"            # destination
LOG="/var/log/deploy_nginx_conf.log"          # fichier de log
# — — —

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

{
  echo "[$(date -Is)] Déploiement de la configuration Nginx"
  if [[ ! -f "$SRC" ]]; then
    echo "Source introuvable: $SRC"
    exit 1
  fi

  ts="$(date +%Y%m%d%H%M%S)"

  # Sauvegarde de l'ancienne conf si elle existe
  if [[ -f "$DST" ]]; then
    cp -a "$DST" "$DST.$ts.bak"
    echo "Backup: $DST.$ts.bak"
  fi

  # Déploiement de la nouvelle conf
  install -m 644 "$SRC" "$DST"
  echo "Copié $SRC -> $DST"

  # Test de la conf et reload conditionnel
  if nginx -t; then
    echo "nginx -t OK, reload..."
    systemctl reload nginx
    echo "Reload réussi."
  else
    echo "nginx -t a échoué, restauration..."
    if [[ -f "$DST.$ts.bak" ]]; then
      mv -f "$DST.$ts.bak" "$DST"
      echo "Restauration effectuée."
    fi
    exit 1
  fi

  echo "Fin OK."
} >> "$LOG" 2>&1

Render le script exécutable

sudo chmod +x /usr/local/sbin/deploy_nginx_conf.sh

Planifier avec cron

Programmer l’exécution après le passage nocturne de Mail‑in‑a‑Box (ex. 04:00) dans la crontab root :

sudo crontab -e
0 5 * * * /usr/local/sbin/deploy_nginx_conf.sh

Vérifications utiles

  • Suivre les logs du script : sudo tail -n 100 -f /var/log/deploy_nginx_conf.log
  • Logs cron : sudo grep CRON /var/log/syslog
  • État Nginx : systemctl status nginx

Pourquoi cette méthode ?

  • Aucune modification des scripts internes de Mail‑in‑a‑Box.
  • Reload Nginx uniquement si la conf passe les tests.
  • Restauration automatique en cas d’erreur → faible risque de coupure.
  • Historique complet des actions dans /var/log/deploy_nginx_conf.log.

Depuis que j’ai mis en place ce duo script + cron, mon Wiki reste en ligne sans être perturbé par la régénération nocturne de Mail‑in‑a‑Box. Simple, robuste, et transparent.