« Organigramme d'installation » : différence entre les versions

De Documentation
Aller à la navigationAller à la recherche
 
(49 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Gestion du changement d'IP de la livebox chez Ionos ==
=== Installer python ===
Vérifier si python et pip sont installés :
python --version
pip --version
Installer python 3 :
apt update
apt upgrade
apt install software-properties-common
apt-get install python3
=== Installer le client multi-plateforme ===
pip install domain-connect-dyndns
=== Configurer et automatiser ===
Ajouter le domaine :
domain-connect-dyndns setup --domain NOM_DU_DOMAINE
Suivre les étapes et noter le chemin du fichier de configuration (*.txt)</br>
Pour mettre à jour tous les domaines :
domain-connect-dyndns update --all
Pour automatiser le processus de surveillance et de mise à jour :</br>
Éditer crontab :
crontab -e
Ajouter la ligne :
*/1 * * * * /usr/bin/flock -n /tmp/ipupdate.lck /usr/local/bin/domain-connect-dyndns update --all --config /Chemin de sauvegarde/settings.txt
C'est tout !
== Les outils ==
== Les outils ==
=== Conteneur proxy : cf nginx sur alpine léger ===
=== Conteneur proxy : [[Proxy|Voir la page]] ===
** Création du conteneur
::* Création du conteneur
** Installation et configuration de nginx
::* Installation et configuration de nginx
** Installation de certbot pour let's encrypt
::* Installation de certbot pour let's encrypt
** Voir pour installer des outils de sécurité (fail2ban,...)
::* Voir pour installer des outils de sécurité (fail2ban,...)
<br>
<br>
=== Conteneur Mariadb : cf mariadb sur alpinele ===
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===
** Création du conteneur
::* Création du conteneur
** Installation de mariadb
::* Installation de mariadb
** Configuration
::* Configuration
** Création d'un utilisateur
::* Création d'un utilisateur
<br>
<br>
=== Conteneur PhpMyadmin : cf phpma sur alpineLe ===
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===
** Création du conteneur
::* Création du conteneur
** Installation d'apache2 et de phpmyadmin
::* Installation d'apache2 et de phpmyadmin
** Configuration d'apache2 et de phpmyadmin
::* Configuration d'apache2 et de phpmyadmin
<br>
<br>


== Les applis ==
== Les applis ==
<br>
<br>
=== Conteneur tables : cf tables sur alpine léger & pmb sur alpine léger pour apache2 ===
=== Conteneur tables : [[Tables|Voir la page]] ===
:*Installation du serveur web avec apache
:*Installation de ''tables'' et corrections des fichiers
:*Installation et configuration de goaccess
 
=== Conteneur pmb : [[Pmb|Voir la page]]===
''(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)''
<br>
<br>
=== Conteneur pmb : cf pmb sur alpine léger (historique dans pmb sur alpine lourd) ===
 
<br>
=== Conteneur wiki : [[Wiki|Voir la page]] ===
=== Conteneur wiki : Cf wiki (mediawiki) sur alpine léger ===
::* Création d'un utilisateur et d'une base de donnée vide pour le wiki
** Création d'un utilisateur et d'une base de donnée vide pour le wiki
::* Transfert de la base de données
** Transfert de la base de données
::* Création du conteneur
** Création du conteneur
::* Installation du serveur web
** Installation du serveur web
::* Installation de la nouvelle version de mediawiki
** Installation de la nouvelle version de mediawiki
::* Initialisation de l'application
** Initialisation de l'application
::* Modification de LocalSettings.php
** Modification de LocalSettings.php
::* Récupération du contenu sur l'ancien serveur et transfert des données
** Récupération du contenu sur l'ancien serveur et transfert des données
::* Corrections
** Corrections
 
=== Conteneur wp : [[Wp|Voir la page]] ===
''(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d'autres conteneurs...)''
<br>
<br>


=== Conteneur wp : cf wordpress sur alpine léger ===
mais sauter à la fin. Mariadb et phpmyadmin dans d'autres conteneurs...
<br>
== Stockage et sauvegardes ==
== Stockage et sauvegardes ==
création d'un volume pour les sauvegardes :
création d'un volume pour les sauvegardes :
Ligne 46 : Ligne 77 :
Montage du volume dans chaque conteneur :
Montage du volume dans chaque conteneur :


<nowiki>#</nowiki> lxc config device add <nom du conteneur> sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes<br>
<nowiki>#</nowiki> lxc config device add <nom du conteneur> sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
 
 
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.<br>


== Sécurisation ==
== Sécurisation ==
Mises à jour automatiques
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===
 
Installer vim-nox (coloration syntaxique), mailutils (pour l'envoi de mails).


Au niveau du système hôte, on ajoute le script /root/scripts/lxc_auto_update avec :
Afin d'automatiser la mise à jour des conteneurs, on crée un script qui va
:*Mettre à jour les conteneurs alpine en fonctionnement
:*Créer un fichier de log
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour
:*Envoyer un mail d'alerte en cas d'erreur
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur '''proxy''' en dernier


  #!/bin/bash
===Sauvegardes automatiques des données des conteneurs web===
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur '''mariadb'''. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.<br>
Les conteneurs :
::* mariadb
::* wiki
::* pmb
::* wp
bénéficieront de ce mécanisme.<br>
Pour les conteneurs '''proxy''', '''phpma''' et '''tables''', une simple sauvegarde à la main suffira.<br>
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :
lxc storage volume create default sauvegarde-lxc size=50GB
lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
====mariadb====
:* On commence par créer un utilisateur spécifique à la sauvegarde.<br> Sous phpMyAdmin, création de l'utilisateur ''backup_user'' avec les privilèges ''SELECT'' et ''LOCK TABLES'' pour les tables ''pmb'', ''wiki'' et ''wordpress''.<br><br>
:* Création du script de sauvegarde des tables<br>On sauvegarde les tables ''pmb'', ''wordpress'' et ''wiki'' en générant un fichier de log dans /var/log/'''backup_mariadb.log'''.<br>
<div class="toccolours mw-collapsible mw-collapsed">
'''/usr/local/bin/backup_mariadb.sh''' :
<div class="mw-collapsible-content">
#!/bin/sh
DATE=$(date +%Y%m%d_%H%M)
OUTPUT_FILE="/sauvegardes/db_backup_${DATE}.sql.gz"
USER="backup_user"  <br>PASSWORD="*********" # ''Mot de passe de backup_user''
   
   
  LOG_FILE="/var/log/lxc_update.log"
  # Liste des bases de données à sauvegarder
DATABASES="pmb wiki wordpress"
   
   
  bavarder() {
  # Exporte chaque base de données et la compresse
  local message="$1"
for DB in $DATABASES; do
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE"
  echo "Sauvegarde de la base de données : $DB"
  }
  mysqldump -u "$USER" -p"$PASSWORD" "$DB" | gzip >> "$OUTPUT_FILE"
  done
   
   
  <nowiki>#</nowiki> Récupérer la liste des noms de conteneurs Alpine
  chmod 600 "$OUTPUT_FILE" # Restreindre les permissions
containers=$(lxc list --format csv | tail -n +2 | cut -d',' -f1)
echo "Sauvegarde des bases de données terminée : $OUTPUT_FILE" >> /var/log/backup_mariadb.log
  bavarder "Liste des conteneurs récupérée : '$containers'"
</div></div>
:* Rendre le script exécutable :<br>
chmod +x /usr/local/bin/backup_mariadb.sh<br>
:* Automatiser le script le samedi à 2h du matin :<br>Avec '''crontab -e''', ajouter la ligne :
0 2 * * 6 /usr/local/bin/backup_mariadb.sh
 
====wiki====
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.<br>
Il crée également un fichier de log /var/log/'''backup_wiki.log'''<br><br>
 
<div class="toccolours mw-collapsible mw-collapsed">
/usr/local/bin/'''backup_wiki.sh''':
<div class="mw-collapsible-content">
#!/bin/sh
DATE=$(date +%Y%m%d_%H%M)
  OUTPUT_FILE="/sauvegardes/wiki_backup_${DATE}.tar.gz"
MEDIAWIKI_ROOT="/var/www/localhost/htdocs/"
BASE_EXTENSIONS="AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor"
FILES_TO_BACKUP="images
LocalSettings.php
extensions-custom/
skins-custom/"
   
   
  <nowiki>#</nowiki> Séparer les noms de conteneurs en un tableau
  echo "--- Début du script ---"
  IFS=$'\n' read -r -d <nowiki>''</nowiki> -a container_array <<< "$containers"
echo "Date de la sauvegarde : $DATE"
  echo "Fichier de sortie : $OUTPUT_FILE"
echo "Racine de MediaWiki : $MEDIAWIKI_ROOT"
echo "Extensions de base : $BASE_EXTENSIONS"
echo "Fichiers de base à sauvegarder : $FILES_TO_BACKUP"
echo "---"
   
   
  <nowiki>#</nowiki> Boucle pour lancer les mises à jour et rediriger toute la sortie de la boucle
  cd "$MEDIAWIKI_ROOT" || { echo "Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT"; exit 1; }
  {
  echo "Répertoire courant : $(pwd)"
  for container in "${container_array[@]}"; do
echo "--- Identification des extensions personnalisées ---"
    bavarder "--- Début du traitement du conteneur : '$container' ---"
   
   
    config=$(lxc config show "$container")
echo "Création du fichier temporaire /tmp/backup_list.txt"
    if echo "$config" | grep -iq "alpine"; then
echo "$FILES_TO_BACKUP" > /tmp/backup_list.txt
      bavarder "Le conteneur '$container' semble être basé sur Alpine."
cat /tmp/backup_list.txt | while IFS= read -r LINE; do
      is_running=$(lxc list --format csv | grep "^${container}," | grep ",RUNNING,")
  echo "Ajout de '$LINE' à la liste de sauvegarde."
      if [ -n "$is_running" ]; then
done
        bavarder "Le conteneur '$container' est en cours d'exécution, lancement de la mise à jour..."
echo "---"
        lxc exec "$container" -- sh -c "apk update && apk upgrade --available"
        result=$?
        if [ "$result" -ne 0 ]; then
          bavarder "Erreur lors de la mise à jour de '$container'."
        fi
      else
        bavarder "Le conteneur '$container' n'est pas en cours d'exécution, mise à jour ignorée."
      fi
    else
      bavarder "Le conteneur '$container' ne semble pas être basé sur Alpine, mise à jour ignorée."
    fi
    bavarder "--- Fin du traitement du conteneur : '$container' ---"
  done
} >> "$LOG_FILE" 2>&1
   
   
  bavarder "Fin de la tentative de mise à jour des conteneurs."
  echo "Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/"
for EXTENSION_DIR in "$MEDIAWIKI_ROOT"extensions/*; do
    if [ -d "$EXTENSION_DIR" ]; then
        EXTENSION_NAME=$(basename "$EXTENSION_DIR")
        echo "Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)"
        IS_BASE=0
        for BASE_EXT in $BASE_EXTENSIONS; do
            if [ "$EXTENSION_NAME" = "$BASE_EXT" ]; then
                IS_BASE=1
                echo "  '$EXTENSION_NAME' est une extension de base."
                break
            fi
        done
        if [ "$IS_BASE" -eq 0 ]; then
            echo "  '$EXTENSION_NAME' est une extension personnalisée. Ajout à la liste de sauvegarde."
            echo "extensions/$EXTENSION_NAME" >> /tmp/backup_list.txt
        fi
    fi
done
echo "--- Liste de sauvegarde complète ---"
cat /tmp/backup_list.txt
echo "---"
   
   
  <nowiki>#</nowiki> Définir l'adresse e-mail pour les notifications
  echo "Création de l'archive : $OUTPUT_FILE"
  EMAIL_DESTINATAIRE="toto@monfournisseur.com" # Remplace par ton adresse e-mail
tar czf "$OUTPUT_FILE" -T /tmp/backup_list.txt --exclude='./tmp/backup_list.txt'
  echo "Commande tar exécutée."
   
   
<nowiki>#</nowiki> Vérifier s'il y a eu des erreurs et envoyer un e-mail si c'est le cas
  if [ -f "$OUTPUT_FILE" ]; then
  if grep -q "Erreur" "$LOG_FILE"; then
    chmod 600 "$OUTPUT_FILE"
  cat "$LOG_FILE" | mail -s 'Rapport de mise à jour LXC - Erreurs détectées' "$EMAIL_DESTINATAIRE"
    echo "Permissions du fichier de sauvegarde mises à 600."
    echo "Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE" >> /var/log/backup_wiki.log
    echo "--- Fin du script ---"
else
    echo "Erreur : Le fichier de sauvegarde $OUTPUT_FILE n'a pas été créé."
    echo "--- Fin du script \(avec erreur\) ---"
    exit 1
  fi
  fi
   
   
  exit 0
  rm /tmp/backup_list.txt
L'envoi des mails nécessite l'installation de mailutils et ssmtp :
echo "Fichier temporaire /tmp/backup_list.txt supprimé."
  # apt-get install mailutils ssmtp
</div></div>
Configuration de ssmtp :
'''NB :''' Les nombreuses lignes ''echo'' ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...
  # vi /etc/ssmtp/ssmtp.conf
:* Rendre le script exécutable :<br>
 
chmod +x /usr/local/bin/backup_wiki.sh<br>
  #
:* Automatiser le script le samedi à 3h30 du matin :<br>Avec '''crontab -e''', ajouter la ligne :
  # Config file for sSMTP sendmail
30  3  *  *  6  /usr/local/bin/backup_wiki.sh
  #
  # The person who gets all mail for userids < 1000
  # Make this empty to disable rewriting.
  root=toto@monmail.fr
 
  # The place where the mail goes. The actual machine name is required no
  # MX records are consulted. Commonly mailhosts are named mail.domain.com
  mailhub=smtp.gmail.com:587 (pour gmail)
 
  # Where will the mail seem to come from?
  # rewriteDomain=
 
  # The full hostname
  hostname=raspberrypi
 
  # Are users allowed to set their own From: address?
  # YES - Allow the user to specify their own From: address
  # NO - Use the system generated From: address
  FromLineOverride=YES
  UseTLS=YES
  UseSTARTTLS=YES
  AuthUser=toto@monfournisseur.com
  AuthPass=MonMotdePasseDeConnection
 
'''''Remarque :''' on peut créer un mot de passe d'application dans les paramètre du compte google et l'utiliser ici pour éviter d'avoir à utiliser le mot de passe du compte.


On automatise l'exécution (dimache à 2h du matin) :
====wp====
  # crontab -e
====pmb====
  0 2 * * 7 /root/scripts/lxc_auto_update.sh

Dernière version du 6 septembre 2025 à 16:54

Gestion du changement d'IP de la livebox chez Ionos

Installer python

Vérifier si python et pip sont installés :

python --version
pip --version

Installer python 3 :

apt update
apt upgrade
apt install software-properties-common
apt-get install python3

Installer le client multi-plateforme

pip install domain-connect-dyndns

Configurer et automatiser

Ajouter le domaine :

domain-connect-dyndns setup --domain NOM_DU_DOMAINE

Suivre les étapes et noter le chemin du fichier de configuration (*.txt)
Pour mettre à jour tous les domaines :

domain-connect-dyndns update --all

Pour automatiser le processus de surveillance et de mise à jour :
Éditer crontab :

crontab -e

Ajouter la ligne :

*/1 * * * * /usr/bin/flock -n /tmp/ipupdate.lck /usr/local/bin/domain-connect-dyndns update --all --config /Chemin de sauvegarde/settings.txt

C'est tout !

Les outils

Conteneur proxy : Voir la page

  • Création du conteneur
  • Installation et configuration de nginx
  • Installation de certbot pour let's encrypt
  • Voir pour installer des outils de sécurité (fail2ban,...)


Conteneur Mariadb : Voir la page

  • Création du conteneur
  • Installation de mariadb
  • Configuration
  • Création d'un utilisateur


Conteneur PhpMyadmin : Voir la page

  • Création du conteneur
  • Installation d'apache2 et de phpmyadmin
  • Configuration d'apache2 et de phpmyadmin


Les applis


Conteneur tables : Voir la page

  • Installation du serveur web avec apache
  • Installation de tables et corrections des fichiers
  • Installation et configuration de goaccess

Conteneur pmb : Voir la page

(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)

Conteneur wiki : Voir la page

  • Création d'un utilisateur et d'une base de donnée vide pour le wiki
  • Transfert de la base de données
  • Création du conteneur
  • Installation du serveur web
  • Installation de la nouvelle version de mediawiki
  • Initialisation de l'application
  • Modification de LocalSettings.php
  • Récupération du contenu sur l'ancien serveur et transfert des données
  • Corrections

Conteneur wp : Voir la page

(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d'autres conteneurs...)

Stockage et sauvegardes

création d'un volume pour les sauvegardes :

# lxc storage volume create default sauvegarde-lxc size=50GB

Montage du volume dans chaque conteneur :

# lxc config device add <nom du conteneur> sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes


logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.

Sécurisation

Mises à jour automatiques Voir la page

Afin d'automatiser la mise à jour des conteneurs, on crée un script qui va

  • Mettre à jour les conteneurs alpine en fonctionnement
  • Créer un fichier de log
  • Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour
  • Envoyer un mail d'alerte en cas d'erreur
  • Redémarrer les conteneurs en prenant soin de démarrer le conteneur proxy en dernier

Sauvegardes automatiques des données des conteneurs web

On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur mariadb. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.
Les conteneurs :

  • mariadb
  • wiki
  • pmb
  • wp

bénéficieront de ce mécanisme.
Pour les conteneurs proxy, phpma et tables, une simple sauvegarde à la main suffira.
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :

lxc storage volume create default sauvegarde-lxc size=50GB
lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes

mariadb

  • On commence par créer un utilisateur spécifique à la sauvegarde.
    Sous phpMyAdmin, création de l'utilisateur backup_user avec les privilèges SELECT et LOCK TABLES pour les tables pmb, wiki et wordpress.

  • Création du script de sauvegarde des tables
    On sauvegarde les tables pmb, wordpress et wiki en générant un fichier de log dans /var/log/backup_mariadb.log.

/usr/local/bin/backup_mariadb.sh :

#!/bin/sh
DATE=$(date +%Y%m%d_%H%M)
OUTPUT_FILE="/sauvegardes/db_backup_${DATE}.sql.gz"
USER="backup_user"  
PASSWORD="*********" # Mot de passe de backup_user # Liste des bases de données à sauvegarder DATABASES="pmb wiki wordpress" # Exporte chaque base de données et la compresse for DB in $DATABASES; do echo "Sauvegarde de la base de données : $DB" mysqldump -u "$USER" -p"$PASSWORD" "$DB" | gzip >> "$OUTPUT_FILE" done chmod 600 "$OUTPUT_FILE" # Restreindre les permissions echo "Sauvegarde des bases de données terminée : $OUTPUT_FILE" >> /var/log/backup_mariadb.log
  • Rendre le script exécutable :
chmod +x /usr/local/bin/backup_mariadb.sh
  • Automatiser le script le samedi à 2h du matin :
    Avec crontab -e, ajouter la ligne :
0 2 * * 6 /usr/local/bin/backup_mariadb.sh

wiki

MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.
Il crée également un fichier de log /var/log/backup_wiki.log

/usr/local/bin/backup_wiki.sh:

#!/bin/sh
DATE=$(date +%Y%m%d_%H%M)
OUTPUT_FILE="/sauvegardes/wiki_backup_${DATE}.tar.gz"
MEDIAWIKI_ROOT="/var/www/localhost/htdocs/"
BASE_EXTENSIONS="AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor"
FILES_TO_BACKUP="images
LocalSettings.php
extensions-custom/
skins-custom/"

echo "--- Début du script ---"
echo "Date de la sauvegarde : $DATE"
echo "Fichier de sortie : $OUTPUT_FILE"
echo "Racine de MediaWiki : $MEDIAWIKI_ROOT"
echo "Extensions de base : $BASE_EXTENSIONS"
echo "Fichiers de base à sauvegarder : $FILES_TO_BACKUP"
echo "---"

cd "$MEDIAWIKI_ROOT" || { echo "Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT"; exit 1; }
echo "Répertoire courant : $(pwd)"
echo "--- Identification des extensions personnalisées ---"

echo "Création du fichier temporaire /tmp/backup_list.txt"
echo "$FILES_TO_BACKUP" > /tmp/backup_list.txt
cat /tmp/backup_list.txt | while IFS= read -r LINE; do
  echo "Ajout de '$LINE' à la liste de sauvegarde."
done
echo "---"

echo "Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/"
for EXTENSION_DIR in "$MEDIAWIKI_ROOT"extensions/*; do
    if [ -d "$EXTENSION_DIR" ]; then
        EXTENSION_NAME=$(basename "$EXTENSION_DIR")
        echo "Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)"
        IS_BASE=0
        for BASE_EXT in $BASE_EXTENSIONS; do
            if [ "$EXTENSION_NAME" = "$BASE_EXT" ]; then
                IS_BASE=1
                echo "  '$EXTENSION_NAME' est une extension de base."
                break
            fi
        done
        if [ "$IS_BASE" -eq 0 ]; then
            echo "  '$EXTENSION_NAME' est une extension personnalisée. Ajout à la liste de sauvegarde."
            echo "extensions/$EXTENSION_NAME" >> /tmp/backup_list.txt
        fi
    fi
done
echo "--- Liste de sauvegarde complète ---"
cat /tmp/backup_list.txt
echo "---"

echo "Création de l'archive : $OUTPUT_FILE"
tar czf "$OUTPUT_FILE" -T /tmp/backup_list.txt --exclude='./tmp/backup_list.txt'
echo "Commande tar exécutée."

if [ -f "$OUTPUT_FILE" ]; then
    chmod 600 "$OUTPUT_FILE"
    echo "Permissions du fichier de sauvegarde mises à 600."
    echo "Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE" >> /var/log/backup_wiki.log
    echo "--- Fin du script ---"
else
    echo "Erreur : Le fichier de sauvegarde $OUTPUT_FILE n'a pas été créé."
    echo "--- Fin du script \(avec erreur\) ---"
    exit 1
fi

rm /tmp/backup_list.txt
echo "Fichier temporaire /tmp/backup_list.txt supprimé."

NB : Les nombreuses lignes echo ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...

  • Rendre le script exécutable :
chmod +x /usr/local/bin/backup_wiki.sh
  • Automatiser le script le samedi à 3h30 du matin :
    Avec crontab -e, ajouter la ligne :
30  3  *  *  6  /usr/local/bin/backup_wiki.sh

wp

pmb