Odoo con docker

Odoo con docker

Las imágenes de Odoo se actualizan de forma regular para que utilicen versiones recientes (se crea una nuevo paquete nightly de cada versión de Odoo cada noche). Tenga en cuenta que lo que se refiere a la actualización de una versión 13.0 20210101 a a la más reciente 13.0 20210301 (nótese el cambio de fecha entre versiones 13.0), ya que la migración de una versión 12.0 a otra 13.0 es un proceso mucho más complejo que requiere scripts de migración.(ver Odoo Enterprise Upgrade page o el proyecto comunitario  community project los cuales manejan esos scripts).

Referencias rápidas

Etiquetas admitidas y los respectivos enlaces de Dockerfile

Referencia rápida (continuación)

¿Qué es Odoo?

Odoo, anteriormente conocido como OpenERP, es un conjunto de aplicaciones comerciales de código abierto escritas en Python y lanzadas bajo la licencia LGPL. Este conjunto de aplicaciones cubre todas las necesidades comerciales, desde el sitio web/comercio electrónico hasta la fabricación, el inventario y la contabilidad, todo perfectamente integrado. Es la primera vez que un editor de software logra alcanzar una cobertura tan funcional. Odoo es el software empresarial más instalado del mundo. Odoo es utilizado por 2.000.000 de usuarios en todo el mundo, desde empresas muy pequeñas (1 usuario) hasta empresas muy grandes (300 000 usuarios).

www.odoo.com

logo

¿Cómo usar esta imagen?

Esta imagen requiere un servidor PostgreSQL en ejecución.

Iniciar un servidor PostgreSQL

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:13

Iniciar una instancia de Odoo

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo

El alias del contenedor que ejecuta Postgres debe ser db para que Odoo pueda conectarse al servidor de Postgres.

Detener y reiniciar una instancia de Odoo

$ docker stop odoo
$ docker start -a odoo

Utilice volúmenes con nombre para conservar los datos

Cuando se crea el contenedor de Odoo como se describe arriba, el almacén de archivos de Odoo se crea dentro del contenedor. Si se elimina el contenedor, se pierde el almacén de archivos. La mejor forma de evitarlo es mediante el uso de un volumen con nombre de Docker.

$ docker run -v odoo-data:/var/lib/odoo -d -p 8069:8069 --name odoo --link db:db -t odoo

Con el comando anterior, el volumen nombrado odoo-datapersistirá incluso si se elimina el contenedor y se puede reutilizar emitiendo el mismo comando.

La ruta /var/lib/odooutilizada como punto de montaje del volumen debe coincidir con el odoo data_diren el archivo de configuración o como parámetros CLI.

Tenga en cuenta que el mismo principio se aplica al contenedor de Postgresql y se puede usar un volumen con nombre para conservar la base de datos cuando se elimina el contenedor. Entonces, el contenedor de la base de datos podría iniciarse así (antes del contenedor odoo):

$ docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:13

Detener y reiniciar un servidor PostgreSQL

Cuando se reinicia un servidor PostgreSQL, las instancias de Odoo vinculadas a ese servidor también deben reiniciarse porque la dirección del servidor ha cambiado y, por lo tanto, el vínculo se rompe.

Reiniciar un servidor PostgreSQL no afecta las bases de datos creadas.

Ejecute Odoo con una configuración personalizada

El archivo de configuración predeterminado para el servidor (ubicado en /etc/odoo/odoo.conf) se puede anular al inicio usando volúmenes. Suponga que tiene una configuración personalizada en /path/to/config/odoo.conf, entonces

$ docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo

Utilice esta plantilla de configuración para escribir su configuración personalizada, ya que ya establecimos algunos argumentos para ejecutar Odoo dentro de un contenedor Docker.

También puede especificar directamente los argumentos de Odoo en línea. Esos argumentos deben darse después de la palabra clave --en la línea de comandos, de la siguiente manera

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo -- --db-filter=odoo_db_.*

Montar complementos personalizados

Puede montar sus propios complementos de Odoo dentro del contenedor de Odoo, en/mnt/extra-addons

$ docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo

Ejecute varias instancias de Odoo

$ docker run -p 8070:8069 --name odoo2 --link db:db -t odoo
$ docker run -p 8071:8069 --name odoo3 --link db:db -t odoo

Tenga en cuenta que para el uso simple de las funcionalidades de correos electrónicos e informes, cuando los puertos del host y del contenedor difieren (p. ej., 8070 y 8069), se debe configurar, en Odoo, Configuración->Parámetros->Parámetros del sistema (requiere características técnicas), web. base.url al puerto del contenedor (por ejemplo, 127.0.0.1:8069).

Variables de entorno

Modifique estas variables de entorno para conectarse fácilmente a un servidor de postgres:

  • HOST: La dirección del servidor postgres. Si usó un contenedor de postgres, establezca el nombre del contenedor. El valor predeterminado es db.
  • PORT: El puerto que escucha el servidor de Postgres. El valor predeterminado es 5432.
  • USER: El rol de postgres con el que se conectará Odoo. Si usó un contenedor de postgres, establezca el mismo valor que POSTGRES_USER. El valor predeterminado es odoo.
  • PASSWORD: La contraseña del rol de postgres con el que se conectará Odoo. Si usó un contenedor de postgres, establezca el mismo valor que POSTGRES_PASSWORD. El valor predeterminado es odoo.

Ejemplos de composición de Docker

El archivo más simple docker-compose.ymlsería:

version: '3.1'
services:
  web:
    image: odoo:14.0
    depends_on:
      - db
    ports:
      - "8069:8069"
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo

Si las credenciales predeterminadas de postgres no le convienen, modifique las variables de entorno:

version: '3.1'
services:
  web:
    image: odoo:14.0
    depends_on:
      - mydb
    ports:
      - "8069:8069"
    environment:
    - HOST=mydb
    - USER=odoo
    - PASSWORD=myodoo
  mydb:
    image: postgres:13
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=myodoo
      - POSTGRES_USER=odoo

Aquí hay un último ejemplo que le muestra cómo

  • montar complementos personalizados ubicados en./addons
  • use un archivo de configuración personalizado ubicado en.config/odoo.conf
  • use volúmenes con nombre para el directorio de datos de Odoo y postgres
  • use un secretsarchivo llamado odoo_pg_passque contenga la contraseña postgreql compartida por ambos servicios
version: '3.1'
services:
  web:
    image: odoo:14.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
    secrets:
      - postgresql_password
  db:
    image: postgres:13
    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
    secrets:
      - postgresql_password
volumes:
  odoo-web-data:
  odoo-db-data:

secrets:
  postgresql_password:
    file: odoo_pg_pass

Para iniciar su instancia de Odoo, vaya al directorio del docker-compose.ymlarchivo que creó a partir de los ejemplos anteriores y escriba:

docker-compose up -d

Cómo actualizar esta imagen

Las imágenes de Odoo se actualizan regularmente para que utilicen versiones recientes ( cada noche se crea una nueva versión de cada versión de Odoo ). Tenga en cuenta que lo que sigue es sobre la actualización de una versión anterior a la última proporcionada de la misma versión principal, ya que la actualización de una versión principal a otra es un proceso mucho más complejo que requiere scripts de migración elaborados (consulte la página de actualización de Odoo Enterprise o este proyecto comunitario que tiene como objetivo escribir esos guiones).

Supongamos que creó una base de datos a partir de una instancia de Odoo llamada old-odoo y desea acceder a esta base de datos desde una nueva instancia de Odoo llamada new-odoo, por ejemplo, porque acaba de descargar una imagen de Odoo más nueva.

De manera predeterminada, Odoo 14.0 usa un almacén de archivos (ubicado en /var/lib/odoo/filestore/) para los archivos adjuntos. Debe restaurar este almacén de archivos en su nueva instancia de Odoo ejecutando

$ docker run --volumes-from old-odoo -p 8070:8069 --name new-odoo --link db:db -t odoo

También puede simplemente evitar que Odoo use el almacén de archivos configurando el parámetro del sistema ir_attachment.locationen db-storageConfiguración-> Parámetros-> Parámetros del sistema (requiere características técnicas).