Dupliquer une installation

Introduction

Pourquoi dupliquer une installation Elgg ?

Il existe beaucoup de raisons pour lesquelles vous pouvez vouloir dupliquer une installation Elgg : déplacer le site vers un autre serveur, créer un serveur de test ou de développement, et créer des backups fonctionnels sont les plus habituelles. Pour créer un double fonctionnel d’un site Elgg, 3 choses doivent être copiées :

  • Base de données

  • Données du répertoire de données

  • Code

Il faut modifier au moins 5 éléments d’information pour une installation copiée :

  • le fichier elgg-config/settings.php qui peut aussi se trouver à l’emplacement engine/settings.php pour les versions pré-2.0

  • le fichier .htaccess (Apache) ou la configuration de Nginx en fonction du serveur utilisé

  • l’entrée de la base de donnée pour l’entité de votre site

  • l’entrée de la base de donnée pour le chemin d’installation

  • l’entrée de la base de donnée pour le chemin des données

Ce qui n’est pas traité dans ce tutoriel

Ce tutoriel nécessite une connaissance minimale d’Apache, MySQL, et des commandes Linux. A ce titre, certaines choses ne seront pas couvertes dans ce tutoriel. Ceci comprend :

  • Comment sauvegarder (backup) et restaurer des bases de données MySQL

  • Comment configurer Apache pour fonctionner avec ElggComment transférer des fichiers vers et depuis votre serveur de production

  • Comment transférer des fichiers vers et depuis votre serveur de production

Avant de commencer

Avant de commencer, assurez-vous que votre installation Elgg est pleinement fonctionnelle. Vous aurez aussi besoin des éléments suivants :

  • Un backup de la base de données de votre site Elgg actif

  • Un emplacement pour copier la base de données active

  • Un serveur qui convienne pour installer le site Elgg dupliqué

    (Qui peut être le même serveur que celui de votre installation Elgg en production)

Les backups de la base de données peuvent être obtenus de diverses manières, y compris via phpMyAdmin, l’interface officielle de MySQL, et la ligne de commande. Contactez votre hébergeur pour des informations sur comment sauvegarder et restaurer des bases de données, ou utilisez un moteur de recherche pour trouver de l’information à ce sujet.

Au cours de ce tutoriel, nous allons faire les hypothèses suivante à propos du site Elgg en production :

  • L’URL est http://www.myelgg.org/

  • Le chemin d’installation est /var/www/elgg/

  • Le chemin du répertoire de données est /var/data/elgg/

  • L’hôte de la base de données est localhost

  • Le nom de la base de données est production_elgg

  • L’utilisateur de la base de données est db_user

  • Le mot de passe de la base de données est db_password

  • Le préfixe des tables de la base de données est elgg

A la fin du tutoriel, les renseignements de notre installation Elgg de test seront :

  • L’URL est http://test.myelgg.org/

  • Le chemin d’installation est /var/www/elgg_test/

  • Le répertoire de données est /var/data/elgg_test/

  • L’hôte de la base de données est localhost

  • Le nom de la base de données est test_elgg

  • L’utilisateur de la base de données est db_user

  • Le mot de passe de la base de données est db_password

  • Le préfixe des tables de la base de données est elgg

Copiez le code d’Elgg vers le serveur de test

La toute première étape est de dupliquer le code du site Elgg de production. Dans notre exemple, c’est aussi simple que de copier /var/www/elgg/ vers /var/www/elgg_test/.

cp -a /var/www/elgg/ /var/www/elgg_test/

Copiez les données d’Elgg vers le serveur de test

Dans cet exemple, c’est aussi simple que copier /var/data/elgg/ vers /var/data/elgg_test/.

cp -a /var/data/elgg/ /var/data/elgg_test/

Si vous n’avez pas d’accès console (shell) à votre serveur et devez transférer les données par FTP, vous pouvez avoir besoin de modifier le propriétaire et les permissions des fichiers.

Note

Vous avez aussi besoin de supprimer le cache des vues sur le serveur de test après que la copie soit terminée. Il s’agit d’un répertoire nommé views_simplecache dans votre dossier de données ainsi que le répertoire nommé system_cache .

Editez settings.php

Le fichier elgg-config/settings.php contient les renseignement de configuration de la base de données. Ceux-ci doivent être ajustés pour votre nouvelle installation Elgg de test. Dans notre exemple, nous allons regarder dans /var/www/elgg_test/elgg-config/settings.php et trouver les lignes qui ressemblent à ceci :

// Database username
$CONFIG->dbuser = 'db_user';

// Database password
$CONFIG->dbpass = 'db_password';

// Database name
$CONFIG->dbname = 'elgg_production';

// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';

// Database table prefix
// If you're sharing a database with other applications, you will want to use this
// to differentiate Elgg's tables.
$CONFIG->dbprefix = 'elgg';

Nous devons modifier ces lignes pour qu’elles correspondent à notre nouvelle installation :

// Database username
$CONFIG->dbuser = 'db_user';

// Database password
$CONFIG->dbpass = 'db_password';

// Database name
$CONFIG->dbname = 'elgg_test';

// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';

// Database table prefix
// If you're sharing a database with other applications, you will want to use this
// to differentiate Elgg's tables.
$CONFIG->dbprefix = 'elgg';

Note

Notez que $CONFIG->dbname a changé pour correspondre à notre nouvelle base de données.

Copier la base de données d’Elgg

Maintenant la base de données doit être copiée depuis elgg_production vers elgg_test. Voyez la documentation de votre gestionnaire MySQL préféré pour savoir comment dupliquer une base de données. Vous allez généralement exporter les tables de la base de donnée actuelle vers un fichier, créer la nouvelle base de données, puis importer les tables que vous avez précédemment exportées.

Vous avez deux possibilités pour mettre à jour les valeurs dans la base de données. Vous pourriez changer les valeurs dans le fichier exporté, ou vous pourriez modifier ces valeurs par des requêtes sur la base de données. Un avantage de modifier directement le fichier exporté est que vous pouvez aussi modifier les liens que les utilisateurs ont créé vers du contenu au sein de votre site. Par exemple, si des personnes ont mis en marque-page des pages avec le plugin bookmarks, les marque-pages vont pointer vers l’ancien site tant que vous n’aurez pas mis à jour leurs URLs.

Entrées de la base de données

Nous devons maintenant modifier 4 entrées dans la base de données. Ceci peut être fait aisément en exécutant 4 commandes SQL simples :

Modifiez le chemin d’installation

UPDATE `elgg_datalists` SET `value` = "/var/www/elgg_test/" WHERE `name` = "path";

Modifiez le répertoire de données

UPDATE `elgg_datalists` SET `value` = "/var/data/elgg_test/" WHERE `name` = "dataroot";

Changer l’URL du site

UPDATE `elgg_sites_entity` SET `url` = "http://test.myelgg.org/";

Modifiez le répertoire de données de stockage des fichiers

UPDATE elgg_metastrings SET string = '/var/data/elgg_test/'
WHERE id = (
   SELECT value_id
   FROM elgg_metadata
   WHERE name_id = (
      SELECT *
      FROM (
         SELECT id
         FROM elgg_metastrings
         WHERE string = 'filestore::dir_root'
      ) as ms2
   )
   LIMIT 1
);

Avertissement

Ne changez que le premier chemin ci-dessus !

Avertissement

Si vous avez un plugin qui utilise des entrepôts de fichiers (« filestores ») personnalisés (qui contiennent l’appel à une méthode ElggFile::setFilestore ou qui définissent des métadonnées avec des noms tels que filestore::*), alors la requête ci-dessus pourrait ne pas être sûre (elle réécrit tous les emplacements dir_root du système de fichiers). Veuillez demander des conseils via la communauté Elgg.

Vérifier le fichier .htaccess

Si vous aviez apporté des modifications au fichier .htaccess qui modifient des chemins, assurez-vous que vous les mettez à jour dans l’installation de test.

Mettez à jour la configuration du serveur web

Pour cet exemple, vous devez modifier la config Apache pour activer un sous-domaine avec pour racine des documents (document root) /var/www/elgg_test/. Si vous prévoyez d’installer dans un sous-répertoire de votre racine des documents, cette étape n’est pas nécessaire.

Si vous utilisez Nginx, vous aurez besoin de mettre à jour la config du serveur pour correspondre aux nouveaux chemins basés sur install/config/nginx.dist.

Exécutez upgrade.php

Pour régénérer les données mises en cache, assurez-vous d’exécuter http://test.myelgg.org/upgrade.php

Astuces

C’est une bonne idée de garder un serveur de test à portée de main pour expérimenter l’installation de nouveaux plugins et faire du développement. Si vous automatisez les restaurations de la base de données elgg_test, modifier les valeurs de $CONFIG et ajouter les lignes suivantes à la fin du fichier elgg_test/elgg-config/settings.php va permettre de réécrire sans couture les entrées de la base de données MySQL.

$con = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass);
mysql_select_db($CONFIG->dbname, $con);

$sql = "UPDATE {$CONFIG->dbprefix}datalists
   SET value = '/var/www/test_elgg/'
   WHERE name = 'path'";
mysql_query($sql);
print mysql_error();

$sql = "UPDATE {$CONFIG->dbprefix}datalists
   SET value = '/var/data/test_elgg/'
   WHERE name = 'dataroot'";
mysql_query($sql);
print mysql_error();

$sql = "UPDATE {$CONFIG->dbprefix}sites_entity
   SET url = 'http://test.myelgg.org/'";
mysql_query($sql);

$sql = "UPDATE {$CONFIG->dbprefix}metastrings
  SET string = '/var/data/elgg_test/'
  WHERE id = (
     SELECT value_id
     FROM {$CONFIG->dbprefix}metadata
     WHERE name_id = (
        SELECT *
        FROM (
           SELECT id
           FROM {$CONFIG->dbprefix}metastrings
           WHERE string = 'filestore::dir_root'
        ) as ms2
     )
     LIMIT 1
  )";
mysql_query($sql);

print mysql_error();