Basado en el repositorio
En este repositorio ponemos a su disposición lo necesario para construir un entorno de trabajo orientado al desarrollo de applicaciones y módulos para Odoo 16, con facilidades de autocomplatado, depuración, etc. Todo ello utilizado la tecnología Docker lo que nos permite montar el entorno en pocos minutos y comenzar a trabajar de inmediato. Se ha optado por no utilizar una única carpeta para los módulos de terceros (extra-addons) y por ello se han añadido otras carpetas que reflejan el nombre del paquete al que pertenece el módulo. Esta estructura nos facilita la localización de módulos concretos cuando sea necesario actualizarlos.
-
Tener instalado Git.
-
Instalar VSCode desde su página oficial.
-
Instalar las extensiones necesarias para el trabajo en Odoo con VSCode.
- Python Support
- Odoo Support
- Odoo Snippets Final (opcional)
-
Tener instaldo Docker.
La vía más fácil para obtener, construir el entorno y comenzar a trabajar inmediatamente sería:
-
Clonar este repositorio.
Las funciones de autompletado y depuración necesitan el código fuente de los odoo-stubs 16.0 y el odoo 16.0 los cuales fueron añadidos como submódulos para mantenerlos lo más actualizado posible. Es por ello que la clonación del proyecto se debe hacer según:
git clone \ --recurse-submodules \ --remote-submodules \ --shallow-submodules \ https://github.com/laguipemo/OdooDevDebDocker.git
-
Cambiarse al directorio del proyecto clonado
cd OdooDevDebDocker
-
Comprobar que el fichero
.gitignore
excluye los ficheros y carpetas no deseados. -
Comporobar que el fichero
pyrightconfig.json
contiene los paths a la carpetaodoo-stubs16
, el código de Odoo clonado en la carpetaodoo16
, específicamente su carpetaaddons
; además de los paths a las otas carpetasextra-addons-***
donde colocamos los módulos de terceros y la decustom-addons
donde ubicamos los módulos que estamos desarrollando o depurando. -
Comprobar y adecuar los ficheros de configuración
odoo.conf
ydefault.conf
a nuestras necesidades (default.conf
no está incluido porque decidí simplificar el entorno de desarrollo prescindiendo de nginx) -
Verificar que el fichero
.env
sea el adecuado para nuestras necesidades . En este punto tenemos que comprobar las variables de entorno:- Puertos locales (libres y habilitados en el router si se van a acceder desde el exterior) y nombres de contenedores, usuarios, contraseñas, etc.
- Path a la carpeta con el código de
Odoo
- El ENTRYPOINT con el que se lanza
Odoo
condebugpy
escuchando el puerto DEBUGPY adecuado y cargando el ficheroodoo.conf
. Además en este comando se puede incluir la base de datos a emplear con la opción-d nombre_base_datos
y el nombre del módulo que deseamos depurar mediante la opción-i nombreDelModulo
.
-
Comprobar y adecuar a nuestras necesidades el fichero
docker-compose.yml
. En mi caso suelo configurar este fichero para crear los servicios:Odoo
,Postgres
,Pgadmin
,Nginx
yPortainer
en producción. Sin embargo, para desarrollo prescindo de los serviciosPgadmin
,Nginx
para simplificar el entorno. Verificar bien los puertos locales indicados estén libres y habilitados. -
Levantar los servicios ejecutando:
docker compose up -d
-
Crear la configuración para depuración según:
- Ir a la opción
Ejecución y Depuración
de VScode para crear un nuevo fichero de configuración seleccionando el enlacecrear un archivo launch.json
- Se nos solicita entonces la carpeta de trabajo (workspace) en la que deseamos que se cree el fichero de configuración
- Se nos solicta que el
debugger
que utilizaremos, en este caso esPython
. - Ahora debemos indicar la configuración de depuración que utilizaremos. En nuestro caso será
Remote Attach
- Se nos solicita entonces el ip del servidor al que nos vamos a conectar remotamente para la depuración. En este caso
localhost
. - Tenemos que indicar entonces el puerto por el que estableceremos la conexión. En este caso es el que configuramos para la escucha de
DEBUGPY
- Ir a la opción
-
Creado el fichero
lunch.json
con la configuración para la depuración, lo adecuamos a nuestras necesidades. Para ello tenemos que indicar el mapeo de los diferentes paths donde se encuentran los módulos internos, los intalados y los que estamos desarrollando.
-
Clonar repositorio original asignándole un nombre si se desea:
git clone https://github.com/mjavint/docker-odoo-dev.git [nombre_del_directorio]
-
Abrir la carpeta del repositorio clonado con VSCode y reestructurarlo según sea más cómodo. En mi caso suleo llevar a cabo varios pasos:
- Crear carpetas (llamadas
extra-addons-***
) para organizar los paquetes de módulos y así locarlizarlos más fácilmente cuando los quiera actualizar. - Crear carpeta (
custom-addons
) en la que se colocarán el módulo a desarrollar o modificar. - Crear carpeta (
dockerfiles
) donde coloco los ficheros.Dockerfile
con los que construyo las imagenes personalizadas deOdoo
yNginx
(este último no lo creo en desarrollo). Además muevo a esta carpeta el ficherorequirements.txt
con todos los paquetes de python que son dependencias o requerimientos externos de los módulos deOdoo
que instalaremos. - Crear carpetas (
odoo-config
ynginx-config
) donde coloco los archivos de configuración deOdoo
yNginx
. - Crear carpeta (
log
) donde se almacenará la salida del log deOdoo
. - Crear carpeta (
devdb-backups
) donde se almacenarán las compias de seguridad automáticas de la base de datos.
- Crear carpetas (llamadas
-
Clonar código fuente de Odoo 16.0 como un submódulo:
-
Adicionar el repositorio con el código fuente de odoo como submódulo en un directorio llamdo
odoo16
:git submodule add --depth 1 https://github.com/odoo/odoo.git odoo16
-
Cambiar al nuevo directorio
odoo16
:cd odoo16
-
Traer, desde origin, el historial de las últimas confirmaciones (depth 1) correspondientes exclusivamente a la rama 16.0:
git fecth --depth=1 origin 16.0:16.0
-
Cambiar a la rama 16.0 para activar su contendio:
git switch 16.0
-
Volver al directorio del proyecto principal:
cd ..
-
Configurar el fichero .gitmodules para indicar la rama y el depth que se desean para este submódulo:
git config -f .gitmodules submodule.odoo16.branch 16.0 git config -f .gitmodules submodule.odoo16.depth 1
-
-
Clonar repositorio con los odoo-stubs 16.0 como un submódulo:
-
Adicionar el repositorio de los odoo-stubs 16.0 como submódulo en un directorio llamado
odoo-stubs16
:git submodule add --branch 16.0 https://github.com/odoo-ide/odoo-stubs.git odoo-stubs16
-
Cambiar al nuevo directorio
odoo-stubs16
:cd odoo-stubs16
-
Traer, desde origin, el historial de las últimas confirmaciones (depth 1) correspondientes exclusivamente a la rama 16.0:
git fecth --depth=1 origin 16.0:16.0
-
Cambiar a la rama 16.0 para activar su contendio:
git switch 16.0
-
Volver al directorio del proyecto principal:
cd ..
-
Configurar el fichero .gitmodules para indicar la rama y el depth que se desean para este submódulo:
git config -f .gitmodules submodule.odoo-stubs16.branch 16.0 git config -f .gitmodules submodule.odoo-stubs16.depth 1
-
-
Agregar carpeta
odoo16
con el código fuente de Odoo al área de trabajo que hemos creado. Para ello utilizamos la opciónAgregar carpeta al área de trabajo...
en el menú contextual de VSCode.
-
Actualizr el fichero
.gitignore
para que no tenga en cuenta el fichero.log
de Odoo, las copias de seguridad de la base de datos, etc. -
Configurar y modificar el fichero
pyrightconfig.json
según los paths a la carpetaodoo-stubs16
, el código de Odoo clonado en la carpetaodoo16
, específicamente su carpetaaddons
; además de los paths a las otas carpetasextra-addons-***
donde colocamos los módulos de terceros y la decustom-addons
donde ubicamos los módulos que estamos desarrollando o depurando. -
Adecuar los ficheros de configuración
odoo.conf
ydefault.conf
a nuestras necesidades. -
Adecuar a nuestras necesidades el fichero
.env
. En este punto tenemos que comprobar las variables de entorno:- Puertos locales (libres y habilitados en el router si se van a acceder desde el exterior) y nombres de contenedores, usuarios, contraseñas, etc.
- Path a la carpeta con el código de
Odoo
- El ENTRYPOINT con el que se lanza
Odoo
condebugpy
escuchando el puerto DEBUGPY adecuado y cargando el ficheroodoo.conf
. Además en este comando se puede incluir la base de datos a emplear con la opción-d nombre_base_datos
y el nombre del módulo que deseamos depurar mediante la opción-i nombreDelModulo
.
-
Adecuar a nuestras necesidades el fichero
docker-compose.yml
. En mi caso suelo configurar este fichero para crear los servicios:Odoo
,Postgres
,Pgadmin
,Nginx
yPortainer
. Teniendo en cuenta los puertos locales libres y habilitados.[!NOTE]
Para simplificar el entorno de desarrollo, no construyo los servicios de
Pgadmin
ni deNginx
-
Levantar los servicios ejecutando:
docker compose up -d
-
Crear el fichero de configuración para la depuración:
- Ir a la opción
Ejecución y Depuración
de VScode para crear un nuevo fichero de configuración seleccionando el enlacecrear un archivo launch.json
- Se nos solicita entonces la carpeta de trabajo (workspace) en la que deseamos que se cree el fichero de configuración
- Se nos solicta que el
debugger
que utilizaremos, en este caso esPython
. - Ahora debemos indicar la configuración de depuración que utilizaremos. En nuestro caso será
Remote Attach
- Se nos solicita entonces el ip del servidor al que nos vamos a conectar remotamente para la depuración. En este caso
localhost
. - Tenemos que indicar entonces el puerto por el que estableceremos la conexión. En este caso es el que configuramos para la escucha de
DEBUGPY
- Ir a la opción
-
Creado el fichero
lunch.json
con la configuración para la depuración, lo adecuamos a nuestras necesidades. Para ello tenemos que indicar el mapeo de los diferentes paths donde se encuentran los módulos internos, los intalados y los que estamos desarrollando.