Binaural

odoologo
desarrollo odoo

Conoce el desarrollo Odoo con Docker | Guía rápida

En este post te vamos a explicar nuestra forma de iniciar un desarrollo de algún módulo personalizado para Odoo.

Desde que iniciamos nuestro trabajo de desarrollo Odoo, hemos experimentado varias formas de desarrollar: desde generar ambientes virtuales (virtualenv) con Python, hasta instalar en nuestros equipos directamente Odoo para desarrollar.

Lo anterior efectivamente nos permite trabajar, sin embargo sufrimos de los clásicos problemas de programador:

«En mi máquina funciona».

Haciendo que el proceso de probar y llevar una solución a feliz termino fuese una tarea casi imposible.

Ahí es donde Docker entra en acción, específicamente Docker-compose como herramienta para estandarizar los ambientes de desarrollo del equipo.

Archivos para levantar un ambiente de desarrollo Odoo con Docker

Existen otros archivos que usamos en la instalación base (test_deploy_local.sh, wait-for-psql.py), que sirven para evitar errores de uso de base de datos pero no son estrictamente necesarios.

La estructura del proyecto quedaría parecida a lo siguiente:

Vamos a visualizar el contenido del archivo docker-compose.yml, Dockerfile y el archivo odoo.conf ubicado en el directorio config:

version: '3.5'
services:
  web-integra14:
    build:
      context: .
    container_name: integra14_container
    depends_on:
      - db-integra14
    ports:
      - "15000:8069"
    volumes:
      - odoo-web-integra14:/var/lib/odoo
      - ./config:/etc/odoo
      - ./enterprise:/mnt/extra-addons
      - ./modules:/mnt/custom-addons
    environment:
      - PYTHONUNBUFFERED=0
  db-integra14:
    image: postgres:13
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-integra14:/var/lib/postgresql/data/pgdata
volumes:
  odoo-web-integra14:
  odoo-db-integra14:

Cada bloque indica un servicio. En nuestro caso usamos 2, el que incluye toda la instalación de Odoo y otro para el servicio de base de datos: PostgreSQL (versión 13).

Usamos nuestro nombre clave para designar el nombre al servicio (Integra), tú puedes usar el nombre que desees.

Un punto importante está en la definición de los volúmenes para el servicio Odoo:

volumes:
      - odoo-web-integra14:/var/lib/odoo
      - ./config:/etc/odoo
      - ./enterprise:/mnt/extra-addons
      - ./modules:/mnt/custom-addons

El primer volumen es el volumen compartido entre los 2 servicios, el volumen config incluye el archivo odoo.conf, el cual tiene todas las configuraciones base de Odoo.

Por ultimo, el directorio «modules» que sera el que incluya todos nuestros modulos personalizados.

Ahora veremos el archivo Dockerfile:

FROM debian:buster-slim
MAINTAINER Odoo S.A. <info@odoo.com>

SHELL ["/bin/bash", "-xo", "pipefail", "-c"]

# Generate locale C.UTF-8 for postgres and general locale data
ENV LANG C.UTF-8

# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    dirmngr \
    fonts-noto-cjk \
    gnupg \
    libssl-dev \
    node-less \
    npm \
    python3-num2words \
    python3-pdfminer \
    python3-pip \
    python3-phonenumbers \
    python3-pyldap \
    python3-qrcode \
    python3-renderpm \
    python3-setuptools \
    python3-slugify \
    python3-vobject \
    python3-watchdog \
    python3-xlrd \
    python3-xlwt \
    xz-utils \
    && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.buster_amd64.deb \
    && echo 'ea8277df4297afc507c61122f3c349af142f31e5 wkhtmltox.deb' | sha1sum -c - \
    && apt-get install -y --no-install-recommends ./wkhtmltox.deb \
    && rm -rf /var/lib/apt/lists/* wkhtmltox.deb

# install latest postgresql-client
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
    && GNUPGHOME="$(mktemp -d)" \
    && export GNUPGHOME \
    && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
    && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
    && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
    && gpgconf --kill all \
    && rm -rf "$GNUPGHOME" \
    && apt-get update  \
    && apt-get install --no-install-recommends -y postgresql-client \
    && rm -f /etc/apt/sources.list.d/pgdg.list \
    && rm -rf /var/lib/apt/lists/*

# Install rtlcss (on Debian buster)
RUN npm install -g rtlcss
#add pandas and another
RUN pip3 install num2words xlwt xlrd openpyxl xlwt pytest-odoo wheel
# Install Odoo
ENV ODOO_VERSION 14.0
ARG ODOO_RELEASE=latest
ARG ODOO_SHA=192b764692a2bb9d8ea74ca40c1457e031e98513
RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \
    #&& echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \
    && apt-get update \
    && apt-get -y install --no-install-recommends ./odoo.deb \
    && rm -rf /var/lib/apt/lists/* odoo.deb

# Copy entrypoint script and Odoo configuration file
COPY ./entrypoint.sh /
COPY ./odoo.conf /etc/odoo/

# Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons
RUN chown odoo /etc/odoo/odoo.conf \
    && mkdir -p /mnt/extra-addons \
    && chown -R odoo /mnt/extra-addons
VOLUME ["/var/lib/odoo", "/mnt/extra-addons"]

# Expose Odoo services
EXPOSE 8069 8071 8072

# Set the default config file
ENV ODOO_RC /etc/odoo/odoo.conf

COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py
RUN ["chmod", "+x", "/entrypoint.sh"]
RUN ["chmod", "+x", "/usr/local/bin/wait-for-psql.py"]
# Set default user when running the container
USER odoo

ENTRYPOINT ["/entrypoint.sh"]
CMD ["odoo"]

Básicamente iniciamos una imagen basada en Debian, descargamos las librerías necesarias. Para levantar la imagen se exponen puertos necesarios y se ejecuta el binario Odoo.

Para iniciar servicio basta con ejecutar el comando:

docker-compose up -d

Docker empezara a descargar todo lo necesario. Finalmente, podrás tener el ambiente para empezar a desarrollar; deberías poder visualizar la pantalla de inicio de Odoo usando la dirección: localhost:puerto-docker-compose (en este ejemplo el puerto es el 15000):

Odoo login
Pantalla inicial de odoo

En este punto puedes restaurar una base de datos de otra instalación o iniciar con una base de datos limpia para empezar a programar tu módulo.

En otros post estaremos mostrando como crear un módulo usando la función de Scaffold que proporciona Odoo.

Estos son los artículos relacionados:

¿Qué hay de nuevo en Odoo 15? | Actualizaciones de Odoo

¿Qué hay de nuevo en Odoo 15? | Actualizaciones de Odoo

Odoo 15 funciona como un conjunto de aplicaciones de código abierto que cubren las necesidades de tu empresa, desde las…

¿Qué es un CRM, ERP y cómo usarlos en tu empresa?

Si lo que buscas con tu empresa es mantenerte en contacto con tus clientes, hacer más rápidos los procesos y…
Odoo ERP: ¡mira cómo funciona!

Odoo ERP: ¡mira cómo funciona!

¡Definitivamente las empresas salieron de su zona de confort! Y en medio de todo este cambio, Odoo ERP ha sido…
¿Qué problemas solucionamos frecuentemente con Odoo?

¿Qué problemas solucionamos frecuentemente con Odoo?

Como partners de Odoo, estamos al servicio para solventar cualquier problema de desarrollo de software o diseño que se te…
Módulo inventario de Odoo para proyectos de gestión empresarial

Módulo inventario de Odoo para proyectos de gestión empresarial

Manejar tu inventario debe ser sencillo y práctico.  Imagínate obtener y controlar todas las operaciones y la información  de tu…
Optimiza la gestión de tus almacenes empresariales con nuestro módulo inventario de Odoo

Optimiza la gestión de tus almacenes empresariales con nuestro módulo inventario de Odoo

Hablemos del módulo inventario de Odoo. Antes que nada, rompamos los prejuicios, queremos que tengas presente que la gestión de…
Odoo en la transformación digital del siglo XXI

Odoo en la transformación digital del siglo XXI

La transformación de lo físico a lo digital es uno de los cambios que ha traído este nuevo siglo, especialmente…

¡Déjanos acá tu correo!