SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Migrer un site Drupal 6 ou
Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016
→ Senior Technical Solutions Analyst @Acquia
→ Focus : Drupal 8 + ‘Next Gen Acquia Cloud’
→ Twitter: @AurelienNavarre
→ Site: anavarre.net
→ Twitter: @DrupalFacile
→ Site: www.drupalfacile.net
Qui suis-je ?
→ Retour d’expérience suite à la migration de la base de
connaissance Acquia de Drupal 6 à Drupal 8
→ Quelques challenges :
▪ ‘End of life’ de Drupal 6 (24 février 2016)
▪ Contrib, oh my! SimpleSAMLphp, Search API,
Workbench Moderation, Multiversion, …
▪ Changement radical du modèle de données - Merci
drush migrate-fields-source et Entity Relationship
Diagrams
Contexte de cette présentation
Vous avez dit API de migration ?
Module Description
migrate_upgrade Commande Drush pour exécuter les migrations de Drupal 6
ou 7 vers Drupal 8
migrate_tools Commandes Drush génériques pour gérer les migrations
migrate_plus Extension du framework de migration du core avec des
fonctionnalités additionnelles (ex : migration depuis des
sources XML ou JSON)
migrate_ui Interface utilisateur construite à partir des entités de
Migration
migrate_manifest Commande Drush pour exécuter une migration SQL à partir
de template manifest.yml
Aperçu rapide des modules de migration
Jeu et modèle de données
→ Allez-vous migrer 1 millier ou 1 million de données ?
→ Souhaitez-vous vraiment changer le modèle de données ?
→ Migrer via l’UI n’est presque jamais une bonne solution
▪ Ne permet pas de migration custom
▪ Drush tient (franchement) mieux la charge
▪ Contrib a des commandes Drush puissantes
Débuter avec les modules de migration
$ drush @site.env en -y migrate_drupal, migrate_upgrade,
migrate_tools
The following extensions will be enabled: migrate_drupal,
migrate_upgrade, migrate_tools, migrate, migrate_plus
→ Branche 8.x-2.x pour tous les modules de migration
→ Récupérez les identifiants de BDD du site source
→ Nombreuses nouvelles commandes de migration !
$ drush | grep migrate
Configurer la migration initiale
$ drush @site.env migrate-upgrade --legacy-db-url=mysql://
{USER}:{PASSWORD}@{HOST}:{PORT}/{DB} --legacy-root={URI} --
configure-only
→ Une IP vaut mieux qu’un FQDN
→ Pensez à drush -vd (verbose debug) à la moindre erreur
→ drush config-list permet d’auditer la configuration
$ drush config-list | grep -c migrate
62
La clé de migration est-elle définie ?
>>> Drupal::>>> Drupal::state()->get('migrate_drupal_6');
=> [
"key" => "upgrade",
"database" => [
"driver" => "mysql",
"username" => "{USER}",
"password" => "{PASSWORD}",
"host" => "{HOST}",
"port" => "{PORT}",
"database" => "{DB}",
"prefix" => null,
],
]
Exécuter une migration complète
$ drush @site.env migrate-upgrade --legacy-db-url=mysql://
{USER}:{PASSWORD}@{HOST}:{PORT}/{DB} --legacy-root={URI}
→ migrate-upgrade fait le job...mais sans flexibilité
→ Nous voulons contrôler tous les aspects de la migration
→ migrate-import répond mieux à nos besoins
Créer un module custom (c’est facile !)
→ Créez le fichier *.info.yml
→ Ajoutez les fichiers de config dans config/install
→ Installez le module. Voilà.
$ drush @site.env config-export -y sync ; cp
/path/to/config_dir/sync/migrate_plus.migration*
/path/to/custom/module/config/install/
Exécuter une migration custom
$ drush @site.env migrate-import --limit=10000 --feedback=1000
$ drush @site.env migrate-import d6_url_alias,d6_block, d6_file,
d6_user,{...} --limit=10000 --feedback=1000
→ Utilisez --limit pour restreindre le nombre d’éléments
→ Utilisez --feedback pour être notifié régulièrement
→ Vous pouvez aussi restreindre la migration par Plugin
Statut et messages de Migration
$ drush @site.env migrate-status
$ for i in upgrade_d6_node_type upgrade_d6_user {...} ; do drush
@site.env migrate-messages $i ; done
→ Utilisez migrate-status pour obtenir une vue des
éléments importés, ceux restant à importer, etc.
→ Utilisez migrate-messages pour voir les erreurs
→ C’est toujours Migrate tel que vous le connaissez !
▪ prepareRow()
▪ query()
▪ ...
→ ‘Étendez’ les Plugins de migration du core
→ Écrivez vos propres Plugins
Et les migrations vraiment custom ?
Example de ‘source Plugin’
<?php
namespace Drupalmigrate_webinarPluginmigratesource;
use DrupalpathPluginmigratesourced6UrlAlias;
/**
* @MigrateSource(
* id = "webinar_d6_url_alias"
* )
*/
class WebinarUrlAlias extends UrlAlias {
public function query() {
$query = parent::query();
$query->condition('src', 'user/%', 'NOT LIKE');
return $query;
}
}
source Plugin du core
Annotation Doctrine
Logique custom via la
méthode query()
Migration continue du contenu
$ ssh -i /home/{USERNAME}/{SSH_KEY} -f -L 1111:{DB_SERVER}:3306
{USER}@{WEB_SERVER} -N
→ Pouvez-vous vous permettre une coupure du site ?
→ Utilisez le tunneling SSH pour sécuriser les transferts
→ https://docs.acquia.com/articles/ssh-tunneling-server-
side-applications
Vérifier la cohérence des fichiers
mysql> SELECT COUNT(fid) FROM file_managed;
$ rsync -avzt --progress --exclude=styles --exclude=ctools --
exclude=css --exclude=js --exclude=xmlsitemap -e "ssh -i /home/
{USERNAME}/.ssh/id_rsa" {SOURCE_SERVER}:{SOURCE_PATH} .
→ Les fichiers ne sont pas forcément tous gérés par Drupal
→ Utilisez rsync quand Migrate API ne peut pas aider
$ find . ! -path "*styles*" ! -path "*ctools*" ! -path "*css*" !
-path "*js*" ! -path "*xmlsitemap*" -type f | wc -l
À garder en mémoire...
→ L’API de migration API évolue encore régulièrement
▪ Changements majeurs avec 8.1.x - Lisez http:
//mikeryan.name/blog/mikeryan/migration-
update-for-drupal-8-1
→ Vous voyez d6 ou d7 dans un fichier de migration ?
▪ Cela signifie un Plugin spécifique à Drupal 6 ou 7
▪ Autrement, la migration est agnostique
→ Pour les migrations custom, démarrez ‘à l’envers’
▪ Partez d’un jeu de migration minimaliste
▪ Résolvez les dépendances au fur et à mesure
Merci - Questions?

Contenu connexe

Tendances

08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)Noël
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
Codons notre infrastructure
Codons notre infrastructureCodons notre infrastructure
Codons notre infrastructurecontinuousphp
 
201211 drupagora hostingdrupal
201211 drupagora hostingdrupal201211 drupagora hostingdrupal
201211 drupagora hostingdrupalOxalide
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2Noël
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidAmal Abid
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 

Tendances (15)

08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Codons notre infrastructure
Codons notre infrastructureCodons notre infrastructure
Codons notre infrastructure
 
201211 drupagora hostingdrupal
201211 drupagora hostingdrupal201211 drupagora hostingdrupal
201211 drupagora hostingdrupal
 
Chiffrer et sécuriser MariaDB
Chiffrer et sécuriser MariaDBChiffrer et sécuriser MariaDB
Chiffrer et sécuriser MariaDB
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2
 
Serveur Web (1)
Serveur Web (1)Serveur Web (1)
Serveur Web (1)
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abid
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 

En vedette

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Anne-Sophie Picot
 
Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Drupal Asso France
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Romain Jarraud
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalLINAGORA
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteVanessa David
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based productsDiraviam Jayaraj
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleKaliop-slide
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration ContinueXavier Warzee
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Artusamak
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Fabian Piau
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisésOSInet
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Vanessa David
 

En vedette (16)

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8
 
Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec Drupal
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnante
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based products
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battle
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisés
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
 

Similaire à DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8

Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingDavid Morel
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalThomas Delerm
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Christophe Villeneuve
 
Drupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalDrupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalArtusamak
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
 
Deployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysDeployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysChristophe Villeneuve
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureMicrosoft
 
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013Jonathan-David Schroder
 
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...Adrian CID ALMAGUER
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaZenika
 
System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?Microsoft Technet France
 

Similaire à DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8 (20)

Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreaming
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de Drupal
 
Presentation drush
Presentation drushPresentation drush
Presentation drush
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?
 
Drupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalDrupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupal
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
Deployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysDeployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDays
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
 
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013
Migrations Drupal-to-Drupal avec migrate_d2d - Drupal Meetup Paris Sept 2013
 
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...
Quelques conseils sur la migration des modules à Drupal 8. Étude de cas: Node...
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
 
System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?
 

DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8

  • 1. Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8 DrupalCamp Nantes 2016
  • 2. → Senior Technical Solutions Analyst @Acquia → Focus : Drupal 8 + ‘Next Gen Acquia Cloud’ → Twitter: @AurelienNavarre → Site: anavarre.net → Twitter: @DrupalFacile → Site: www.drupalfacile.net Qui suis-je ?
  • 3. → Retour d’expérience suite à la migration de la base de connaissance Acquia de Drupal 6 à Drupal 8 → Quelques challenges : ▪ ‘End of life’ de Drupal 6 (24 février 2016) ▪ Contrib, oh my! SimpleSAMLphp, Search API, Workbench Moderation, Multiversion, … ▪ Changement radical du modèle de données - Merci drush migrate-fields-source et Entity Relationship Diagrams Contexte de cette présentation
  • 4. Vous avez dit API de migration ?
  • 5. Module Description migrate_upgrade Commande Drush pour exécuter les migrations de Drupal 6 ou 7 vers Drupal 8 migrate_tools Commandes Drush génériques pour gérer les migrations migrate_plus Extension du framework de migration du core avec des fonctionnalités additionnelles (ex : migration depuis des sources XML ou JSON) migrate_ui Interface utilisateur construite à partir des entités de Migration migrate_manifest Commande Drush pour exécuter une migration SQL à partir de template manifest.yml Aperçu rapide des modules de migration
  • 6. Jeu et modèle de données → Allez-vous migrer 1 millier ou 1 million de données ? → Souhaitez-vous vraiment changer le modèle de données ? → Migrer via l’UI n’est presque jamais une bonne solution ▪ Ne permet pas de migration custom ▪ Drush tient (franchement) mieux la charge ▪ Contrib a des commandes Drush puissantes
  • 7. Débuter avec les modules de migration $ drush @site.env en -y migrate_drupal, migrate_upgrade, migrate_tools The following extensions will be enabled: migrate_drupal, migrate_upgrade, migrate_tools, migrate, migrate_plus → Branche 8.x-2.x pour tous les modules de migration → Récupérez les identifiants de BDD du site source → Nombreuses nouvelles commandes de migration ! $ drush | grep migrate
  • 8. Configurer la migration initiale $ drush @site.env migrate-upgrade --legacy-db-url=mysql:// {USER}:{PASSWORD}@{HOST}:{PORT}/{DB} --legacy-root={URI} -- configure-only → Une IP vaut mieux qu’un FQDN → Pensez à drush -vd (verbose debug) à la moindre erreur → drush config-list permet d’auditer la configuration $ drush config-list | grep -c migrate 62
  • 9. La clé de migration est-elle définie ? >>> Drupal::>>> Drupal::state()->get('migrate_drupal_6'); => [ "key" => "upgrade", "database" => [ "driver" => "mysql", "username" => "{USER}", "password" => "{PASSWORD}", "host" => "{HOST}", "port" => "{PORT}", "database" => "{DB}", "prefix" => null, ], ]
  • 10. Exécuter une migration complète $ drush @site.env migrate-upgrade --legacy-db-url=mysql:// {USER}:{PASSWORD}@{HOST}:{PORT}/{DB} --legacy-root={URI} → migrate-upgrade fait le job...mais sans flexibilité → Nous voulons contrôler tous les aspects de la migration → migrate-import répond mieux à nos besoins
  • 11. Créer un module custom (c’est facile !) → Créez le fichier *.info.yml → Ajoutez les fichiers de config dans config/install → Installez le module. Voilà. $ drush @site.env config-export -y sync ; cp /path/to/config_dir/sync/migrate_plus.migration* /path/to/custom/module/config/install/
  • 12. Exécuter une migration custom $ drush @site.env migrate-import --limit=10000 --feedback=1000 $ drush @site.env migrate-import d6_url_alias,d6_block, d6_file, d6_user,{...} --limit=10000 --feedback=1000 → Utilisez --limit pour restreindre le nombre d’éléments → Utilisez --feedback pour être notifié régulièrement → Vous pouvez aussi restreindre la migration par Plugin
  • 13. Statut et messages de Migration $ drush @site.env migrate-status $ for i in upgrade_d6_node_type upgrade_d6_user {...} ; do drush @site.env migrate-messages $i ; done → Utilisez migrate-status pour obtenir une vue des éléments importés, ceux restant à importer, etc. → Utilisez migrate-messages pour voir les erreurs
  • 14. → C’est toujours Migrate tel que vous le connaissez ! ▪ prepareRow() ▪ query() ▪ ... → ‘Étendez’ les Plugins de migration du core → Écrivez vos propres Plugins Et les migrations vraiment custom ?
  • 15. Example de ‘source Plugin’ <?php namespace Drupalmigrate_webinarPluginmigratesource; use DrupalpathPluginmigratesourced6UrlAlias; /** * @MigrateSource( * id = "webinar_d6_url_alias" * ) */ class WebinarUrlAlias extends UrlAlias { public function query() { $query = parent::query(); $query->condition('src', 'user/%', 'NOT LIKE'); return $query; } } source Plugin du core Annotation Doctrine Logique custom via la méthode query()
  • 16. Migration continue du contenu $ ssh -i /home/{USERNAME}/{SSH_KEY} -f -L 1111:{DB_SERVER}:3306 {USER}@{WEB_SERVER} -N → Pouvez-vous vous permettre une coupure du site ? → Utilisez le tunneling SSH pour sécuriser les transferts → https://docs.acquia.com/articles/ssh-tunneling-server- side-applications
  • 17. Vérifier la cohérence des fichiers mysql> SELECT COUNT(fid) FROM file_managed; $ rsync -avzt --progress --exclude=styles --exclude=ctools -- exclude=css --exclude=js --exclude=xmlsitemap -e "ssh -i /home/ {USERNAME}/.ssh/id_rsa" {SOURCE_SERVER}:{SOURCE_PATH} . → Les fichiers ne sont pas forcément tous gérés par Drupal → Utilisez rsync quand Migrate API ne peut pas aider $ find . ! -path "*styles*" ! -path "*ctools*" ! -path "*css*" ! -path "*js*" ! -path "*xmlsitemap*" -type f | wc -l
  • 18. À garder en mémoire... → L’API de migration API évolue encore régulièrement ▪ Changements majeurs avec 8.1.x - Lisez http: //mikeryan.name/blog/mikeryan/migration- update-for-drupal-8-1 → Vous voyez d6 ou d7 dans un fichier de migration ? ▪ Cela signifie un Plugin spécifique à Drupal 6 ou 7 ▪ Autrement, la migration est agnostique → Pour les migrations custom, démarrez ‘à l’envers’ ▪ Partez d’un jeu de migration minimaliste ▪ Résolvez les dépendances au fur et à mesure