Introducción
Odoo es un popular conjunto de aplicaciones empresariales de código abierto. Ofrece una amplia gama de aplicaciones, que incluyen CRM, comercio electrónico, creación de sitios web, facturación, contabilidad, fabricación, almacén, gestión de proyectos, inventario y más, todo perfectamente integrado.
Odoo se puede instalar de diferentes formas según el caso de uso y las tecnologías disponibles. La forma más fácil y rápida de instalar Odoo es utilizar los repositorios oficiales de APT Odoo.
Instalar Odoo en un entorno virtual o implementarlo como un contenedor Docker le permite tener más control sobre la configuración de su sistema y ejecutar múltiples versiones de Odoo en el mismo sistema.
En esta guía, lo guiaremos a través de la instalación e implementación de Odoo 13 dentro de un entorno virtual de Python en Ubuntu 18.04. Descargaremos Odoo de su repositorio de Github y usaremos Nginx como proxy inverso.
Si desea instalar Odoo en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Requisitos previos de instalación
Inicie sesión en Ubuntu como usuario sudo y actualice la caché de Apt:
sudo apt update
Instale Git, Pip, Node.js y las herramientas necesarias para crear dependencias de Odoo:
sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less
Crea un usuario del sistema
Cree un usuario del sistema que ejecutará Odoo, llamado odoo13
con el directorio de inicio /opt/odoo13
:
sudo useradd -m -d /opt/odoo13 -U -r -s /bin/bash odoo13
Puede establecer el nombre de usuario de su elección, siempre que cree un usuario de PostgreSQL con el mismo nombre.
Instalar y configurar PostgreSQL
Odoo usa PostgreSQL como el backend de la base de datos. Para instalar PostgreSQL, ejecute el siguiente comando:
sudo apt install postgresql
Una vez finalizada la instalación, cree un usuario de PostgreSQL con el mismo nombre que el usuario del sistema creado anteriormente, en nuestro caso odoo13
:
sudo su - postgres -c "createuser -s odoo13"
Instalar Wkhtmltopdf
El wkhtmltox
proporciona un conjunto de herramientas de línea de comandos de código abierto capaces de renderizar HTML a PDF y varios formatos de imagen. Para imprimir informes en PDF, debe instalar la herramienta wkhtmltopdf
La versión recomendada para Odoo es 0.12.5
, que no está disponible en los repositorios predeterminados de Ubuntu 18.04.
Descargue el paquete usando el siguiente comando wget:
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb
Una vez que se complete la descarga, instale el paquete escribiendo:
sudo apt install./wkhtmltox_0.12.5-1.bionic_amd64.deb
Instalar y configurar Odoo 13
Como se mencionó anteriormente, instalaremos Odoo desde la fuente dentro de un entorno virtual Python aislado.
Primero, cambie al usuario "odoo13":
sudo su - odoo13
Clona el código fuente de Odoo 13 desde GitHub:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo
Una vez que se complete la descarga, cree un nuevo entorno virtual de Python para Odoo:
cd /opt/odoo13
python3 -m venv odoo-venv
Active el entorno con el siguiente comando:
source odoo-venv/bin/activate
Instale todos los módulos de Python necesarios con pip3:
pip3 install wheel
pip3 install -r odoo/requirements.txt
Si encuentra un error de compilación durante la instalación, asegúrese de que estén instaladas Installing Prerequisites
Una vez hecho esto, desactive el entorno escribiendo:
deactivate
Creamos nosotros mismos una nueva carpeta que contendrá los complementos de terceros.
mkdir /opt/odoo13/odoo-custom-addons
A continuación, agregaremos este directorio al parámetro addons_path
Este parámetro define una lista de directorios en la que Odoo busca módulos.
Regrese a su usuario de sudo:
exit
Cree un archivo de configuración con el siguiente contenido:
sudo nano /etc/odoo13.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo13
db_password = False
addons_path = /opt/odoo13/odoo/addons,/opt/odoo13/odoo-custom-addons
No olvide cambiar my_admin_passwd
por algo más seguro.
Creación de un archivo de unidad Systemd
Abra el editor de texto y cree un archivo de unidad de servicio llamado odoo13.service
con el siguiente contenido:
sudo nano /etc/systemd/system/odoo13.service
[Unit]
Description=Odoo13
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo13
PermissionsStartOnly=true
User=odoo13
Group=odoo13
ExecStart=/opt/odoo13/odoo-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
Notifica 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 inicio ejecutando:
sudo systemctl enable --now odoo13
Verifique el estado del servicio:
sudo systemctl status odoo13
El resultado debería ser similar al siguiente, lo que indica que el servicio Odoo está en funcionamiento.
● odoo13.service - Odoo13
Loaded: loaded (/etc/systemd/system/odoo13.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-01-31 18:19:24 CET; 5h 2min ago
Main PID: 29763 (python3)
Tasks: 4 (limit: 2298)
CGroup: /system.slice/odoo13.service
└─29763 /opt/odoo13/odoo-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
Para ver los mensajes grabados por el servicio Odoo, use el siguiente comando:
sudo journalctl -u odoo13
Prueba la instalación
Abra su navegador y escriba: http://TUO_DOMINIO_O_IP:8069
debería ver la página de configuración de Odoo 13.
Configurar Nginx como un proxy de terminación SSL
El servidor web predeterminado de Odoo ofrece tráfico a través de HTTP. Para hacer que la distribución de Odoo sea más segura, configuraremos Nginx como un proxy de terminación SSL que servirá 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 no cifradas al servicio interno (Odoo). El tráfico entre Nginx y Odoo no se cifrará (HTTP).
El uso de un proxy inverso ofrece numerosos beneficios, como equilibrio de carga, terminación SSL, almacenamiento en caché, compresión, entrega de contenido estático y más.
Asegúrese de haber cumplido 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
. - Instale Nginx en Ubuntu 18.04.
Abra su editor de texto y cree /edite el bloque del servidor de dominio:
sudo nano /etc/nginx/sites-enabled/example.com
La siguiente configuración establece la terminación SSL, la redirección de HTTP a HTTPS , la redirección de WWW a no WWW, almacena en caché archivos estáticos y habilita la compresión GZip.
# Odoo servers
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
server {
listen 80;
server_name www.example.com 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;
# 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 propio dominio.
Ahora necesita instalar certificados SSL con Let's Encrypt en Nginx. Los certificados se instalarán y configurarán automáticamente.
Cuando termine, reinicie el servicio Nginx:
sudo systemctl restart nginx
A continuación, necesitamos configurar Odoo para usar el proxy. Para hacer esto, abra el archivo de configuración y agregue la siguiente línea:
sudo nano /etc/odoo13.conf
proxy_mode = True
Reinicie el servicio Odoo para que los cambios surtan efecto:
sudo systemctl restart odoo13
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 Odoo escucha el puerto 8069
en todas las interfaces. Para deshabilitar el acceso directo a la instancia de Odoo, puede bloquear el puerto 8069
para todas las interfaces públicas u obligar a Odoo a escuchar solo en la interfaz local.
Configuraremos Odoo para que solo escuche en 127.0.0.1
. Abra el archivo de configuración y agregue las siguientes dos líneas al final del archivo:
sudo nano /etc/odoo13.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 odoo13
Habilitar multiprocesamiento
De forma predeterminada, Odoo funciona en modo multiproceso. Para implementaciones de producción, se recomienda que cambie al servidor multiprocesador, ya que aumenta la estabilidad y permite una mejor utilización de los recursos del sistema.
Para habilitar el multiprocesamiento, debe cambiar la configuración de Odoo y establecer un número de procesos de trabajo distinto de cero. 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 RAM requerido, se pueden utilizar las siguientes fórmulas y suposiciones:
Cálculo del número de trabajadores.
- Número máximo teórico de trabajador = (system_cpus * 2) + 1
- 1 trabajador puede atender ~ = 6 usuarios simultáneos
- Los Chrones 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 ligeras. Las demandas pesadas usan alrededor de 1 GB de RAM, mientras que las demandas más ligeras usan alrededor de 150 MB de RAM
- RAM requerida =
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 comando grep
grep -c ^processor /proc/cpuinfo
Digamos que tiene un sistema con 4 núcleos de CPU, 8 GB de RAM y 30 usuarios simultáneos de Odoo.
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, se pueden usar 5 trabajadores + 1 trabajador para el cron para un total de 6 trabajadores.
Calcule el consumo de 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 requerirá alrededor de 2 GB de RAM.
Para cambiar al modo multiprocesamiento, abra el archivo de configuración y agregue los valores calculados:
sudo nano /etc/odoo13.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 Odoo para que los cambios surtan efecto:
sudo systemctl restart odoo13
El resto de los recursos del sistema serán utilizados por otros servicios que se ejecutan en este sistema. En esta guía, hemos instalado Odoo junto con PostgreSQL y Nginx en el mismo servidor. Dependiendo de su configuración, es posible que se estén ejecutando otros servicios en el servidor.
Conclusión
Este tutorial lo guió a través de la instalación de Odoo 13 en Ubuntu 18.04 en un entorno virtual de Python usando Nginx como proxy inverso. También le mostramos cómo habilitar el multiprocesamiento y optimizar Odoo para un entorno de producción.