Contenedores Docker para Odoo


Introducción Un dolor de cabeza muy común para los desarrolladores odoo es el tener que establecer tu entorno de desarollo o tener que explicarle a un nuevo desarrollador todo lo que debe configurar para tener un entorno de pruebas. A veces sucede que queremos tener en paralelo dos versiones distintas de openerp/odoo.

Hasta ahora la solución que utilizaba era crear máquinas virtuales Virtualbox, pero eran bastante fastidiosas al tener que configurar adaptadores puente para poder acceder a los servicios dentro de la máquina virtual.

La solución ante tantas variaciones y exigentes configuraciones es un "Contenedor Docker".

De acuerdo con la firma analista de la industria 451 Research, "Docker es una herramienta que puede empaquetar una aplicación y sus dependencias en un contenedor virtual que se puede ejecutar en cualquier servidor Linux. Esto ayuda a permitir la flexibilidad y portabilidad en donde la aplicación se puede ejecutar, ya sea en las instalaciones físicas, la nube pública, nube privada, etc.8

-- https://es.wikipedia.org/wiki/Docker_%28software%29

Docker funciona como una especie de máquina virtual, pero con algunas ventajas relacionadas a comandos para trabajar con los contenedores y un repositorio de imágenes de contenedores que permiten bajarte un contenedor de los servicios más populares.

Un contenedor lo levantas y lo tumbas como si fuera un servicio más, así como puedes configurar fácilmente el puerto por el que escuchará dicho servicio dentro del contenedor, etc. Son muy flexibles.

Para más información, revisa su página oficial: https://www.docker.com/what-docker

Configuración de entorno docker para odoo 8 (debian jessie)

Fuente: https://docs.docker.com/engine/installation/debian/#debian-jessie-80-64-bit

Se instalan los paquetes necesarios:

apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common

Se agregan las claves de verificación para los repositorios de docker

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Agregamos el repositorio docker a nuestro archivo fuente de repositorios

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   jessie \
   stable"

Ahora actualizamos nuestros repositorios

apt-get update

Ahora, instalamos docker

$ sudo apt-get install docker-ce

Iniciamos docker:

/etc/init.d/docker start

Probamos que docker funciona a la perfección.

docker run hello-world

Este comando descarga una imagen de prueba y se ejecuta en un contenedor. Cuando el contenedor se ejecuta, imprime un mensaje informativo y luego termina su ejecución.

Ahora debemos agregar nuestro usuario preferido al grupo docker. (Cambiar ${USER} por tu usuario)

groupadd docker
sudo gpasswd -a ${USER} docker
/etc/init.d/docker restart

Descargando y ejecutando el contenedor Docker de Odoo

Fuente: https://principiantedelinux.wordpress.com/2014/06/25/odoo-8-con-docker-en-pocos-minutos-andando-en-tu-pc/ Fuente más actualizada: https://hub.docker.com/_/odoo/

nota: en anteriores oportunidades primero se descargaba la imagen y luego se instanciaba el contenedor, pero si tu imagen está en los repositorios de docker, pueder ejecutar el comando de creación de contenedores y al no conseguir la imagen, docker se encargará de descargarla y hacer el resto.

Primero debemos descargar el contenedor de postgres

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db8 postgres

Ahora descargamos y creamos el contenedor para odoo vinculado al contenedor de postgres ya creado

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

... ve a prepararte un café mientras descarga... Luego de una larga espera, corremos nuestro contenedor

Ahora verificamos en el navegador si nuestro odoo funciona:

http://localhost:8069/

Listo! Ahora te recomendamos seguir leyendo para que aprendas algunas cositas de odoo

Accediendo a los archivos dentro del contenedor

Para ejecutar una consola dentro del contenedor

docker exec -i -t odoo bash

Y allí se pueden ejecutar comandos simples como cd o mkdir

la ruta de los addons de odoo dentro del contenedor está donde siempre /usr/lib/python2.7/dist-packages/openerp/addons

Para copiar un archivo o directorio desde el host al contenedor en el directorio addons

docker cp directorio odoo:/usr/lib/python2.7/dist-packages/openerp/addons

Si necesitas borrar un archivo o un directorio, dentro del bash del contenedor rm /ruta/al/archivo

¿Qué? ¿Pensaste qu sería más dificil? Yo también!!! xD

Accediendo al contenedor como usuario root

docker exec -u 0 -it odoo bash

Puntos de montaje hacia el LOG, el ADDONS-EXTRA y el config

Algo muy común es que en el caso de odoo, necesitemos revisar los logs (/var/log/odoo/odoo.log) o modificar archivos en nuestra carpeta addons, pero esto ameritaría siempre copiarnos el archivo fuera del contenedor, y viceversa. Lo ideal en este caso es crear puntos de montaje desde el contenedor hacia el sistema anfitrión, de manera estaríamos trabajando directamente hacia los archivos dentro del contenedor. Esta configuración debe realizarse al crear el contenedor:

$ docker run -v /opt/odoo8/addons:/mnt/extra-addons -v /opt/odoo8/log:/var/log/odoo -v /opt/odoo8/config:/etc/odoo -p 8069:8069 --name odoo8 --link db8:db -t odoo:8

La ruta /opt/odoo8/addons es la del anfitrión, mientras que la ruta /mnt/extra-addons es la del contenedor.

Un cotillón de solución

Para crear un contenedor con los puntos de montaje necesarios hacia addons, log y config

1.- Crear los directorios

$ mkdir /opt/odoo8/
$ mkdir /opt/odoo8/addons
$ mkdir /opt/odoo8/config/
$ mkdir /opt/odoo8/log
$ chmod -R 755 /opt/odoo8/
$ chmod -R 777 /opt/odoo8/log

$ docker run -v /opt/odoo8/addons:/mnt/extra-addons -v /opt/odoo8/log:/var/log/odoo -v /opt/odoo8/config:/etc/odoo -p 8069:8069 --name odoo8 --link db8:db -t odoo:8
  1. Crear el archivo config en `/opt/odoo8/config/openerp-server.conf``

[options]
addons_path = /mnt/extra-addons,/usr/lib/python2.7/dist-packages/openerp/addons
data_dir = /var/lib/odoo
auto_reload = True
; admin_passwd = admin
; csv_internal_sep = ,
; db_maxconn = 64
; db_name = False
; db_template = template1
; dbfilter = .*
; debug_mode = False
; email_from = False
; limit_memory_hard = 2684354560
; limit_memory_soft = 2147483648
; limit_request = 8192
; limit_time_cpu = 300
; limit_time_real = 120
; list_db = True
; log_db = False
; log_handler = [':INFO']
; log_level = info
logfile = /var/log/odoo/odoo.log
; longpolling_port = 8072
; max_cron_threads = 2
; osv_memory_age_limit = 1.0
; osv_memory_count_limit = False
; smtp_password = False
; smtp_port = 25
; smtp_server = localhost
; smtp_ssl = False
; smtp_user = False
; workers = 16
; xmlrpc = True
; xmlrpc_interface = 
; xmlrpc_port = 8069
; xmlrpcs = True
; xmlrpcs_interface = 
; xmlrpcs_port = 8071
  1. Reiniciar el contenedor de Odoo $ docker restart odoo8

Ahora verifique el directo /opt/odoo/log/ parra ver si contiene el archivo odoo.log

Instalar Odoo 11 en Ubuntu Desktop 16.04