Migration d’une base de données Odoo 8 vers Odoo 9

Pré-requis

Pour le bon déroulement de la migration Odoo 8 vers Odoo 9, nous supposons que vous avez :

  • La dernière version de Docker installée sur votre ordinateur
  • Un conteneur PostgreSQL en version 9.6, nous l’appellerons db_96.
  • Un conteneur Odoo 8.x connecté à db_96, nous l’appellerons odoo_8.
  • Une base de données installée sur db_96, nous l’appellerons nuxly.

La migration a été réalisée sous Debian Stretch. Normalement, Odoo 8 fonctionne sous la version Jessie de Debian, mais le script de migration d’OpenUpgrade requiert d’avoir PostgreSQL 9.6. N’ayant pas cette version de PostgreSQL sous Jessie, il a fallu monter la version de Debian. En effet, Jessie ne prend en compte que jusqu’à la version 9.4 de PostgreSQL. Nous vous expliquons le processus de mise à jour et d’installation des divers outils nécessaires pour la migration.

Cette migration se passe dans « le meilleur des mondes” et suppose qu’aucune erreur ne subviendra. Cependant, il est possible que des erreurs se produisent au cours de votre migration. Nous sommes potentiellement tombés dessus, les résolutions sont référencées ultérieurement.

Mise en place de l’environnement de travail

Avec la mise en place du conteneur odoo_8, nous récupérons un Odoo fonctionnant sous Debian Jessie et avec une version 9.4 de PostgreSQL. Pour le bon déroulement de la migration, assurez-vous d’être sous la version Debian Stretch à l’aide de cette commande :

root@odoo_8:/# cat /etc/os-release

Si la commande retourne le résultat ci-dessous vous pouvez passer directement à la partie migration. Dans le cas contraire, poursuivez la mise en place de l’environnement de travail.

Résultat attendu après avoir exécuté : cat /etc/os-release
  1. Afin d’effectuer la montée de version vers Stretch, assurez-vous de mettre à jour toutes les dépendances de Jessie.
root@odoo_8:/# apt update
root@odoo_8:/# apt upgrade
root@odoo_8:/# apt dist-upgrade
  1. Modifiez le contenu du fichier sources.list pour que le mot “stretch” apparaisse à la place de “jessie” afin de lancer la montée de version de Debian.
root@odoo_8:/# sed -i 's|jessie|stretch|g' /etc/apt/sources.list
  1. Refaire la manipulation 1 pour monter en Debian Stretch et pour avoir la dernière version de toutes les dépendances.
  1. Il est toujours bon de vérifier que la montée de version a bien été effectuée en affichant la version de Debian.
root@odoo_8:/# cat /etc/os-release
  1. Même si apt s’occupe de la plupart du travail de nettoyage pour vous. En complément, vous pouvez lancer la suppression des packages qui ne sont plus nécessaires. Cette commande est optionnelle.
root@odoo_8:/# apt autoremove
  1. Pour finaliser la mise en place de l’environnement de travail, installez la bonne version de PostgreSQL et supprimez les versions inutilisées. Il se peut que seulement postresql-client-9.4 soit installé. Auquel cas, la deuxième commande ne fera que vous alerter de l’absence du package.
root@odoo_8:/# apt install postgresql-9.6
root@odoo_8:/# apt remove postgresql-9.4
root@odoo_8:/# apt remove postgresql-client-9.4

Procédure de migration Odoo 8 vers Odoo 9

  1. La migration par OpenUpgrade requiert certaines dépendances répertoriées dans le fichier requirements.txt du projet. Afin de satisfaire l’installation de ces dépendances et d’éviter les éventuels soucis lors de l’installation, nous avons installé les dépendances suivantes avant de débuter la migration.
root@odoo_8:/# apt update
root@odoo_8:/# apt install git nano locate build-essential libpq-dev libssl-dev libffi-dev python-setuptools python-dev libjpeg62-turbo-dev zlib1g-dev libxml2-dev python-lxml golang-openldap-dev libsasl2-dev libldap2-dev libxslt-dev
  1. La migration des bases de données d’Odoo n’est pas fournie nativement avec la solution, c’est un service payant. C’est ainsi qu’est né le projet OpenUpgrade qui a pour but de réaliser cette migration. OpenUpgrade utilise sa propre librairie pour migrer Odoo : openupgradelib. Installez cette dernière et OpenUpgrade pour pouvoir continuer.
root@odoo_8:/# pip install openupgradelib
root@odoo_8:/# git clone -b 9.0 https://github.com/OCA/OpenUpgrade.git
  1. Installez tous les requirements pour le projet OpenUpgrade.
root@odoo_8:/# pip install -r /OpenUpgrade/requirements.txt
  1. Ajoutez au fichier de configuration Odoo les informations nécessaires pour la communication avec la base de données.
root@odoo_8:/# nano /etc/odoo/openerp-server.conf

Par exemple les informations peuvent être les suivantes. Ces informations sont obligatoires.

db_host = 172.17.0.2
db_port = 5432
db_user = odoo
db_password = odoo
  1. Vous pouvez enfin lancer la migration !
root@odoo_8:/# cd OpenUpgrade/scripts/
root@odoo_8:/OpenUpgrade/scripts# python migrate.py --config=/etc/odoo/openerp-server.conf --database=nuxly --run-migrations=9.0
  1. Une fois la migration terminée, créez un container odoo_9 et connectez ce dernier au même serveur PostgreSQL que odoo_8.
PS C:\Users\jdoe> docker run -p 8070:8069 --name odoo_9 --link db_9-6:db -t odoo:9
PS C:\Users\jdoe> docker exec -u root -it odoo_9 /bin/bash
  1. Une fois que vous avez accédé à odoo_9, mettez à jour tous les modules.
root@odoo_9:/# odoo.py -d nuxly_migrated --db_host=172.17.0.2 -r odoo -w odoo -u all
  1. Voilà ! La base de données a été migrée vers Odoo 9 et elle est prête à l’emploi. Si vous souhaitez continuer à migrer sous Odoo 10, vous pouvez vous référer à notre article sur le sujet.

Potentiels erreurs rencontrées lors de la migration

Les modules obsolètes

Des modules obsolètes, comme edi, hr_timesheet_invoice, share, etc., peuvent être encore présents sur odoo_9 (base migrée) et provoquez l’affichage des warnings lors de l’initialisation. Nous avons dû les désinstaller et/ou les supprimer à la main en passant en mode debug.

http://localhost:8072/web?debug=assets

Pour voir tous les modules obsolètes, nous nous sommes référé au tableau de migration des modules de la documentation officielle d’OpenUpgrade.

Le filestore

  • Les droits d’accès au filestore (var/lib/odoo/filestore) de la base de données migrée, ainsi que les sous-dossiers, étaient en root:root alors qu’ils doivent être odoo:odoo. Cela créait un conflit d’accès.
  • Nous avons dû re-générer les fichiers css et js car les logs d’Odoo 9 affichaient :
No such file or directory: 
u'/var/lib/odoo/filestore/nuxly/cd/cd8f9...'

Pour résoudre ce problème nous avons dû :

  1. Accéde à la base de données (par exemple via pgAdmin).
  1. Supprimez les fichiers css et js pour qu’ils se re-génèrent.
DELETE FROM ir_attachment WHERE url LIKE '/web/content/%';
  1. Rafraîchissez la page en vidant le cache (CTRL + F5).

Les modules passés sous OCA

Prenons l’exemple du module account_analytic_analysis. Sous Odoo 9 il n’est plus présent sur le dépôt officiel. De plus, lorsque OCA () a repris ce module, il a été rénommé contract. Malheureusement, sa migration n’est pas prise en compte automatiquement par OpenUpgrade. La procédure suivante nous permet de contourner ce problème.

  1. Sous Odoo 8, avant de lancer migrate.py, importez les modules dans les répertoires suivants :
  • OpenUpgrade/addons/
  • /var/tmp/openupgrade/9.0/addons/
root@odoo_8:/# git clone -b 9.0 https://github.com/OCA/contract.git
root@odoo_8:/# cp -r /contract/contract /OpenUpgrade/addons/contract
  1. Accédez à la base de données et mettez à jour la table ir_module_modle pour que le module soit bien pris en compte lors de la migration.
UPDATE ir_module_module SET state = 'to install' WHERE name = 'contract';
  1. Relancez le service odoo.
root@odoo_8:/# service odoo restart
  1. Après avoir créé le conteneur Odoo 9, clonez-y le répertoire git et copiez le module contract dans le répertoire adéquat.
root@odoo_9:/# git clone -b 9.0 https://github.com/OCA/contract.git
root@odoo_9:/# cp -r /contract/contract /usr/lib/python2.7/dist-packages/openerp/addons/contract

Partagez :
Facebook
Twitter
LinkedIn
Email
Print