Mise à jour de drupal 8 sur un hébergement mutualisé

Même si elle n'a rien de complexe, la mise à jour du Drupal Core sur un hébergement mutualisé peut s'avérer fastidieuse et en rebuter plus d'un lorsqu'on ne dispose pas d'un accès ssh.

La mise à jour d’une version 8.x.y vers la dernière version 8.x.y nécessite globalement 9 étapes :

  1. Mise en mode maintenance du site
  2. Sauvegarde de la base de données
  3. Sauvegarde de l'ensemble des fichiers
  4. Récupération de la dernière version 8.x.y
  5. Suppression des répertoires core et vendor ainsi que des fichiers présents à la racine du site
  6. Transfert des nouveaux fichiers
  7. Restauration des fichiers .htaccess, robots.txt et/ou tout autre fichier modifié manuellement
  8. Exécution du script update.php
  9. Mise en ligne du site

A partir d'un accès FTP, armez-vous de patience et de café ! il faudra de longues minutes pour sauvegarder votre site, supprimer les répertoires core et vendor, puis transférer les nouveaux fichiers.

Pour gagner du temps, j’utilise un script PHP qui va s’occuper des étapes 3 à 7.

<?php

// Configuration
$drupalRelease = "drupal-8.x.y";
$www = "chemin_du_répertoire_racine_contenant_le_site";
$arc = "chemin_du_répertoire_de_sauvegarde";
$tmp = "chemin_du_répertoire_contenant_les_fichiers_à_sauvegarder";
$date = date("Ymd-His");

$starttime=time();
echo "<pre>";

// 1. Backup site
exec("cd ".$www."; tar -czvf ".$arc."/site-".$date.".tar.gz * ", $out, $res);
if ($res > 0) {
    echo "Error : cd ".$www."; tar -czvf ".$arc."/site-".$date.".tar.gz * \n";
    echo "Status : ".$res."\n";
    exit(1);
}

// 2. Copy files
system("cp -f ".$www."/.* ".$tmp);
system("cp -f ".$www."/*.* ".$tmp);
system("cp -f ".$www."/sites/default/settings.php ".$tmp);

// 3. Get the drupal-8.x.y release
system("cd ".$www."; wget https://www.drupal.org/files/projects/".$drupalRelease.".tar.gz");

// 4. Untar drupal-8.x.y.tar.gz
unset($out);
exec("cd ".$www."; tar -xzvf ".$drupalRelease.".tar.gz" , $out , $res);
if ($res > 0) {
    echo "Error : tar -xzvf ".$drupalRelease.".tar.gz\n";
    echo "Status : ".$res."\n";
    exit(1);
}

// 5. rm -rf core vendor
system("rm -rf ".$www."/core ".$www."/vendor ");

// 6. rm -f *.* .*
system("rm -f ".$www."/.* ");
system("rm -f ".$www."/*.* ");

// 7. cp -Rf drupal-8.x.y/* /path/to/your/installation
system("cd ".$www." ; cp -Rf ".$drupalRelease."/* ".$www );

// 8. cp -f drupal-8.x.y/.* /path/to/your/installation
system("cd ".$www." ; cp -f ".$drupalRelease."/.* ".$www );

// 9. Restore files
system("cp -f ".$tmp."/.htaccess ".$www);
system("cp -f ".$tmp."/robots.txt ".$www);

// 10. rm -rf drupal-8.x.y
system("cd ".$www." ; rm -rf ".$drupalRelease );



echo "\n\nCompleted in ". ( time()-$starttime )."s";
echo "</pre>";
exit(0);
?>

 

Étiquettes