Installer Odoo avec docker

Comment installer Odoo version communautaire open source v14 ou v15 avec docker et docker-compose. La méthode du hub de docker ne fonctionnait pas pour moi, voici comment j'ai fait...

Installer Odoo avec docker

Installation de sa première instance d'Odoo version communautaire avec Docker. Cela a été testé avec docker-compose et Odoo v14 et Odoo v15.

A priori vous avez une petite idée de ce qu'est Odoo. Si ce n'est pas le cas, vous pouvez toujours consulter la page Wikipedia ou leur site web.

Maintenant si vous souhaitez l'installer sur votre serveur, vous pouvez reprendre le fichier docker compose fourni par la page Odoo du docker hub : https://hub.docker.com/_/odoo.

Il y a d'autres façon de l'installer et cela est bien documenté.

Voici le contenue du fichier "docker-compose.yml" :

version: '3.1'
services:
  web:
    image: odoo:15.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
        # - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - PASSWORD_FILE=/run/secrets/postgresql_password
      - USER=odoo
    secrets:
      - postgresql_password
  db:
    image: postgres:13
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgresql_password
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata
      # - ./pg_hba.conf:/var/lib/postgresql/data/pgdata/pg_hba.conf
    secrets:
      - postgresql_password
volumes:
  odoo-web-data:
  odoo-db-data:

secrets:
  postgresql_password:
    file: odoo_pg_pass

Le mot de passe de la DB n'est pas passé en tant que variable d'environnement mais par un fichier ce qui évite de le stocker dans le fichier compose et de se retrouver dans un source control par exemple...

Ajoutez donc un fichier "odoo_pg_pass" avec le mot de passe de la base de donnée.

Il faut bien garder la db à postgres qui est la base de donnée par defaut. En réalité la vraie db de Odoo sera créée à la première connexion avec le nom voulu. Il vaut donc mieux éviter de la changer.

Il est aussi possible d'utiliser les credentials de postgres qui sont stockés dans un fichier de type pgpass. Il faut donc ajouter au meme niveau que votre fichier compose, un fichier "odoo_pg_pass" qui contient une ligne avec les informations suivantes "nom_hote:port:database:nomutilisateur:motdepasse" :

db:5432:postgres:odoo:password1234

Vous pouvez faire votre docker compose up (avec -d si vous le voulez en mode daemon) et si tout va bien vous avez une ligne avec odoo.service.server: HTTP service (werkzeug) running on

Cool, je me connecte et...

Internal Server Error... On remonte à la première ligne en erreur et on trouve ERROR odoodb odoo.modules.loading: Database odoodb not initialized, you can force it with -i base

A noter que cela n'arrive pas tout le temps et qu'en réalité, si vous partez bien d'un répertoire vide, pas de réseau ni de volume docker et que vous avez bien suivi les instructions au dessus, vous devriez avoir une instance qui fonctionne directement.

A la première installation, il faut initialiser la base de donnée. L'usage de "secrets" n'est pas à ce jour possible dans un container standalone.

Une façon de faire est de se connecter directement dans le container docker exec -it odoo-web-1 bash et d'executer cette commande :

# Pour initialiser la base de donnée depuis le container :
$ odoo -i base -d odoo --stop-after-init --db_host=db -r odoo -w odoo

 A la suite de cela, vous devriez avoir votre instance prête. Vous pouvez vous connecter sur localhost:8069 et vous devriez avoir la page de creation de base de donnée :