Odoo es un popular conjunto de aplicaciones comerciales de código abierto que ayuda a las empresas a administrar y administrar sus negocios. Incluye una amplia gama de aplicaciones como CRM, comercio electrónico, creación de sitios web, facturación, contabilidad, fabricación, almacén, gestión de proyectos, inventario y mucho más, todo perfectamente integrado.

Odoo se puede instalar de diferentes maneras, según el caso de uso y las tecnologías disponibles. La forma más fácil y rápida de instalar Odoo es utilizando los repositorios oficiales de APT de Odoo .

La instalación de Odoo en un entorno virtual o la implementación como un contenedor de Docker le brinda más control sobre la aplicación y le permite ejecutar varias instancias de Odoo en el mismo sistema.

Este artículo explica cómo instalar e implementar Odoo 14 dentro de un entorno virtual de Python en Ubuntu 20.04. Descargaremos Odoo del repositorio oficial de GitHub y usaremos Nginx como proxy inverso.

Instalación de requisitos previos

El siguiente comando instala Git , Pip , Node.js y las [herramientas necesarias para compilar](https://linuxize.com/post/how-to-install-gcc-on-ubuntu-20-04/ Dependencias de Odoo:

sudo apt updatesudo apt install git python3-pip build-essential wget python3-dev python3-venv \    python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev \    python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev \    libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \    liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev

Creación de un usuario del sistema

No se permite ejecutar Odoo bajo el usuario raíz, ya que es un riesgo de seguridad. Crearemos un nuevo usuario y grupo del sistema con el directorio de inicio /opt/odoo14que ejecutará el servicio Odoo. Para hacerlo, ingrese el siguiente comando:

sudo useradd -m -d /opt/odoo14 -U -r -s /bin/bash odoo14

Puede nombrar al usuario como desee, siempre que cree un usuario de PostgreSQL con el mismo nombre.

Instalación y configuración de PostgreSQL

Odoo usa PostgreSQL como back-end de la base de datos. PostgreSQL está incluido en los repositorios estándar de Ubuntu. Para instalarlo, ejecuta:

sudo apt install postgresql

Cuando se complete la instalación, cree un usuario de PostgreSQL con el mismo nombre que el usuario del sistema creado anteriormente. En este ejemplo, eso es odoo14:

sudo su - postgres -c "createuser -s odoo14"

Instalación de wkhtmltopdf

wkhtmltopdf es un conjunto de herramientas de línea de comandos de código abierto para convertir páginas HTML en PDF y varios formatos de imagen. Para imprimir informes en PDF en Odoo, deberá instalar el wkhtmltoxpaquete. La versión recomendada para Odoo es la versión 0.12.5, que se puede descargar desde Github:

sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb

Una vez descargado el archivo, instálelo escribiendo:

sudo apt install ./wkhtmltox_0.12.5-1.bionic_amd64.deb

Instalación y configuración de Odoo 14

Instalaremos Odoo desde la fuente dentro de un entorno virtual de Python aislado .

Primero, cambia al usuario “odoo14”:

sudo su - odoo14

Clone el código fuente de Odoo 14 de GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo

Cree un nuevo entorno virtual de Python para Odoo:

cd /opt/odoo14python3 -m venv odoo-venv

Activar el entorno virtual:

source odoo-venv/bin/activate

Instale todos los módulos de Python necesarios con pip3:

pip3 install wheelpip3 install -r odoo/requirements.txt
Si encuentra algún error de compilación durante la instalación, asegúrese de que todas las dependencias requeridas enumeradas en la Installing Prerequisitessección estén instaladas.

Una vez hecho esto, desactive el entorno escribiendo:

deactivate

Cree un nuevo directorio que contendrá los complementos de terceros:

mkdir /opt/odoo14/odoo-custom-addons

Agregaremos este directorio al addons_pathparámetro. Este parámetro define una lista de directorios donde Odoo busca módulos.

Vuelve a tu usuario sudo:

exit

Cree un archivo de configuración con el siguiente contenido:

sudo nano /etc/odoo14.conf
/etc/odoo14.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons,/opt/odoo14/odoo-custom-addons
No olvide cambiar el my_admin_passwda algo más seguro.

Crear archivo de unidad Systemd

Abra su editor de texto y cree un archivo de unidad de servicio llamado odoo14.servicecon el siguiente contenido:

sudo nano /etc/systemd/system/odoo14.service
/etc/systemd/system/odoo14.servicio
[Unit]
Description=Odoo14
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo14
PermissionsStartOnly=true
User=odoo14
Group=odoo14
ExecStart=/opt/odoo14/odoo-venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Notifique a systemd que existe un nuevo archivo de unidad:

sudo systemctl daemon-reload

Inicie el servicio Odoo y habilítelo para que se inicie en el arranque ejecutando:

sudo systemctl enable --now odoo14

Verifica el estado del servicio:

sudo systemctl status odoo14

El resultado debería verse como a continuación, mostrando que el servicio Odoo está activo y ejecutándose:

● odoo14.service - Odoo14
     Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-10-16 19:05:32 UTC; 3s ago
...

Para ver los mensajes registrados por el servicio Odoo, use el siguiente comando:

sudo journalctl -u odoo14

Prueba de la instalación

Abre tu navegador y escribe:http://<your_domain_or_IP_address>:8069

Suponiendo que la instalación sea exitosa, aparecerá una pantalla similar a la siguiente:

Configuración de Nginx como proxy de terminación SSL

El servidor web predeterminado de Odoo sirve tráfico a través de HTTP. Para que la implementación de Odoo sea más segura, configuraremos Nginx como un proxy de terminación SSL que atenderá el tráfico a través de HTTPS.

El proxy de terminación SSL es un servidor proxy que maneja el cifrado/descifrado SSL. Esto significa que el proxy de terminación (Nginx) procesará y descifrará las conexiones TLS entrantes (HTTPS) y pasará las solicitudes sin cifrar al servicio interno (Odoo). El tráfico entre Nginx y Odoo no se cifrará (HTTP).

El uso de un proxy inverso le brinda muchos beneficios, como el equilibrio de carga, la terminación de SSL, el almacenamiento en caché, la compresión, el servicio de contenido estático y más.

Asegúrese de haber cumplido con los siguientes requisitos previos antes de continuar con esta sección:

  • Nombre de dominio que apunta a la IP de su servidor público. Usaremos example.com_
  • Nginx instalado .
  • Certificado SSL para su dominio. Puede instalar un certificado SSL gratuito de Let's Encrypt .

Abra su editor de texto y cree/edite el bloque del servidor de dominio:

sudo nano /etc/nginx/sites-enabled/example.com.conf

La siguiente configuración establece la terminación SSL, la redirección de HTTP a HTTPS, la redirección de WWW a no WWW, almacenar en caché los archivos estáticos y habilitar la compresión GZip .

/etc/nginx/sites-enabled/example.com.conf
# Odoo servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream odoochat {
 server 127.0.0.1:8072;
}

# HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/odoo.access.log;
    error_log /var/log/nginx/odoo.error.log;

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://odoochat;
    }

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://odoo;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}
No olvide reemplazar example.com con su dominio Odoo y establecer la ruta correcta a los archivos del certificado SSL. Los fragmentos utilizados en esta configuración se crean en esta guía .

Una vez que haya terminado, reinicie el servicio Nginx :

sudo systemctl restart nginx

A continuación, debemos decirle a Odoo que use el proxy. Para hacerlo, abra el archivo de configuración y agregue la siguiente línea:

/etc/odoo14.conf
proxy_mode = True

Reinicie el servicio de Odoo para que los cambios surtan efecto:

sudo systemctl restart odoo14

En este punto, el proxy inverso está configurado y puede acceder a su instancia de Odoo en https://example.com.

Cambiar la interfaz de enlace

Este paso es opcional, pero es una buena práctica de seguridad.

De forma predeterminada, el servidor de Odoo escucha el puerto 8069en todas las interfaces. Para deshabilitar el acceso directo a la instancia de Odoo, puede bloquear el puerto 8069para todas las interfaces públicas o forzar a Odoo a escuchar solo en la interfaz local.

Configuraremos Odoo para escuchar solo en 127.0.0.1Abra la configuración y agregue las siguientes dos líneas al final del archivo:

/etc/odoo14.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

Guarde el archivo de configuración y reinicie el servidor Odoo para que los cambios surtan efecto:

sudo systemctl restart odoo14

Habilitación del multiprocesamiento

De forma predeterminada, Odoo funciona en modo multiproceso. Para implementaciones de producción, se recomienda cambiar al servidor de multiprocesamiento, ya que aumenta la estabilidad y hace un mejor uso de los recursos del sistema.

Para habilitar el multiprocesamiento, debe editar la configuración de Odoo y establecer una cantidad distinta de cero de procesos de trabajo. La cantidad de trabajadores se calcula en función de la cantidad de núcleos de CPU en el sistema y la memoria RAM disponible.

De acuerdo con la documentación oficial de Odoo , para calcular el número de trabajadores y el tamaño de memoria RAM requerido , puede usar las siguientes fórmulas y suposiciones:

Cálculo del número de trabajadores

  • Número máximo teórico de trabajadores = (system_cpus * 2) + 1
  • 1 trabajador puede atender ~= 6 usuarios simultáneos
  • Los trabajadores de Cron también requieren CPU

Cálculo del tamaño de la memoria RAM

  • Consideraremos que el 20% de todas las solicitudes son solicitudes pesadas y el 80% son solicitudes más livianas. Las solicitudes pesadas usan alrededor de 1 GB de RAM, mientras que las más ligeras usan alrededor de 150 MB de RAM
  • RAM necesaria =number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )

Si no sabe cuántas CPU tiene en su sistema, use el siguiente grep comando:

grep -c ^processor /proc/cpuinfo

Supongamos que tiene un sistema con 4 núcleos de CPU, 8 GB de memoria RAM y 30 usuarios de Odoo simultáneos.

  • 30 users / 6 = **5**(5 es el número teórico de trabajadores necesarios)
  • (4 * 2) + 1 = **9**(9 es el número máximo teórico de trabajadores)

Según el cálculo anterior, puede usar 5 trabajadores + 1 trabajador para el trabajador cron que es un total de 6 trabajadores.

Calcula el consumo de memoria RAM en función del número de trabajadores:

  • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

El cálculo muestra que la instalación de Odoo necesitará alrededor de 2 GB de RAM.

Para cambiar al modo de multiprocesamiento, abra el archivo de configuración y agregue los valores calculados:

/etc/odoo14.conf
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5

Reinicie el servicio de Odoo para que los cambios surtan efecto:

sudo systemctl restart odoo14

El resto de los recursos del sistema serán utilizados por otros servicios que se ejecutan en este sistema. En esta guía, instalamos Odoo junto con PostgreSQL y Nginx en el mismo servidor. Dependiendo de su configuración, también puede tener otros servicios ejecutándose en su servidor.

Conclusión

Este artículo lo guió a través de la instalación de Odoo 14 en Ubuntu 20.04 en un entorno virtual Python usando Nginx como proxy inverso. También le mostramos cómo habilitar el multiprocesamiento y optimizar Odoo para un entorno de producción.