Retour : Page Principale > sommaire aide > sommaire aide-mémos
Étapes :
On va wordmover preprod vers pretest (un n-ième environnement pour pas défoncer test).
Ensuite, il faut installer un Wordpress dans un dossier "pretest" :
Si l'erreur suivante survient il faut apt-get install sshpass :
Si l'erreur suivante survient, après avoir installé sshpass, tenter de se connecter manuellement au serveur en SSH une première fois, pour que le mot de passe soit sauvagardé (puis réessayer la commande wordmove) :
Oui mais attention, il y a un piège.
Sur le serveur, PHP fonctionne avec FPM, et c'est l'utilisateur beta qui exécute les scripts; ainsi ceux-ci appartiennent tous à beta et c'est très simple.
Sur nos machines (celle de Mathias en tout cas), si on utilise un module Apache ce n'est pas forcément le cas : pour permettre les mises à jour automatiques de WP notamment, de nombreux fichiers appartiennent non pas à l'utilisateur en cours (ex: mathias) mais à l'utilisateur Apache (généralement www-data).
Pour que la propriété et les permissions des fichiers soient conservés dans ce cas, il faut utiliser SSH avec root et ajouter les options -o et -g à rsync dans le movefile.yml :
ATTENTION il faut puller la preprod dans la copie locale, depuis la copie locale, et jamais l'inverse pour ne pas casser la preprod.
Pour ma part un pull de preprod vers une copie locale marche bien, à ceci près qu'il faut ajuster les permissions du dossier de cache pug à la fin :
Par exemple :
Simulera une mise à jour de la base locale avec la base de l'environnement preprod - aucun fichier ... n'est tiré.
Si tout est OK, retirer le -s
Utilisatation de WordMove
Wordmove permet de copier un environnement Wordpress dans un autre (fichiers et bases de données).Préambule
Wordmove marche bien mais il y a plusieurs choses à connaître pour s'en servir correctement :- il nécessite Ruby 2.4 pour fonctionner, ce qui est galère à installer
- il nécessite SSH, et sshpass si on utilise SSH avec mot de passe; il est préférable d'utiliser des clefs
- ATTENTION à ne pas laisser fuiter les fichiers movefile.yml qui contiennent des mots de passe ! Vérifier qu'ils sont bien interdits dans le .htaccess
- la première fois qu'on copie un WP dans une nouvelle destination, il faut créer une base de données et installer un WP vierge dans la destination (détaillé dans le Cas 1 ci-dessous); les fois suivantes ce n'est plus la peine, il suffit de faire des push
- pour ne pas tout casser il vaut mieux toujours se placer dans un environnement de référence qui marche (ex: preprod) et faire des push vers les autres; pour cette raison seul preprod a un fichier movefile.yml
- sur la même machine, les copies fonctionnent bien car SSH préserve correctement les propriétaires de fichiers et les permissions; d'une machine à l'autre c'est plus complexe
- Wordmove recommande d'ignorer les dossiers .git pour déplacer plus vite, mais dans notre cas il vaut mieux les conserver pour garder nos plugins et notre thème branchés sur Git
Cas 1 - Rétablir un environnement de test à partir de preprod
Étapes :
- écrire un movefile.yml dans preprod
- créer un Wordpress d'accueil vierge
- lui coller le contenu de preprod dans la tête
- copier le .htaccess et le modifier
On va wordmover preprod vers pretest (un n-ième environnement pour pas défoncer test).
movefile.yml
Exemple : le movefile.yml utilisé sur preprod (2017-07-27)global: # sql_adapter: "default" sql_adapter: "wpcli" local: vhost: "https://beta.tela-botanica.org/preprod" wordpress_path: "/home/beta/www/preprod" # use an absolute path here database: name: "wordpress" user: "wordpress" password: "" pretest: vhost: "https://beta.tela-botanica.org/pretest" wordpress_path: "/home/beta/www/pretest" # use an absolute path here database: name: "wordpress_pretest" user: "wordpress" password: "" host: "localhost" ssh: host: "localhost" user: "beta" password: "" # password is optional, will use public keys if available. port: 22 # Port is optional rsync_options: "--verbose" # Additional rsync options, optional exclude: #- ".git/" - ".htaccess" #- ".gitignore" - ".sass-cache/" - "node_modules/" - "bin/" - "tmp/*" - "Gemfile*" - "movefile.yml" - "wp-config.php" - "wp-content/*.sql.gz" test: vhost: "https://beta.tela-botanica.org/test" wordpress_path: "/home/beta/www/test" # use an absolute path here database: name: "wordpress_test" user: "wordpress" password: "" host: "localhost" ssh: host: "localhost" user: "beta" password: "" # password is optional, will use public keys if available. port: 22 # Port is optional rsync_options: "--verbose" # Additional rsync options, optional exclude: #- ".git/" - ".htaccess" #- ".gitignore" - ".sass-cache/" - "node_modules/" - "bin/" - "tmp/*" - "Gemfile*" - "movefile.yml" - "wp-config.php" - "wp-content/*.sql.gz"
Créer un Wordpress d'accueil vierge (la 1ère fois)
Il faut commencer par créer une base de donnée dédiée à notre pretest (non détaillé).Ensuite, il faut installer un Wordpress dans un dossier "pretest" :
cd pretest wp core download --locale=fr_FR --version=4.7 wp config create --dbname=wordpress_pretest --dbuser=wordpress --dbprefix='' --dbpass=password
Coller le contenu de preprod sur pretest
Depuis preprod on lance Wordmove en mode simulation (-s) et si tout va bien on recommence pour de vrai.cd preprod wordmove push -e pretest --all -s
Si l'erreur suivante survient il faut apt-get install sshpass :
rsync: Failed to exec sshpass: No such file or directory (2)
Si l'erreur suivante survient, après avoir installé sshpass, tenter de se connecter manuellement au serveur en SSH une première fois, pour que le mot de passe soit sauvagardé (puis réessayer la commande wordmove) :
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
Ne pas oublier le .htaccess
Sans lui tout part en 404cd pretest cp /home/beta/www/preprod/.htaccess /home/beta/www/pretest/.htaccess vim .htaccess /%s/preprod/pretest/
Cas 2 - Recopier un WP local dans un autre WP local
Faire comme le Cas 1, mais sur sa machine.Oui mais attention, il y a un piège.
Sur le serveur, PHP fonctionne avec FPM, et c'est l'utilisateur beta qui exécute les scripts; ainsi ceux-ci appartiennent tous à beta et c'est très simple.
Sur nos machines (celle de Mathias en tout cas), si on utilise un module Apache ce n'est pas forcément le cas : pour permettre les mises à jour automatiques de WP notamment, de nombreux fichiers appartiennent non pas à l'utilisateur en cours (ex: mathias) mais à l'utilisateur Apache (généralement www-data).
Pour que la propriété et les permissions des fichiers soient conservés dans ce cas, il faut utiliser SSH avec root et ajouter les options -o et -g à rsync dans le movefile.yml :
ssh: host: "localhost" user: "root" password: "" # password is optional, will use public keys if available. port: 22 # Port is optional rsync_options: "--verbose -o -g" # Additional rsync options, optional
Cas 3 - Recopier la preprod en local
On utilise pour cela un movefile.yml dans la copie locale, à vous d'en avoir une en créant une base de données et en installant un WP de base comme indiqué au début du Cas 1.ATTENTION il faut puller la preprod dans la copie locale, depuis la copie locale, et jamais l'inverse pour ne pas casser la preprod.
Pour ma part un pull de preprod vers une copie locale marche bien, à ceci près qu'il faut ajuster les permissions du dossier de cache pug à la fin :
chmod 777 wp-content/themes/telabotanica/cache/pug rm wp-content/themes/telabotanica/cache/pug/*
movefile.yml
Exemple : le movefile.yml utilisé sur la copie locale de Mathias (2017-07-27)global: # sql_adapter: "default" sql_adapter: "wpcli" local: vhost: "http://localhost/test" wordpress_path: "/home/mathias/web/test" # use an absolute path here database: name: "wordpress" user: "wordpress" password: "" host: "localhost" preprod: vhost: "https://beta.tela-botanica.org/preprod" wordpress_path: "/home/beta/www/preprod" # use an absolute path here database: name: "wordpress" user: "wordpress" password: "" host: "localhost" ssh: host: "10.99.34.5" user: "beta" password: "" # password is optional, will use public keys if available. port: 22 # Port is optional rsync_options: "--verbose" # Additional rsync options, optional exclude: #- ".git/" - ".htaccess" #- ".gitignore" - ".sass-cache/" - "node_modules/" - "bin/" - "tmp/*" - "Gemfile*" - "movefile.yml" - "wp-config.php" - "wp-content/*.sql.gz" test: vhost: "https://beta.tela-botanica.org/test" wordpress_path: "/home/beta/www/test" # use an absolute path here database: name: "wordpress_test" user: "wordpress" password: "" host: "localhost" ssh: host: "10.99.34.5" user: "beta" password: "" # password is optional, will use public keys if available. port: 22 # Port is optional rsync_options: "--verbose" # Additional rsync options, optional exclude: #- ".git/" - ".htaccess" #- ".gitignore" - ".sass-cache/" - "node_modules/" - "bin/" - "tmp/*" - "Gemfile*" - "movefile.yml" - "wp-config.php" - "wp-content/*.sql.gz"
Récupérer le contenu de preprod dans la copie locale
Depuis la copie locale on lance Wordmove en mode simulation (-s) et si tout va bien on recommence pour de vrai.wordmove pull -e preprod --all -s
Liste des possibilités configurées
preprod > test
Sur preprod, dans /home/beta/preprod :wordmove push -e test --all
preprod > pretest
Sur preprod, dans /home/beta/preprod :wordmove push -e pretest --all
preprod > copie locale
Dans votre copie locale (voir configuration dans le Cas 2 ci-dessus), dans le dossier racine de votre WP :wordmove pull -e preprod --all
Usage et flags
Pour une gestion plus fine des actions de wordmove : https://github.com/welaika/wordmove/wiki/Usage-and-flags-explainedPar exemple :
wordmove pull -e preprod -d -s
Simulera une mise à jour de la base locale avec la base de l'environnement preprod - aucun fichier ... n'est tiré.
Si tout est OK, retirer le -s
wordmove pull -e preprod -d