Esto puede servir para cualquier versión de Odoo ya que estamos configurando el entorno de Docker y Docker-compose para que corra cualquier imagen de Odoo aunque en el caso de la v12 tiene algún ajuste más que por el momento no lo voy a poner porque aún no la usamos.
La forma de instalar y configurar Docker y Docker-compose la tenemos en la web oficial con ejemplos de docker-compose y todo: https://docs.docker.com/samples/library/odoo/
Más referencias en: https://blog.desdelinux.net/instalar-odoo-docker-anadir-modulos-externos/ y https://minhng.info/docker/docker-compose-for-odoo-10.html
Se puede instalar Docker y Compose de otra forma (la mayoría lo hace de esa otra forma) pero nosotros nos limitaremos a hacerlo con lo que tenemos en Ubuntu si es una distribución actual, si no tampoco es complicado hacerlo como lo dicen por ahí.
Pasos que seguiremos nosotros:
- Instalamos Docker: sudo apt install docker
- Instalamos Docker Compose: sudo apt install docker-compose (también se puede hacer así, pip install docker-compose)
- Instalamos Docker Engine por si acaso aunque seguramente ya se haya instalado: sudo curl -sSL https://get.docker.com/ | sh
- Reiniciamos Docker: sudo service docker restart
- Creamos un directorio para los ficheros de configuración tanto de docker-compose como para luego de Odoo. Normalmente nosotros creamos un directorio llamado docker y dentro de este otro llamado odoo11 (o la versión que sea).
- Nos metemos en el subdirectorio de nuestro odoo (ej. cd ./docker/odoo11) y editamos el fichero de configuración de compose: nano docker-compose.yml Hay que tener en cuenta que el fichero siempre se ha de llamar así para que docker-compose lo levante automáticamente, si le ponemos otro nombre no lo hará.
- Este archivo va a contener lo siguiente (ojo, los ficheros .yml tienen en cuenta la anidación y sangría del texto):
version: '2' services: odoo11: image: odoo:11 restart: always ports: - "8069:8069" links: - db volumes: - ./extra-addons:/mnt/extra-addons - ./config:/etc/odoo db: image: postgres:10 restart: always ports: - "5443:5432" environment: - POSTGRES_USER=odoo - POSTGRES_PASSWORD=odoo
En dicho archivo podemos hacer los siguientes cambios para adaptarlo a nuestros requerimientos:
image: odoo:11
: Puedes reemplazar odoo:11 por la versión que necesita odoo:8 , odoo:10, odoo11 o simplemente odoo:latest para la última versión disponible.ports: - "8069:8069"
: Reemplaze el primer puerto por el puerto que desee, esto le ayudará a tener múltiples instancias de odoo corriendo al mismo tiempo, por ejemplo podría quedar así,ports: - "8070:8069"
oports: - "8071:8069"
y así sucesivamenteimage: postgres:10
: También puede reemplazar la imagen de postgres que desea usar, particularmente esta versión me va bastante bien.
En líneas generales con este docker-compose.yml invocamos un conjunto de contenedores que se relacionan entre sí, como lo son el contenedor de la versión de odoo y el contenedor de postgres, así mismo para el primer contenedor manifestamos que escuchara del puerto 8069 (y se podrá acceder del que le indiquemos) y además se monta un volumen local llamado extra-addons que se vinculará automáticamente con el /mnt/extra-addons del contenedor de odoo. También ponemos el volumen config vinculado a /etc/odoo donde se ponen los ficheros de configuración de este como por ejemplo odoo.conf.
Por último se describe el usuario y contraseña a utilizar para postgres y se determina que cuando el ordenador huésped se reinicia el servicio de docker también lo hará, esto gracias al parámetro restart: always.
- Importante: Para que Odoo pueda encontrar los módulos extras en ./extra-addons hay que crear un fichero odoo.conf que pondremos en el volumen ./config con los path de los módulos nuestros separados por comas.
- En la versión 14.04 de Ubuntu puede haber problemas con la última versión de docker. Para ajustar eso pondremos una versión determinada de este de forma que no de problema:
apt install -y docker-ce=18.06.1~ce~3-0~ubuntu jq
También se puede hacer poniendo la versión 4.xxx del kernel pero nosotros lo hemos hecho con el downgrade de docker:
sudo apt-get install --install-recommends linux-generic-lts-xenial
- Hay que crear el fichero odoo.conf sin necesidad de poner todo lo que se pone en el noemal. El fichero ./config/odoo.conf puede ser así (faltarían algunas direcciones más pero nos hacemos una idea ¿no?)
[options] admin_passwd = admin_password addons-path = /mnt/extra-addons/l10n-spain-11.0,/mnt/extra-addons/,/mnt/extra-addons/account-financial-tools-11.0,/mnt/extra-addons/oficial
- Una vez que tenemos nuestro entorno compose configurado, estándo en el directorio donde tenemos el fichero docker-compose.yml, lo ponemos en marcha: sudo docker-compose up -d
El -d es para que no se quede el cursor capturado y podamos seguir trabajando tras lanzarse el docker.
- Para reiniciar Odoo o Postgres (o sea los contenedores) no hay que hacerlo con compose stop. La forma correcta es:
docker container restart <nombre_del_contenedor>
Ejemplo: docker container restart odoo
- Si lo paramos con lo siguiente, el sistema se "reseteará":
Para parar el sistema compose pondremos: sudo docker-compose stop
Para volver a activarlo: sudo docker-compose up -d
- Si desea eliminar los contenedores, redes y volúmenes asociados con este entorno en contenedor, utilice el comando
down
:
Output
Removing compose-demo_web_1 ... done
Removing network compose-demo_default
Observe que esto no eliminará la imagen base usada por Docker Compose para hacer girar su entorno (en nuestro caso, nginx:alpine
). De esta forma, siempre que vuelva a abrir su entorno con un docker-compose up
, el proceso será mucho más rápido ya que la imagen ya está en su sistema.
En el caso de que también desee eliminar la imagen base de su sistema, puede usar (se puede usar tab ):
Output
Untagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Importante: todo esto hay que ejecutarlo estando en el directorio donde esté el fichero docker-compose que queremos usar.
Si tenemos varias versiones de Odoo lo haremos con distintos ficheros docker-compose.yml en distintos subdirectorios. Al reiniciar el servidor, se iniciarán todos. Si no queremos que uno se reinicie con el servidor, le cambiamos el nombre al fichero, por ejemplo: docker.compose.yml a parado-docker-compose.yml
Una vez que tenemos nuestro docker para producción lo podremos iniciar como servicio en el inicio de nuestro servidor porque si no solo se iniciará si entramos en una sesión. Esto lo tenemos explicado en el artículo "Docker: Iniciar docker-compose como servicio".
NOTA: Si queremos tener un entorno de terminal "bash" dentro del contenedor que queramos para, por ejemplo, instalar cosas del python de nuestro contenedor de Odoo, lo iniciaremos desde terminal con esto:
docker exec -u 0 -it [container-name] bash
(esto para entrar como usuario, root. Para instalar cosas en el sistema linux del docker, etc)
docker exec -it [container-name] bash
(esto para el usuario normal sin permisos de root, odoo)
Docker exec -it [container-name] [command]
(esto ejecuta un comando sin necesidad de entrar en el bash)
El [container-name] es el nombre o el id del contenedor que obtendremos mediante el comando: docker ps
Como ejemplo he instalado los siguientes módulos que faltaban para instalar el módulo de Factura-E:
- pycountry de python3 entrando de esa forma y ejecutando el comando: pip3 install pycountry
- OpenSSL de python con: pip3 install pyopenssl
- xmlsig de python con: pip3 install xmlsig
- zeep de python con: pip3 install zeep
- xmlsec de pythin con: pip3 install xmlsec
Librerías que hay que tener instaladas dentro del sistema del contenedor de Odoo:
# Si no se instalan estas cosas, da error de instalación de barcode.
# Si es el docker de la v14 de Odoo hay que instalar
# una versión anterior de rapidfuzz
pip3 install rapidfuzz==2.14.0
# Las siguientes las instalé, pero no estoy seguro de que sean necesarias.
apt install cmake
apt install python3 python-dev python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev python-pip
# Al instalar estas sí funcionó la instalación de barcode.
sudo apt-get install gcc libpq-dev build-essential -y
sudo apt-get install python-dev python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel
# Y ahora sí se instala sin errores.
pip3 install barcode
Puede dar error de ejecución de 'x86_64-linux-gnu-gcc' al instalar xmlsec. Hay que instalar lo siguiente:
sudo apt-get install python3 python-dev python3-dev \
build-essential libssl-dev libffi-dev \
libxml2-dev libxslt1-dev zlib1g-dev \
python-pip
Ya está 🙂