Migration Site Internet et Mail

Ce script a été écrit aux environs de 2012. Dans le cadre d’une migration de plusieurs sites Internet et de boites mail depuis un serveur (Gentoo) vers un autre plus récent (Debian), j’avais codé un petit script dans le but d’automatiser les tâches.

Contexte

De nombreux éléments étaient à migrer sur le nouveau serveur :

  • les sites Internet de chaque client
  • les boites mail de chaque client
  • les bases de données de chaque client

Scripts

Script principal, comportant les 3 fonctions de récupération automatique :

#!/bin/bash

function RecupWebSite(){

echo "----------------------------------------------------------------"
echo "Récupération du site. Changement des Propriétaires et des droits"
echo "----------------------------------------------------------------"

rsync -av $ServerName:/home/$HomeDirSource/www/ /home/$HomeDirDestin/www/

chown -R $User:$Group /home/$HomeDirDestin/www/
chmod g+rx /home/$HomeDirDestin/www/
chmod o-rwx /home/$HomeDirDestin/www/
}


function RecupBD_Wordpress(){

echo "-----------------------------------------------------------------"
echo "--- Application des correctifs et Dump de la BD ------"
echo "-----------------------------------------------------------------"

sed "s/^define('DB_NAME','$Last_DB_NAME');/define('DB_NAME','$New_DB_NAME'); /g" --in-place www/wp-config.php
sed "s/^define('DB_USER','$Last_DB_USER');/define('DB_USER','$New_DB_USER'); /g" --in-place www/wp-config.php
sed "s/^define('DB_PASSWORD','$LastDBPASS');/define('DB_PASSWORD','$NewDBPASS'); /g" --in-place www/wp-config.php

ssh $ServerName "mysqldump -R $Last_DB_NAME | gzip" | gunzip | mysql $New_DB_NAME --show-warnings

}


function RecupMail(){

echo "-----------------------------------------------------------------"
echo "--- Transfert boite principale et des boites mail utilisateurs --"
echo "-----------------------------------------------------------------"

rsync -av $ServerName $PathLastMails$LastDOMAIN_MAIL_Dir/postmaster/Maildir/new/ /home/$HomeDirDestin/Maildir/new/
rsync -av $ServerName:$PathLastMails$LastDOMAIN_MAIL_Dir/postmaster/Maildir/cur/ /home/$HomeDirDestin/Maildir/cur/
rsync -av $ServerName:$PathLastMails$LastDOMAIN_MAIL_Dir/postmaster/Maildir/tmp/ /home/$HomeDirDestin/Maildir/tmp/

chown -R $User:$Group Maildir/

if [ -n "${AddMail[*]}" ]; then # -n teste si la variable est vide

for i in ${AddMail[*]} # boucle parcourant le tableau des
do
rsync -av $PathLastMails$LastDOMAIN_MAIL_Dir/${AddMail[$i]}/Maildir/new/ /home/$HomeDirDestin/homes/${AddMail[$i]}/Maildir/new/
rsync -av $PathLastMails$LastDOMAIN_MAIL_Dir/${AddMail[$i]}/Maildir/cur/ /home/$HomeDirDestin/homes/${AddMail[$i]}/Maildir/cur/
rsync -av $PathLastMails$LastDOMAIN_MAIL_Dir/${AddMail[$i]}/Maildir/tmp/ /home/$HomeDirDestin/homes/${AddMail[$i]}/Maildir/tmp/
done

fi
}

Explication

Fonction RecupWebSite()

La fonction RecupWebSite() se charge de récupérer les fichiers du répertoire www distant afin de les copier sur le serveur Debian. Elle restitue également les droits et le propriétaire tels qu’ils se trouvaient sous le serveur Gentoo.

La commande rsync permet de faire de la synchronisation distante de fichiers. Ici elle copie le contenu du répertoire www pour aller le placer sur le serveur Debian. L’option -v active le mode verbeux et -a est une archive de plusieurs options : r,l,p,t,g,o,D.

La commande chown permet d’attribuer le bon propriétaire, l’option -R permet la récursivité à tout les fichiers et répertoires contenu dans www.
La commande chmod permet d’attribuer les droits, elle ajoute au groupe ceux de lecture et d’exécution et les supprime tous (lecture,écriture,exécution) à tout autre utilisateur.

Fonction RecupBD_Wordpress()

La fonction RecupBD_Wordpress() a été spécialement écrite pour des sites fonctionnant avec le CMS Wordpress. Elle se charge de modifier le nom de la base de données, le nom d’utilisateur (qui ne sont pas exactement les mêmes sous Debian) et le mot de passe. Cette fonction fait également une sauvegarde de la base de données.

La commande sed permet de remplacer du texte dans un fichier. Ici on cherche à remplacer l’ancien nom de la base de données, l’ancien nom d’utilisateur et l’ancien mot de passe du fichier wp-config.php.

La commande ssh ici permet de se connecter à la base de donnée afin de lancer la commande mysqldump.

Fonction RecupMail()

La fonction RecupMail() est composée de deux parties, la première copie simplement les emails de l’utilisateur postmaster sur le serveur Debian. Le répertoire new contient les e-mails non lu, cur les e-mails lus et tmp les fichiers temporaires.

La deuxième partie de la fonction débute dans la condition. L’option -n teste si le tableau AddMail[*] est vide. S’il contient des adresses e-mails, la boucle for se chargera de le parcourir et de copier, depuis le serveur Gentoo vers le serveur Debian, chaque répertoire correspondant à l’adresse e-mail ainsi que leur contenu.

Configuration

Script de configuration propre à chaque site web, à placer dans chaque répertoire /home/mon-domaine.ext. Il est propre à chaque site Internet et permet de donner une valeur aux variables utilisées dans le script principal (scriptMigration.sh).

#!/bin/bash

source ../scriptMigration.sh

#---------------------------------------------------------------------------#
#---------- Configuration / Paramètres a modifier ----------#
#---------------------------------------------------------------------------#

ServerName="[email protected]"

#----------------------------- PARAMETRES DE LA FONCTION RecupWebSite ------#
HomeDirSource="mon-domaine"
HomeDirDestin="mon-domaine.fr"
User="mon-domaine.fr"
Group="mon-domaine.fr"

#----------------------------- PARAMETRES DE LA FONCTION RecupBD_Wordpress -#
Last_DB_NAME="mon-domainefr"
New_DB_NAME="mon-domaine-fr"
Last_DB_USER="mon-domaine"
New_DB_USER="mon-domaine.fr"
LastDBPASS="xXxXxXxXx"
NewDBPASS="xXxXxXxXx"

#------------------------------ PARAMETRES DE LA FONCTION RecupMail --------#
PathLastMails="/home/vpopmail/domains/"
LastDOMAIN_MAIL_Dir="mon-domaine.fr"

#------------------------------ ** Mettre ici les autres boites mails ------#
AddMail[0]="morty"
AddMail[1]="mon-domaine"
AddMail[2]="morty.mon-domaine"
AddMail[4]="rick"
AddMail[5]="infos"
AddMail[6]="contact"

#------------------------------ APPEL DES FONCTIONS NECESSAIRES ------------#
RecupWebSite # Recupere le contenu du repertoire distant #
RecupBD_Wordpress # Recupere la BD et modifie les MDP pour du WordPress#
RecupMail # Recupere les boites mail et les copie #
> Partager <