Mise en ligne de son site wordpress

Ca sort du four!!

Ca sort du four!!

Lorsque l’on veut industrialiser le process de création de sites, il est nécessaire d’établir des procédures que l’on répète de manière similaire, sinon identiques à chaque nouveau projet. Je vous propose aujourd’hui notre procédure de synchronisation maison. Ne vous brûler pas, c’est tout chaud, ça sort à peine du four!!


Un développement de site se fait toujours en local, c’est à dire sur un poste client. Une fois les développements terminés, ou en cours de finalisation, il reste à uploader le contenu de son site sur son serveur distant. Cette tâche se compose de 2 parties distinctes :

  • la copie des fichiers statiques :
    • core de wordpress
    • répertoires de plugins spécifiques au projet (wp-content/*plugins/*)
    • répertoire de thème du projet (wp-content/themes/monThemeProjet)
  • la copie de la base de donnée

Dans un monde parfait, une simple copie serait suffisante, wordpress détecterait que l’emplacement de l’installation a changé, et prendrai en compte ce changement. Mais dans la vrai vie, une procédure un peu plus compliquée s’impose.

Pré-requis :

  • le poste client est un linux-like (distribution linux ou Mac)
  • le serveur est également un linux-like (plus facile à trouver!)
  • un répertoire projet créé sur le serveur
  • On a fait le nécessaire pour se connecter au serveur distant sans mot de passe (comme expliqué ici)

Notre procédure se compose de 7 étapes :

  1. En local, exécuter le script suivant qui va réaliser un rsync (synchronisation du répertoire projet avec le répertoire cible sur le serveur :
  2. # ./deploy_local_wordpress_rsync.sh
    #!/bin/bash
    # Ce script doit être exécuté depuis le répertoire contenant l'installation de wordpress
    USER="julien"
    HOST="monsite.com"
    PORT=
    RSYNC=`which rsync`
    PROJECT_NAME=nom_de_mon_projet ## eg: portail_client_X
    VERSION=1
    DEPLOY_DIR=/var/www/html/staging/$PROJECT_NAME/$VERSION
    
    echo "Deploiement de $PROJECT_NAME vers $DEPLOY_DIR"
    $RSYNC -avz -e ssh ./ $USER@$HOST DEPLOY_DIR --exclude-from=wordpress_exclude.rsync

    avec wordpress_exclude.rsync (fichier regroupant les fichiers/répertoires à ne pas synchroniser) pouvant ressembler à :

    desktop.ini
    .DS_Store
    /wp-config.php
    /wp-content/gallery
    /wp-content/themes/blamatic
    /wp-content/themes/classic
    /wp-content/themes/default
    /wp-content/themes/delight
    /wp-content/themes/medical-theme
    /wp-content/themes/modularity-lite
    /wp-content/themes/retrospective
    /wp-content/themes/simpleblocks
    /wp-content/themes/thematic
    /wp-content/themes/whiteboard
    /wp-content/plugins/flexi-pages-widget
    /wp-content/plugins/nextgen-gallery
    /wp-content/plugins/wp-shopping-cart
    /wp-content/plugins/wp_date_fr
    /wp-content/uploads/wpsc
    /wp-content/uploads/js_cache
    /wp-config.php.BAK
  3. Sur le serveur modifier les droits du répertoire
    wp-content

    (utilisé pour l’upload de contenus – images, attachements, etc -) :

    chmod -R 777 wp-content
  4. Création de la base wordpress sur le serveur

    Création de la base wordpress sur le serveur

    Sur le serveur, créer de la base de donnée. Sous phpMyAdmin par exemple.

    Donner un nom à votre base, ici wp_database, choisir l’interclassement utf8_general_ci si possible pour une meilleur gestion des caractères spéciaux.

  5. Sur le serveur, modifier le fichier wp-config (situé à la racine de wordpress) pour que wordpress puisse se connecter à la nouvelle base (DB_NAME, DB_USER, DB_PASSWORD, DB_HOST)
  6. Envoyer au serveur un Dump de la base locale (un Dump est un export de la base, onglet exporter sous phpMyAdmin) par exemple avec la commande :
  7. scp monDump.sql user@serveur:repertoire
  8. Importer le Dump dans la base du serveur (Onglet importer sous phpMyAdmin)
  9. La base contient des chemins absolus correspondant à votre configuration locale : Mettez à jour tous les champs, via les commandes SQL suivantes :
  10. UPDATE wp_options
    SET option_value = replace(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com')
    WHERE option_name = 'home' OR option_name = 'siteurl';
    
    UPDATE wp_posts
    SET guid = replace(guid, 'http://www.old-domain.com','http://www.new-domain.com');
    
    UPDATE wp_posts
    SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');

TroubleShootings :
Attention au fichier .htaccess. Il semble que le fichier .htacess (utilisé pour gérer les Friendly URLs) se regénère automatiquement. Ce n’a pas été notre cas. Il a fallut éditer ce fichier pour le mettre à jour :
de l’ancienne version en local (on y accède via http://localhost/WPlocalInstall)

# BEGIN WordPress

RewriteEngine On
RewriteBase /WPlocalInstall/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /WPlocalInstall/index.php [L]

# END WordPress

à la nouvelle version sur le serveur :

# BEGIN WordPress

RewriteEngine On
#RewriteBase /localInstall/ ## COMMENTÉ CAR LE SITE EST À LA RACINE DU DOMAINE ##
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] ## LE SITE EST À LA RACINE DU DOMAINE ##

# END WordPress

Bonne mise en ligne!!

Commentaires

  1. Trésor a écrit:

    Merci pour vos explication. Grace à vous, j’ai mis mon premier site en ligne.
    Merci!!!!!

  2. Bonjour, j’essaye de mettre mon site wordpress en ligne mais je n’y arrive pas. Le lien semble brisé lorsque je tape : « nomdedomainedusite/wp-admin ».

    Pourtant j’ai:

    1) Modifié les coordonnées de ma base de données dans le fichier « wp-config »

    2) Transféré le dossier contenant mon site via le FTP sur mon serveur distant

    2) Exporté ma base de données locale

    3) Importé ma base de donnée exportée sur le serveur distant

    4) Renommé l’url de mon site et de la home dans la table wp-option

    Je ne vois pas ce qui ne va pas…

    Pouvez-vous m’éclairer ?

    Merci d’avance !

  3. Je n’ai pas exécuté le script du début à appliquer sur le site local est-ce primordial ? Le problème viendrait-il de là ? Si oui, comment l’effectuer à cette étape avancée de la mise en ligne ?

    D’ailleurs j’ignore totalement comment effectuer un script… :s

    Merci d’avance et désolée de vous bombarder de questions !

  4. Merci beaucoup

Exprimez vous!

*