Cómo instalar y configurar Odoo 13 en CentOS 8 Linux

27 feb 2021 8 min di lettura
Cómo instalar y configurar Odoo 13 en CentOS 8 Linux
Indice dei contenuti

Introducción

Odoo es el software empresarial todo en uno más popular del mundo. Ofrece una amplia gama de aplicaciones comerciales, que incluyen CRM, sitio web, comercio electrónico, facturación, contabilidad, fabricación, almacén, gestión de proyectos, inventario y más, todo perfectamente integrado.

Este tutorial explica cómo instalar Odoo 13 desde la fuente dentro de un entorno virtual de Python en una máquina CentOS 8. Descargaremos la fuente de Odoo desde Github y configuraremos Nginx como un proxy inverso.

Prerrequisitos

Debe iniciar sesión como root o usuario con privilegios de sudo para completar la instalación.

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 está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando 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

Instalación de dependencia

Instale Python 3, Git, pip y todas las bibliotecas y herramientas necesarias para compilar Odoo desde la fuente:

sudo dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel

Crea un usuario del sistema

Cree un nuevo usuario y grupo del sistema con el directorio de inicio /opt/odoo que ejecutará el servicio Odoo:

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

Puede nombrar al usuario como desee, solo asegúrese de crear un usuario de PostgreSQL con el mismo nombre.

Instalar y configurar PostgreSQL

Ahora instalemos PostgreSQL 10 desde el repositorio estándar de CentOS 8:

sudo dnf install @postgresql:10

Una vez que se complete la instalación, cree un nuevo clúster de base de datos PostgreSQL:

sudo postgresql-setup initdb

Habilite e inicie el servicio PostgreSQL:

sudo systemctl enable --now postgresql

Cree un usuario de PostgreSQL con el mismo nombre que el usuario del sistema creado anteriormente, en nuestro caso que es "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, necesita la herramienta wkhtmltopdf La versión recomendada para Odoo es 0.12.5, que no está disponible en los repositorios oficiales de CentOS 8.

Instale el rpm de Github escribiendo:

sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm

Instalación y configuración de Odoo 13

Antes de comenzar con el proceso de instalación, vaya al usuario "odoo13":

sudo su - odoo13

Comience clonando el código fuente de Odoo 13 del repositorio de Odoo GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo

Navegue al /opt/odoo13 y cree un nuevo entorno virtual de Python para la instalación de Odoo:

cd /opt/odoo13
python3 -m venv venv

Active el entorno con el comando de source

source venv/bin/activate

Instale los módulos de Python necesarios:

pip3 install -r odoo/requirements.txt
Installing Dependencies

Una vez finalizada la instalación, desactive el entorno:

deactivate

Cree un nuevo directorio para complementos personalizados:

mkdir /opt/odoo13/odoo-custom-addons

Regrese a su usuario de sudo:

exit

Luego, abra el editor de texto y cree el archivo de configuración. En este tutorial usamos nano, si lo prefiere puede usar vi instalado por defecto en la mayoría de las distribuciones.

sudo dnf install nano
sudo nano /etc/odoo13.conf
[options]
 ; This is the password that allows database operations:
 admin_passwd = superadmin_passwd
 db_host = False
 db_port = False
 db_user = odoo13
 db_password = False
 addons_path = /opt/odoo13/odoo/addons, /opt/odoo13/odoo-custom-addons

Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.

No olvide cambiar superadmin_passwd por algo más seguro.

Cree el archivo de la unidad Systemd

Abra su editor de texto y cree un archivo llamado odoo13.service dentro del /etc/systemd/system/:

sudo nano /etc/systemd/system/odoo13.service

Pega el siguiente contenido:

[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/venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
 StandardOutput=journal+console

 [Install]
 WantedBy=multi-user.target

Guarde el archivo y cierre el editor.

Notifica a Systemd que existe un nuevo archivo de unidad:

sudo systemctl daemon-reload

Inicie y habilite el servicio Odoo ejecutando:

sudo systemctl enable --now odoo13

Puedes comprobar el estado del servicio con el siguiente comando:

sudo systemctl status odoo13
● odoo13.service - Odoo13
 Loaded: loaded (/etc/systemd/system/odoo13.service; enabled; vendor preset: disabled)
 Active: active (running) since Mon 2020-01-27 23:42:05 CET; 2s ago
 Main PID: 32025 (python3)
 Tasks: 4 (limit: 12251)
 Memory: 92.0M
 CGroup: /system.slice/odoo13.service
 └─32025 /opt/odoo13/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://DOMINIO_O_INDIRIZZO_IP:8069

Suponiendo que la instalación sea exitosa, se mostrará una configuración de Odoo.

Si no puede acceder a la página, es probable que su firewall esté bloqueando el puerto 8069.

Utilice los siguientes comandos para abrir la puerta requerida:

sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload

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á 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:

Abra su editor de texto y cree o modifique el bloque del servidor de dominio:

sudo nano /etc/nginx/conf.d/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;
 }

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


 location ^~ /.well-known/acme-challenge/{
 allow all;
 root /var/lib/letsencrypt/;
 default_type "text/plain";
 try_files $uri =404;
 }


 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;


 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;

 # 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;
 }

 location ^~ /.well-known/acme-challenge/{
 allow all;
 root /var/lib/letsencrypt/;
 default_type "text/plain";
 try_files $uri =404;
 }


 # Gzip
 gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
 gzip on;
 }

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:

sudo nano /etc/odoo13.conf

Agregue la siguiente línea:

proxy_mode = True

Guarde y cierre el archivo.

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 la configuración:

sudo nano /etc/odoo13.conf

Agregue las siguientes dos líneas al final del archivo:

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 un mejor uso 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 supuestos:

Cálculo del número de trabajador

  • 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 las solicitudes son 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:

sudo nano /etc/odoo13.conf

Suma los valores calculados:

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

Guarde y cierre el archivo.

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 CentOS 8 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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.