Maj auto de Worpdress multiples

Posté le 27 Nov, 2008 dans hebergement, truc astuce, web | 17 Commentaires

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 ?

  • Il permet de mettre à jour plusieurs installation de wordpress en une seule fois sans interactions particulières

Comment l’utiliser ?

  • Compléter le fichier de donnée (Nom et chemin des wordpress à upgrader). Voir ci dessous pour le format
  • Copiez ce script et le fichier de donné sur votre serveur (dédié sinon vous pouvez tenter ….)
  • Configurez le script (path, dossier de backup …)
  • Rendez le exécutable (chmod +x)
  • C’est partit

Comment la mise à jour fonctionne t elle ?

  • Téléchargement de la dernière version de WP
  • Backup des fichiers ET de la base de donnée de votre wordpress automatiquement (pas besoin de renseigner les login et pass)
  • Met en place les nouveaux fichiers (en conservant VOTRE wp-content intact)
  • Met à jour votre base de données
  • Plus d’infos ? => Lisez le code 😉

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:

  • Possibilité de taper dans le script en direct (stdin) pour du one shot
  • Interactions (choix des sites à upgrader)
  • interaction avec un script d’install WP (la boucle est bouclé)
  • Mise à jour des plugins (interactive ? En tout cas un peu plus complexe à mettre en oeuvre)
  • … Vos Idées/Besoins

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 !

17 Commentaires

Recevoir les commentaires par email

  1. Martin dit :

    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 ! 🙂

  2. 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.

  3. […] 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 […]

  4. […] 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 […]

  5. […] 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… […]

  6. Renc dit :

    Excellent cet outil merci beaucoup aux concepteurs ça va aider pleins de gens à mettre à jour facilement leurs blogs.

  7. […] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress […]

  8. Matthieu dit :

    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 ?

  9. @Mathieu,
    Non le script est fait pour un hébergement de plusieurs wordpress sur un serveur dedié avec tous les fichiers en local.

  10. […] 2 : vous utilisez ce script qui fonctionnera a priori parfaitement si vous avez tous vos blogs sur le même […]

  11. […] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress […]

  12. […] Billyboylindien et Xorax, ont décidé de nous rendre la vie toute belle ! Ils ont écrit un petit script pour faciliter les mises à jour pour les webmasters gérant plusieurs domaines propulsant […]

  13. clawfire dit :

    Arrete mois si je me trompe mais il n’est pas possible en curl de toucher à l’auto-upgrade wordpress à distance ? juste pour info perso parceque comme ca je pourrais me faire un script qui va aller déclencher toutes les maj apres avoir DL via FTP les backup …

  14. […] WordPress/PHP: Un script en PHP pour mettre à jour plusieurs blog sous wordpress en un clic. (En version 1 mais à tester et à suivre). Maj auto de Worpdress multiples […]

  15. […] WordPress Upgrade — Ce script développé par Martin Panel et Billyboylindien permet de mettre à jour automatiquement plusieurs installations de WordPress en une seule passe. Via Free Tools. Voici le déroulement des opérations : 1) Téléchargement de la dernière version de WordPress ; 2) Backup des fichiers et de la base de données de votre WordPress (pas besoin de renseigner les login et password) ; 3) Mise en place des nouveaux fichiers (conserve votre wp-content intact) ; 4) Mise à jour de votre base de données. […]

  16. lordgun dit :

    hello,
    faut faire gaffe au eval()… si un de tes bloggeurs hébergés modifie de manière vicieuse son wp-config, pouf tu peux te retrouver avec ton serveur effacé, des rootkits installés, etc.

  17. […] WordPress Upgrade — Ce script développé par Martin Panel et Billyboylindien permet de mettre à jour automatiquement plusieurs installations de WordPress en une seule passe. Via Free Tools. Voici le déroulement des opérations : 1) Téléchargement de la dernière version de WordPress ; 2) Backup des fichiers et de la base de données de votre WordPress (pas besoin de renseigner les login et password) ; 3) Mise en place des nouveaux fichiers (conserve votre wp-content intact) ; 4) Mise à jour de votre base de données. […]

Trackbacks

  1. […] 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 […]

  2. […] 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 […]

  3. […] 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… […]

  4. […] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress […]

  5. […] 2 : vous utilisez ce script qui fonctionnera a priori parfaitement si vous avez tous vos blogs sur le même […]

  6. […] Script de mise à jour automatique de plusieurs installation wordpress Projet prometteur pour la gestion simplifier de plusieurs blogs wordpress […]

  7. […] Billyboylindien et Xorax, ont décidé de nous rendre la vie toute belle ! Ils ont écrit un petit script pour faciliter les mises à jour pour les webmasters gérant plusieurs domaines propulsant […]

  8. […] WordPress/PHP: Un script en PHP pour mettre à jour plusieurs blog sous wordpress en un clic. (En version 1 mais à tester et à suivre). Maj auto de Worpdress multiples […]

  9. […] WordPress Upgrade — Ce script développé par Martin Panel et Billyboylindien permet de mettre à jour automatiquement plusieurs installations de WordPress en une seule passe. Via Free Tools. Voici le déroulement des opérations : 1) Téléchargement de la dernière version de WordPress ; 2) Backup des fichiers et de la base de données de votre WordPress (pas besoin de renseigner les login et password) ; 3) Mise en place des nouveaux fichiers (conserve votre wp-content intact) ; 4) Mise à jour de votre base de données. […]

  10. […] WordPress Upgrade — Ce script développé par Martin Panel et Billyboylindien permet de mettre à jour automatiquement plusieurs installations de WordPress en une seule passe. Via Free Tools. Voici le déroulement des opérations : 1) Téléchargement de la dernière version de WordPress ; 2) Backup des fichiers et de la base de données de votre WordPress (pas besoin de renseigner les login et password) ; 3) Mise en place des nouveaux fichiers (conserve votre wp-content intact) ; 4) Mise à jour de votre base de données. […]

URL de trackback: https://www.billyboylindien.com/hebergement/script-upgrade-multi-wordpres.html/trackback/