WebArea/Compat/Wordpress/Fr

From TuxFamilyFAQ
Revision as of 20:04, 28 April 2018 by Xavier (talk | contribs) (→‎Étape n°1 : activer les options requises: Adjust link: User/En -> User/Fr)
Jump to navigationJump to search

Déplacer les fichiers uploadés sur les espaces de téléchargement de TuxFamily

WordPress permet nativement de déplacer les fichiers uploadés vers un dossier arbitraire associé à une URL tout aussi arbitraire. Cela colle parfaitement au modèle choisi par TuxFamily pour implémenter ses espaces de téléchargement. Cette section décrit comment migrer les fichiers que vous avez uploadés depuis leur emplacement par défaut (en l'occurrence wp-content/uploads) jusque sur les espaces de téléchargement de TuxFamily, épargnant ainsi le quota un peu serré affecté à votre projet (typiquement 200M). Notez bien que cette approche n'est pas adaptée si par un moyen ou par un autre, vous vous êtes retrouvé à stocker des fichiers privés sous wp-content/uploads (par exemple des sauvegardes, des dumps de bases de données, des fichiers qui ne devraient être accessibles qu'à des utilisateurs identifiés, etc.) dans la mesure où tous les fichiers stockés sur les espaces de téléchargement de TuxFamily sont considérés 100% publics.

Étape n°1 : activer les options requises

Depuis WordPress 3.5, les options nécessaires pour configurer votre instance WordPress sont cachées par défaut (supposément dans des buts de simplicité et de convivialité). Pour activer ces options, lancez la requête SQL suivante sur votre base de données :

UPDATE wp_options SET option_value = 'wp-content//uploads' WHERE option_name = 'upload_path' AND (option_value IS NULL OR option_value  = '');

Vous ne devriez pas avoir besoin d'ajuster cette requête à moins que vous n'ayez choisi un préfixe personnalisé lors de l'installation de votre instance WordPress ; si c'est le cas, remplacez "wp_options" par "votre_prefix_personnalise_options".

Selon vos compétences, vous pouvez lancer cette requête soit en utilisant phpMyAdmin soit en utilisant l'interface en ligne de commande mysql en SSH ; dans les deux cas, utilisez les paramètres et identifiants de connexion de votre wp-config.php -- les identifiants que vous utilisez pour le panel, le forum et cette FAQ ne fonctionneront pas.

Étape n°2 : définir les bonnes options

Identifiez-vous sur votre instance WordPress (wp-login.php) et rendez-vous dans Settings > Media (wp-admin/options-media.php). Définissez les options suivantes :

  • Store uploads in this folder (variable upload_path): /data/repository/votreprojet/dossier-dedie
  • Full URL path to files (variable upload_url_path): https://download.tuxfamily.org/votreprojet/dossier-dedie

Dans les deux cas, remplacez votreprojet et dossier-dedie par des valeurs plus appropriées. Cliquez sur "Save changes".

Étape n°3 : déplacer vos fichiers

Cette 3ème étape consiste simplement à déplacer vos fichiers uploadés de wp-content/uploads vers /data/repository/votreprojet/dossier-dedie. Bien que cela puisse se faire en FTP/FTPS/SFTP client, we recommend that your leverage TuxFamily's SSH access and the power of the command-line like this:

cd /home/votreprojet/
mv votre.espace.web-web/htdocs/chemin/de/votre/wordpress/wp-content/uploads votreprojet-repository/dossier-dedie

Si votre WordPress est flambant neuf, c'est déjà fini. Autrement, vous voudrez probablement vous assurer que votre base de données ne contient plus la moindre URL obsolète, ce qui est justement l'objet de l'étape n°4.

Étape n°4 : remplacer les anciennes URLs dans toute la base de données

WordPress étant un CMS relativement complexe et très modulaire, il tend à stocker des données sérialisées dans sa base de données ; les données sérialisées peuvent s'avérer de véritables obstacles pour les opérations de recherche et de remplacement ; c'est pourquoi il est conseillé de :

  • sauvegarder votre base de données MySQL (via phpMyAdmin, l'utilitaire mysql ou tout simplement les dumps quotidiens fournis par TuxFamily) ;
  • installer Search Replace DB ; le formulaire de téléchargement lourdingue peut être évité en prenant la dernière version sur https://github.com/interconnectit/Search-Replace-DB/releases;
  • utiliser cet outil pour remplacer les vieilles URLs ; typiquement, il faut remplacer :
    • http://votre.espace.web/your/prefixe/wp-content/uploads
    • https://votre.espace.web/your/prefixe/wp-content/uploads
    • http://www.votre.espace.web/your/prefixe/wp-content/uploads
    • https://www.votre.espace.web/your/prefixe/wp-content/uploads
... par https://download.tuxfamily.org/votreprojet/dossier-dedie
  • désinstaller l'outil une fois l'opération terminée car le laisser sur un espace web revient peu ou prou à donner les clés de tout votre site à ses attaquants.

Une approche plus sécurisée : via SSH

Pour ceux d'entre vous qui ont activé leur accès SSH TuxFamily et qui n'ont pas peur de s'en servir, les commandes ci-dessous devraient vous aider à effectuer les remplacements. Note : ce sont des commandes bash ; les adeptes de zsh/tcsh devront probablement les ajuster.

  1. Connectez-vous à TuxFamily en SSH
  2. Ajustez et saisissez les commandes suivantes :
  3. # Rendez-vous dans votre espace web (c'est important) :
    cd votreprojet/votre.espace.web-web
    
    # Saisissez l'URL de base de votre WordPress ; cela peut être
    # aussi simple que "/" si tout votre site est géré par WordPress :
    prefix=/wordpress
    
    # Saisissez le dossier qui contient désormais vos fichiers uploadés :
    dest_dir='dossier-dedie'
    
    # C'est tout ; vous ne devriez pas avoir besoin d'ajuster les commandes suivantes.
    
  4. À partir de ces informations, nous pouvons déduire automatiquement quelques petites choses, comme le nom de votre projet, celui de votre espace web et les identifiants de connexion à la base de données :
    # Nom du projet :
    project=$(pwd | cut -d/ -f3)
    # Espace web :
    webarea="$(basename "$(pwd)" | cut -d- -f1)"
    
    # Nom de la base de données :
    wp_db="$((echo '<?php'; find htdocs/ -type f -name wp-config.php -print0 | xargs -0 -r grep DB_NAME; echo 'print DB_NAME;') | php)"
    
    # Stocker votre mot de passe de base de données dans une variable bash est mieux
    # que de le taper directement car il n'atterrira pas dans l'historique de votre shell :
    wp_pw="$((echo '<?php'; find htdocs/ -type f -name wp-config.php -print0 | xargs -0 -r grep DB_PASSWORD; echo 'print DB_PASSWORD;') | php)"
  5. Nous pouvons télécharger et installer Search-Replace-DB dans un endroit sûr :
    # Le dossier "php-include" n'est pas exposé par le serveur web, ce qui en
    # fait un emplacement plus sûr que le dossier "htdocs":
    cd php-include
    wget https://github.com/interconnectit/Search-Replace-DB/archive/3.1.tar.gz
    [ "$(sha256sum < 3.1.tar.gz)" != '837389799a2884e3f77a3ab84c1a4161b6e2220041f91c9f149529111babe676  -' ] && echo "Ça sent le roussi..." && exit
    tar xzvf 3.1.tar.gz
    cd Search-Replace-DB-3.1
  6. Nous allons invoquer l'outil plusieurs fois, il est donc plus pratique d'utiliser une fonction shell en guise de wrapper:
    function wp_replace {
      target_url="https://download.tuxfamily.org/${project}/${dest_dir}"
      # Oui, il faut passer le mot de passe sur la ligne de commande ;
      # rassurez-vous, néanmoins car l'accès SSH n'autorise pas les autres
      # hébergés à lister vos processus.
      ./srdb.cli.php --host 'sql' \
                     --user "${wp_db}" \
                     --pass "${wp_pw}" \
                     --name "${wp_db}" \
                     --replace "${target_url}" \
                     "$@"
    }
  7. Vous pouvez maintenant simuler les divers remplacements :
    wp_replace --search "http://${webarea}${prefix}/wp-content/uploads" --dry-run
    wp_replace --search "https://${webarea}${prefix}/wp-content/uploads" --dry-run 
    wp_replace --search "http://www.${webarea}${prefix}/wp-content/uploads" --dry-run
    wp_replace --search "https://www.${webarea}${prefix}/wp-content/uploads" --dry-run
  8. Si vous êtes satisfait des résultats des simulations, effectuez les remplacements pour de bon :
    wp_replace --search "http://${webarea}${prefix}/wp-content/uploads"
    wp_replace --search "https://${webarea}${prefix}/wp-content/uploads"
    wp_replace --search "http://www.${webarea}${prefix}/wp-content/uploads"
    wp_replace --search "https://www.${webarea}${prefix}/wp-content/uploads"