Comme je travaille sur Odoo, je n'utilise pas la version des dépôts, mais j'installe les instances Odoo manuellement, depuis les sources. Cette méthode simplifie la gestion des patchs personnalisés, l'utilisation d'une version spécifique pour chaque projet, le lancement de plusieurs instances sur un même serveur...

Dans cet article, j'explique comment mettre en place une instance d'Odoo v8.0 dont l'exécution est gérée par supervisor.

Note : Cet article est une mise à jour de celui qui expliquait la mise en place d'OpenERP v7.0 depuis les branches hébergées sur Launchpad.

Préparation de l'environnement

Serveur PostgreSQL

Pour faire fonctionner Odoo, il est nécessaire d'avoir un serveur PostgreSQL disponible. Ce serveur peut ne pas se trouver sur la même machine sur le serveur Odoo, il faudra alors permettre l'accès depuis la machine sur laquelle est installé Odoo.

Odoo liste automatiquement les bases de données appartenant à cet utilisateur et affiche cette liste sur l'écran de login. Il est donc conseillé de créer un utilisateur Postgres spécifique pour Odoo.

$ createuser -SdRE odoo

Note : Dans le cas de plusieurs instances d'Odoo, il est préférable de créer un utilisateur Postgres par instance.

Dépendances

La seule dépendance nécessaire est Python, langage dans lequel est développé Odoo, ainsi qu'un certain nombre de modules python. Comme l'instance d'Odoo est installée en dehors des dépôts, je préfère installer les modules python dans un virtualenv. De cette manière, on maîtrise la mise à jour des modules python, pour éviter les risques d'incompatibilité d'une version récente d'un module python avec une instance d'Odoo. Cela permet aussi à chaque instance Odoo installée sur le serveur de fonctionner avec ses propres versions des modules python.

Pour la gestion du virtualenv, il faut installer les paquets python-virtualenv, ainsi que python-pip, qui installera de nouveaux modules dans le virtualenv.

Il faut aussi installer supervisor, qui sera chargé de gérer le processus Odoo.

Certains modules python nécessaires à Odoo devront être compilés au cours de leur installation dans le virtualenv. Il est donc indispensable de disposer du compilateur gcc ainsi que des bibliothèques de développement utilisées pour l'installation des modules.

$ sudo apt-get install --no-install-recommends python-virtualenv python-pip supervisor gcc python-dev postgresql-server-dev-9.3 libxml2-dev libxslt1-dev libjpeg62-dev

Utilisateur spécifique

Comme pour la plupart des applications, il est déconseillé d'exécuter Odoo en tant que root. Il faut donc lui créer un utilisateur dédié.

$ sudo adduser <OdooUsername>

Note : Lorsque je mets plusieurs instances en place sur un même serveur, je crée un utilisateur système et un utilisateur PostgreSQL différent pour chaque instance, afin d'éviter les conflits.

Mise en place de l'instance Odoo

Récupérer les sources, et les placer dans le répertoire de l'utilisateur. Dans cet article, je place les sources dans le répertoire ~/odoo.

$ sudo -i -u <OdooUsername>
$ git clone https://github.com/odoo/odoo --branch=8.0 --depth=1 ~/odoo
$ exit

Note : Le paramètre --depth=X permet de ne télécharger que le contenu des X derniers commits, plutôt que le dépôt complet. Cela permet donc de gagner du temps lors du clone, et de l'espace disque.

Modules python

Comme dit précédemment, l'instance Odoo sera lancée dans un virtualenv. Il faut donc le créer, et y installer tous les modules python utilisés par Odoo.

Ce virtualenv sera placé dans le répertoire /opt/virtualenv/<VenvName>/.

$ sudo mkdir /opt/virtualenv
$ sudo virtualenv /opt/virtualenv/<VenvName>

Une fois le virtualenv créé, on y installe les modules nécessaires. Depuis la version 8.0, Odoo fournit un fichier requirements.txt, contenant la liste des modules python à utiliser.

$ sudo /opt/virtualenv/<VenvName>/bin/pip install -r ~/odoo/requirements.txt

Attention : Il faut bien donner le chemin complet de l'exécutable pip dans le virtualenv, sinon les modules seront installés sur le système, et pas dans le virtualenv.

Il faut ensuite générer le fichier de configuration. Je ne donne ici que les paramètres nécessaires, mais d'autres peuvent être donnés, pour changer les ports, par exemple. En cas d'erreur, le fichier de configuration généré peut évidemment être modifié manuellement par la suite.

$ . /opt/virtualenv/odoo/bin/activate
$ ~/odoo/openerp-server --stop-after-init -c ~/odoo/odoo.conf -s -r <DbUsername> -w <DbPassword> --db_host=<DbHostName> --addons-path=~/odoo/addons

Il est ensuite possible de vérifier que tout est bien installé en vérifiant que le serveur se lance bien.

$ ~/odoo/openerp-server -c ~/odoo/odoo.conf

Si le chargement de la page http://<Hostname>:8069 ne provoque pas l'affichage d'erreurs dans le log du serveur, vous pouvez le stopper avec Ctrl+c, puis passer à l'étape suivante.

Lancement automatique du service

Le processus Odoo sera lancé par supervisor. Il faut donc établir un fichier de configuration supervisor pour notre instance Odoo.

Le chargement d'un virtualenv python consiste en la modification des variables d'environnement. Nous utilisons donc le paramètre environment pour permettre l'utilisation du virtualenv.

[program:odoo]
command=/home/<OdooUsername>/odoo/openerp-server -c /home/<OdooUsername>/odoo/odoo.conf
directory=/home/<OdooUsername>/odoo/
environment=HOME="/home/<OdooUsername>",PATH="/opt/virtualenv/odoo:/usr/local/bin:/usr/bin:/bin"
user=<OdooUsername>
stdout_logfile=/var/log/odoo/odoo-access.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=7
stderr_logfile=/var/log/odoo/odoo-errors.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=7

Note : La définition de la variable d'environnement HOME permet au processus Odoo d'utiliser le bon répertoire pour le stockage des données de l'application (sessions, filestore, etc.). Ces données sont placées par défaut dans le répertoire $HOME/.local/share/Odoo/.

Note : Dans la variable d'environnement PATH, il faut mettre le PATH correspondant à votre système. La meilleure méthode est de charger le virtualenv, puis de récupérer la valeur du path avec la commande echo $PATH.

Il reste à créer le répertoire qui contiendra les fichiers de log d'Odoo.

$ sudo mkdir /var/log/odoo
$ sudo chown root:adm /var/log/odoo

Pour prendre en compte ce nouveau fichier de configuration, il suffit d'appeler la commande update de supervisor.

$ sudo supervisorctl update

L'instance Odoo devrait avoir été lancée automatiquement par supervisor.