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 !

mots clefs relatifs : maj wordpress demande ftp | back up base de données en php | back up de la di | back-up base de donnée wordpress | deux wordpress sur une même base | mettre a jours wordpress sans perdre de donnée | mettre wordpress dans page html | mise a jour automatique base de donnée serveur | mise à jour de fichiers sur un serveur script | plugin wordpress backup fichier | r4 upgrade comment l'utiliser | scrip php wordpress trackback | script de mise a jour auto | script php blog multiple | scripts upgrade | serveurs robuste dedies pour backup | thèmes pour r4i | upgrade wordpress | using phpshell_exec('unzip | wordpress backup | wordpress cli script | wordpress content retour a la ligne | wordpress free upgrade | wordpress install upgrade | wordpress proposer un fichier code de télécharger | wordpress upgrade base | mettre a jour facilement wordpress | wordpress fichier nom base de données | backup wordpress mu | solution pour mettre a jour base mysql distante | script mise a jour base de donnée | wordpress commande php base de donnée | backup wordpress mise à jour | comment mettre à jour une base de donnée | backup de la base en php | manque partition update backup wii | mise a jour worpress auto | script mise à jours automatique | exemple de "fichier de donnée" | script base de données html | script php backup bdd | wordpress mise à jour de la base de données requise en boucle | backup bdd wordpress | hebergement script | wordpress + bdd distante | backup wordpress | chemin absolu de la bdd wordpress | problème mise à jour base de donnees requise wordpress | script wordpress mise à jour | fichier wordpress base de données | heberger plusieurs blog wordpress | auto install fichier mise a jour des fichier sous domaine php | backup base script | boucle mise à jour base de données requise wordpress | php base de donnee dans fichier | bakcup wordpress | encodage base de donnée wordpress backup | hebergement wordpress bdd | backup bdd automatique | multi hébergement fichier | script hébergement fichier | backup d'une base de données php | fichier upg | script maj | r4 upgrade | mise à jour de la base de données requise. pb wordpress | exemple shell_exec | script de backup de fichiers | ecrit script shh pour auto backup fichier | plusieurs wordpress même hébergement | backup script wordpress | comment faire un backup wordpress | base de donné cannot open file | probleme d'identification de ma r4i | envoi automatique de fichiers à un serveur | script de mise à jour | comment lire les fichiers .upg | comment faire des retours à la ligne dans wordpress | php script backup base de donnée | +piwik curl upgrade | backup dédié base fichiers | probleme avec les images exclude dans magento | base de donnée requis | plusieurs bases de donnée wordpress mu | php shell_exec rm | script mettre nom de fichier dans base | backup base | base mysql mise à jour automatique | fichier de donnée | lire un fichier upg | où sont les fichirs de la base de données wordpress | backup de donnée script | misea jour données mysql via ssh | comment ouvrir un fichier upg | backup bdd | back up bdd wordpress | mysql lire les fichiers de la bdd | chemin aboslu vers wordpress | magento fichier configuration base de donnee | mise à jour wordpress back-up base de données | ou mettre script bdd | "mise à jour de la base de données" wordpress boucle | dossier temporaire manquant wordpress | fichiers upg | hebergement de fichier multi 2.0 | mise à jour de la base de données requise boucle | code backup bdd php | curl php télécharger multiple | erreur mise a jour automatique wordpress | backup base de donnée wp backup | impossible d'acceder wp-admin upgrade | envoie automatique base de donnée | faire un backup blog hébergé sur wordpress | ftp | fichier bdd backup | un dossier temporaire est manquant wordpress | backup de base de donnee | lire des fichiers upg | comment lire un fichier upg | comment passer les nouveaux backups avec une r4 | deroulement d'une mise a jour automatique | données de panel+script r | _backup martin | backup mysql wordpress | editer fichier upg | exemple de base de données avec wordpress | backup dossier wordpress contenu | chemin absolu mysqldump server free | chmod wordpress mise à jour automatique php | comment mettre code dans la boucle wordpress | boucle mise à jour dans bdd en php | free.fr backup fichier php | backup bassse de données wordpress | retour free upgrade | base wordpress a 0 | comment faire backup base de donnee wordpress | comment accéder à une base donnée sql distante via script php | comment acceder au base de donnée a partir du jquery | backup bdd php | backup des fichier magento | este backup | base d'exemples pour wordpress | faire backup wordpress | wordpress un dossier temporaire est manquant. | accès base de données wordpress fichier | dossier manquant dans wordpress | contenu du fichier r4i licence | chmod wordpress free | backup script multi-archive tar.gz | un dossier temporaire est manquant. wordpress | wordpress "un dossier temporaire est manquant." | css upgrade wordpress | de wordpress vers wordpress multiple | back bdd wordpress | dossier temporaire est manquant + wordpress | conserver fichiers base de donnees | base donnee wordpress gerer | bdd curl | durée d'upgrade wordpress | envoi de donnees http base de donnees | backup automatique bdd linux | comment mettre a jour un theme wordpress genere localement sur le site distant

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: http://www.billyboylindien.com/hebergement/script-upgrade-multi-wordpres.html/trackback/

Commenter

Note: La modération des commentaires est activée