Aller au contenu principal

Migration

Comment se prépare et se déroule une migration ?

Il s'agit là d'une vision plutôt « interne » mais qui vous donnera les éléments à prendre en compte ainsi que l'ordre dans lequel les opérations doivent être faites.

Objectif

  1. migrer les applications vers un autre serveur ;
  2. limiter la durée d'indisponibilité.

Préparation

Côté Kokiris - auditer l'existant

Référencer les services :

  • serveurs ;
  • pile logicielle ;
  • applications ;
  • modules apache ;
  • modules php ;
  • utilisateurs et leurs id ;
  • acl ;
  • tâches crons ;
  • iplb ;
  • nasha ;
  • ip ;
  • vrack.

Côté Client

Il faut :

  • planifier le passage en maintenance ;
  • préparer la baisse du TTL DNS afin de pouvoir migrer rapidement.

Exemple de déroulé des opérations

Une migration à blanc doit être est en premier effectuée, si elle réussie, la migration définitive doit alors suivre.

ActeursserveursActionsOutilsCommentaires
1CLIENTDNSbaisser les TTL DNS afin de faciliter la migration et le retour arrière--
2KOKIRISles deuxcopier la clef ssh vers le nouveau serveur--
3KOKIRISles deuxvérifier que les uid des comptes clients soient identiques-afin d'éviter un problème de permission/appartenance
4KOKIRISsourcecopier configurations apache et certificats ssl vers le nouveau serveurscp/rsync-
5KOKIRISsourcecopier configurations globale apache/MySQL/php(fpm) spécifique vers le nouveau serveurscp/rsync-
6KOKIRISsourcecopier configurations csync spécifique vers le nouveau serveurles yeuxne pas écraser bêtement le fichier cible !
7KOKIRISsourceSi Multi avec HAP : copier le répertoire /home/adminXXX/ssl/hap vers le nouveau serveurscp/rsyncSi multi et beaucoup de certificats
8KOKIRISles deuxdésactivation de l'alertingshinken/icinga/
pingdom
-
9CLIENTsourcepasser les sites en maintenance--
10KOKIRISsourcecopier fichiers et répertoires clientscp/rsync-
11KOKIRISsourceexporter les bases sql puis les transférer vers le nouveau serveurmysqldump puis
scp/rsync
-
12KOKIRISsourcecopier fichiers et répertoires vers le nouveau serveurscp/rsync-
13KOKIRISsourcesauvegarder les permissionsgetfacl -R mon repoptionnel
14KOKIRISciblemodifier les chaînes de connexionsvimsi réplication
15KOKIRISsourcecopier les tâches cron vers le nouveau serveur, mais les commenter ( /etc/cron.d/*
/var/spool/cron/*)
scp et vim-
16KOKIRIScibleactiver la version cli de PHP par défaut (requis par les crons)update-alternatives --set php /usr/bin/php8.2-
17KOKIRISsourceen théorie, copier les logs apache vers le nouveau serveurscp/rsyncobligation légale de conserver
un an de log
18KOKIRISciblevérifier les permissions et l'appartenance des nouvelles donnéesls -la-
19KOKIRIScibleréinjecter le dump sqlmysql-
20KOKIRISciblevérifier que les tâches cron soient présentent/etc/cron.d &&
crontab
-
21CLIENTciblevérifier que les sites fonctionnent, sinon corrigernavigateur et curl-
-KOKIRIS et CLIENT-fin de migration à blanc et début de la migration définitive--
22KOKIRISsourcecopier fichiers et répertoires clientscp/rsync-
23KOKIRISsourceexporter les bases sql puis les transférer vers le nouveau serveurmysqldump puis
scp/rsync
-
24KOKIRIScibleréinjecter le dump sqlmysql-
25CLIENTciblevérifier que les sites fonctionnent, sinon corrigernavigateur et curl-
26CLIENTdnsfaire pointer le nom de domaine vers l'ip du serveur/iplb--
27KOKIRISciblevérifier que LE renouvelle bien les certificats--
28CLIENTciblerecette - vérification par le client--
29KOKIRIS ou CLIENTcibleréactivation des cron en les décommentantvim/nano-
30KOKIRIScibleréactivation de l'alertingicinga/
uptime-kuma
-
31KOKIRISciblevérifier que les chemins de sauvegarde soient bons (/root/.config/resticprofile.yml)vim-

Recette

Avant toute migration, le client devra préalablement avoir validé que son application soit fonctionnelle sur la nouvelle plateforme.

Aide à la migration MySQL

Création de compte sur Mariadb

CREATE USER 'client'@'%' IDENTIFIED BY 'password';

Changement des privileges

GRANT ALL PRIVILEGES ON * . * TO 'client'@'%';

Changement de mot de passe

ALTER USER 'client'@'%' IDENTIFIED BY 'new_password';

Création des comptes, exemple de méthode avec bash

Après obtenu la liste des bases, utilisateurs et mots passe, utilisez un script ressemblant à cela

#!/bin/bash -

db_list=("dolbarr" "17992" "sio")
user_list=("sio" "mpuser" "oste")
passwd_list=("u208" "l0rd" "m@020")

for i in ${!db_list[@]} ; do
user=${user_list[$i]}
passwd=${passwd_list[$i]}
for a in localhost "%" ; do
mysql -e "CREATE USER '$user'@'$a' IDENTIFIED BY '$passwd';"
mysql -e "CREATE DATABASE ${db_list[$i]} ;"
mysql -e "GRANT ALL PRIVILEGES ON ${db_list[$i]}.* To '$user'@'$a';"
done
done

Dump de la base

mysqldump madatabase --single-transaction > /tmp/madatabase.sql

Synchronisation des fichiers et répertoires avec rsync

Exemple de ligne de commande

rsync -e 'ssh -p 65022' -avPz --delete-after /home/if65891/htdocs kks1234.kokiris.net:/home/if65891/

Synchronisation de la Configuration apache avec rsync

rsync -e 'ssh -p 65022' -avPz --delete-after /home/adminpj2352/sites-enabled/apache/* kks1234.kokiris.net://home/adminpj2352/sites-enabled/apache/