Retour : Page Principale > sommaire aide > sommaire aide-mémos

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 404
cd 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-explained

Par 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