Voici un petit script pour vous faciliter vos mises à jour wordpress.
Ce script devient vraiment indispensable si vous avez plusieurs sites tournant sous wordpress (et oui wpmu c’est pas encore ça ….)
Ce script est une v1 codé par Martin Panel et moi même afin de maintenir nos wordpress respectifs et quelques autres sites.
Le but est de ne pas perdre du temps, à maintenir ses sites mais surtout à faire les upgrades secu parce que souvent ça passait à la trappe pour les petits oubliés dans un coin du serveur.
Ou alors c’était des mises à jour sauvages sans backup …
Nous avons vainement cherché un script d’upgrade qui aurait pu faire l’affaire mais ne sommes tombé que sur des script incomplets ou pire dangereux, voir longs à utiliser ….
Que fait ce script ?
Comment l’utiliser ?
Comment la mise à jour fonctionne t elle ?
Exemple de fichier de donnée:
# # Utilisez la syntaxe suivante: # [Name]|[AbsolutePathWhithSlashes] # ex: # My_wordpress_super_website|/home/login/mywebsite/wordpress/ # # Pas d'espace dans les nom sinon mettez les entre quotes # N'oubliez pas les slashes de début et fin pour le chemin (absolu) # Ajoutez un retour à la ligne ou un dièse en fin de fichier. # websiteA|/home/website/websiteA/www/ website_B|/home/website/websiteB/wordpress/
Prochaines versions
Xorax et moi avons codé ce script pour nos propres besoins et il nous convient parfaitement en l’état.
Cependant nous n’avons pas tous forcement la même utilisation et nous sommes donc à l’écoute de toutes les demandes de nouvelles fonctionnalités / améliorations.
Dans un coin de notre tête:
Architecture
Pourquoi ne pas avoir choisit un wordpress mu ?
D’une part parce qu’il aurait fallu migrer et surtout parce que wpmu n’est pas au points pour nos besoin.
Pourquoi faire des installs multiples en surchargeant le serveur au lieu de faire des symlinks ?
Les symlinks ça tue, ça permet de sauver de la ram, mais à mettre à jour dans certains cas ça sux carrément et ça pose pleins d’autre soucis (path…).
Télécharger / Le code
Télécharger le script avec un exemple de fichier data:
http://www.billyboylindien.com/wp-content/uploads/wordpress_upgrade.zip
Le code est sous licence MIT.
S’il vous plait|sert merci beaucoup de nous aider à le faire évoluer avec vos suggestions.
Si vous l’utilisez, il peut sans doute intéresser aussi vos lecteurs, parlez de lui.
/*
##################
# Modify start #
##################
*/
//Vars
$temp = '/tmp'; //Where we stock the temporaries files
$globalbackupdir = '/backup/wordpress_upgrade_backup/'; //Where your save will be stocked
//data file
$datafile = "/backup/wordpress_upgrade_backup/wplist.txt"; //The file with the list of wp is
$datadelimiter = "|"; //The delimiter used in the file
/*
##################
# Modify end #
##################
*/
//Download the latest version of wordpress and unzip in the temp dir
shell_exec('wget -O '.$temp.'/wp-latest.tar.gz http://wordpress.org/latest.tar.gz');
shell_exec('tar xzf '.$temp.'/wp-latest.tar.gz -C '.$temp);
shell_exec('rm '.$temp.'/wp-latest.tar.gz');
$temp_wp = $temp . '/wordpress';
shell_exec("rm -Rf $temp_wp/wp-content");
//check if its ok
if (file_exists($temp_wp.'/wp-config-sample.php')) {
//create dated backup dir
$backup_dirdate = $globalbackupdir . date('Y-m-d');
mkdir($backup_dirdate);
//open and fetch datafile
if($fp = fopen($datafile,"r")) {
while ($line = fgets($fp)) {
$line = trim($line);
if (substr($line, 0, 1) == '#') {
continue;
}
$tab=array();
$tab = explode($datadelimiter, $line);
$wpname = trim($tab[0]);
$wpdir = rtrim(trim($tab[1]), '/');
echo "####################################\nUpgrade $wpname go gO GO\n####################################\n";
//do the backup
if (file_exists($wpdir . '/wp-config.php')) {
//create backup dir
$backup_dir = $backup_dirdate . '/' . $wpname .'_'.substr(md5(time()), 0, 8);
mkdir($backup_dir);
//Mysql backup
$conf = file_get_contents($wpdir.'/wp-config.php');
$conf = preg_replace('#^.*require.*$#m', '', $conf);
$conf = preg_replace('#<\?php|\?>#', '', $conf);
eval($conf);
echo "saving database ...\n";
$ret = shell_exec('mysqldump --host='.DB_HOST.' --user='.DB_USER.' --pass='.DB_PASSWORD.' '.DB_NAME.' > '.$backup_dir.'/sql_backup.sql');
if (preg_match('#error#i', $ret)) {
die ('database cannot be saved');
}
echo "database saved\n";
//files backup
echo "saving wp files ...\n";
shell_exec("tar czf $backup_dir/files_backup.tar.gz $wpdir/"); // You can add --exclude 'wp-content/*' for not backup the wp-content directory (and save diskspace)
echo "wp files saved\n";
//Copie new files
echo "Copying news files ...\n";
shell_exec("cp -Rf $temp_wp/* $wpdir/");
//Upgrade the DB
echo "upgrade database ...\n";
$upgrade_script = "<?php require ".$wpdir."/wpload.php'; require_once(ABSPATH.'wp-admin/includes/upgrade.php'); wp_upgrade(); ?>";
$upgrade_script = 'echo "'.$upgrade_script.'" | php';
shell_exec($upgrade_script);
echo "wp $wpname upgraded. enjoy !\n";
}
else {
die ("$wpdir is not a valid wordpress directory\n".$usage);
}
}
/* fermeture fichier */
fclose ($fp);
} else {
echo "Cannot open the file";
}
shell_exec("rm -Rf $temp_wp/");
}
else {
die("error: cannot view wp in $temp_wp\n");
}
Ce script est dans la ligné de celui du backup de base mysql puis envoie par ftp.
Encore merci à Martin un développeur comme on en fait plus !
10 Commentaires
Recevoir les commentaires par email
Un script fort intéressant, en effet. La voie du PHP est tout à fait pertinente.
Pour ma part, je me suis orienté vers un script bash qui accède aux sites distants par ssh (via scp), ce qui permet notamment, avec des clés ssh installées, de ne pas nécessiter d’identification par mot de passe. Cependant, il a l’inconvénient de ne pas aisément accéder aux bases de données, et je sens que passer par curl ne sera pas évident, surtout si les noms des fichiers du panneau d’administration changent, ou que leur fonctionnalité diffère selon les versions.
Quoi qu’il en soit, il manque effectivement une solution robuste et automatisée qui puisse gérer un parc de sites sous WordPress, qu’ils soient locaux ou distants.
Bonne continuation !
Oui c’est vrai que dans le cas d’un site distant le script n’est pas pertinent.
Le choix du php s’est fait simplement (Contre mon gré poourtant) pour pouvoir inter connecter facilement le script et les wp-config.
[...] serveur sur lequel vous gérez une floppé de Wordpress, voici un petit script crée par les amis Billyboylindien et Xorax qui va vous permettre de mettre à jour tous ces wordpress en un seul coup… Alors [...]
[...] bien il existe un script qui va vous permettre de mettre à jour plusieurs Wordpress en une seule opération, sans craindre de perdre vos données [...]
[...] Alors que je mettais tranquillement à jour les différents blogs squattant mon hébergement, je suis tombé sur un script de mise à jour automatisée… [...]
Excellent cet outil merci beaucoup aux concepteurs ça va aider pleins de gens à mettre à jour facilement leurs blogs.
[...] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress [...]
Bonjour,
Est ce que votre script permet de mettre à jour plusieurs blog wordpress hébergé sur des domaines différents donc avec des adresses ftp différentes ?
Le tout à partir de votre script configuré sur un seul ftp ?
@Mathieu,
Non le script est fait pour un hébergement de plusieurs wordpress sur un serveur dedié avec tous les fichiers en local.
[...] 2 : vous utilisez ce script qui fonctionnera a priori parfaitement si vous avez tous vos blogs sur le même [...]
Trackbacks
-
Comment mettre à jour plusieurs Wordpress en une seule fois | Korben says:
28 November 08 at 7:56
-
Gagner du temps pour la maintenant de blog : mise à jour de plusieurs Wordpress d’un coup | Gagner du Temps .net says:
30 November 08 at 21:16
-
Pochade » Blog Archive » Wordpress 2.6.5 - le suplice de la mise à jour says:
4 December 08 at 10:12
-
Brève Wordpress: 40 liens, thèmes, plugins et astuces en tout genre ! says:
19 February 09 at 13:37
-
Comment faire la mise à jour de tous ses blogs WordPress facilement ? « SmartXBiz says:
25 March 09 at 23:00
URL de trackback: http://www.billyboylindien.com/hebergement/script-upgrade-multi-wordpres.html/trackback/[...] serveur sur lequel vous gérez une floppé de Wordpress, voici un petit script crée par les amis Billyboylindien et Xorax qui va vous permettre de mettre à jour tous ces wordpress en un seul coup… Alors [...]
[...] bien il existe un script qui va vous permettre de mettre à jour plusieurs Wordpress en une seule opération, sans craindre de perdre vos données [...]
[...] Alors que je mettais tranquillement à jour les différents blogs squattant mon hébergement, je suis tombé sur un script de mise à jour automatisée… [...]
[...] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress [...]
[...] 2 : vous utilisez ce script qui fonctionnera a priori parfaitement si vous avez tous vos blogs sur le même [...]