Cómo instalar el software ERP Odoo 14 en Ubuntu 20.04

Odoo (antes conocido como OpenERP) es un conjunto autoalojado de más de 10.000 aplicaciones de código abierto adecuadas para diversas necesidades empresariales, como CRM, comercio electrónico, contabilidad, inventario, gestión de proyectos y punto de venta. Estas aplicaciones están totalmente integradas y se accede a ellas a través de una interfaz web común.

En este tutorial, aprenderemos a instalar Odoo 14 Stack en un servidor basado en Ubuntu 20.04.

Requisitos previos

  1. Un servidor basado en Ubuntu 20.04 con un mínimo de 2GB de RAM para alojar Odoo Stack.

  2. Un segundo servidor basado en Ubuntu 20.04 con un mínimo de 2GB de RAM para alojar la base de datos PostgreSQL. Sin embargo, puedes instalar la base de datos en el mismo servidor que Odoo, pero para entornos de producción, es muy recomendable que la instales en un servidor separado. También puedes elegir cualquiera de las opciones de bases de datos gestionadas disponibles en cualquier proveedor de tu elección.

  3. Los requisitos de RAM dependerán del número de usuarios simultáneos que vayan a utilizar la pila. Puedes encontrar una guía detallada sobre cómo calcular los requisitos del sistema en la documentación de Odoo.

  4. Mantén tus sistemas actualizados.

    $ sudo apt update
    $ sudo apt upgrade
    
  5. Un usuario no root con privilegios sudo en ambos servidores.

Configurar las reglas del Firewall

Para el propósito de este tutorial, asumiremos que tienes instalado el firewall ufw en ambos servidores.

En el servidor de Odoo, necesitaremos que los puertos 22, 80, 443, 6010, 5432 y 8069 estén abiertos. El 22 se utiliza para SSH, el 80 para HTTP, el 443 para HTTPS, el 6010 para la comunicación con Odoo, el 5432 para PostgreSQL y el 8069 para la aplicación del servidor de Odoo.

Ejecuta los siguientes comandos para abrir los puertos necesarios en el servidor de Odoo.

$ sudo ufw allow "OpenSSH"
$ sudo ufw allow 80,443,6010,5432,8069,8072/tcp
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 6010/tcp
$ sudo ufw allow 5432/tcp
$ sudo ufw allow 8069/tcp
$ sudo ufw allow 8072/tcp

En el servidor PostgreSQL, necesitamos abrir los puertos 22, 6010 y 5432. Ábrelos usando los comandos que acabamos de discutir.

Asignar nombres de host

Puedes utilizar las direcciones IP de los servidores o utilizar sus Nombres de Dominio Completamente Cualificados (FQDN), si están disponibles. Para nuestro tutorial, utilizaremos FQDNs y para ello, necesitamos establecer nombres de host en ambos servidores.

En el servidor de Odoo, abre el archivo /etc/hosts.

$ sudo nano /etc/hosts

Asegúrate de que tiene el siguiente aspecto.

127.0.0.1 	localhost
127.0.0.1	odoo.yourdomain.com		odoo
10.1.1.10	postgresql.yourdomain.com	postgresql

En el servidor PostgreSQL, abre el archivo y asegúrate de que tiene el siguiente aspecto.

127.0.0.1 	localhost
127.0.0.1	postgresql.yourdomain.com	postgresql
10.1.2.10	odoo.yourdomain.com		odoo

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.

Instalar y configurar PostgreSQL

Ubuntu 20.04 viene con PostgreSQL 12 por defecto y vamos a instalarlo. Ejecuta el siguiente comando en el servidor PostgreSQL.

$ sudo apt install postgresql-12 postgresql-server-dev-12

A continuación, tenemos que crear un usuario de base de datos odoo.

$ sudo -u postgres createuser odoo -U postgres -dP

La opción -u ejecuta el comando como usuario postgres.

La opción -U indica el nombre de usuario con el que nos conectaremos.

La opción -d concede al usuario permiso para crear bases de datos.

La opción -p solicita la contraseña del nuevo usuario.

Configurar la autenticación basada en el host

Necesitamos dar permiso al servicio PostgreSQL para que pueda conectarse al servidor de Odoo.

Primero, detén el servicio PostgreSQL.

$ sudo systemctl stop postgresql

Abre el archivo /etc/postgresql/12/main/pg_hba.conf para editarlo.

$ sudo nano /etc/postgresql/12/main/pg_hba.conf

Pega la siguiente línea al final.

host		all		odoo		odoo.yourdomain.com		md5

Esta línea concede permiso al usuario odoo para conectarse a todas las bases de datos de este servidor. También puedes especificar el nombre de las bases de datos en lugar de utilizar la palabra clave all.

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida que guardes el archivo.

Configurar la dirección de escucha de PostgreSQL

A continuación, tenemos que permitir que el servidor de la base de datos escuche las conexiones remotas. Abre el archivo /etc/postgresql/12/main/postgresql.conf para editarlo.

$ sudo nano /etc/postgresql/12/main/postgresql.conf

Cambia la línea listen_addresses de

#listen_addresses = 'localhost' # what IP address(es) to listen on;

a.

#From CONNECTIONS AND AUTHENTICATION Section
listen_addresses = '*'

El * significa que escuchará todas las direcciones IP. Puedes cambiarla por la dirección IP de tu instancia de odoo.

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.

Habilitar e iniciar el servicio PostgreSQL

Ya que nuestra configuración está terminada, es hora de iniciar y habilitar el servicio PostgreSQL.

$ sudo systemctl start postgresql && sudo systemctl enable postgresql

Instalar Odoo

Instalar las dependencias y preparar la instalación

Crea un nuevo usuario del sistema para gestionar los procesos de Odoo en el servidor de Odoo.

$ sudo adduser --system --home=/opt/odoo --group odoo

Necesitamos instalar algunas dependencias del sistema, pero antes, necesitamos habilitar los repositorios de fuentes. Para ello, haz una copia de seguridad de la lista de fuentes original y luego habilita todos los repositorios de fuentes y actualiza la lista de repositorios.

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list~
$ sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
$ sudo apt update

Instala las dependencias del sistema necesarias para la configuración de Odoo 14.

 $ sudo apt install python3-pip python3-suds python3-all-dev python3-venv python3-dev python3-setuptools python3-tk libxml2-dev libxslt1-dev libevent-dev libsasl2-dev libldap2-dev pkg-config libtiff5-dev libjpeg8-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev liblcms2-utils libwebp-dev tcl8.6-dev tk8.6-dev libyaml-dev fontconfig xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils libpq-dev
$ sudo apt build-dep lxml

Instala Nodejs.

$ sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt install nodejs

Instala el paquete Less CSS con Node.

$ sudo npm install -g less less-plugin-clean-css

Descarga el paquete wkhtmltopdf versión 0.12.6.

$ cd /tmp
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb

Instala el paquete.

$ sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb

Para asegurar que wkhtmltopdf funciona correctamente, copia los binarios en /usr/bin y dales los permisos adecuados.

$ sudo cp /usr/local/bin/wkhtmlto* /usr/bin/
$ sudo chmod a+x /usr/bin/wk*
$ cd ~

Descarga los archivos de Odoo

Clona el repositorio Github de Odoo en tu sistema.

$ sudo git clone https://github.com/odoo/odoo.git --depth 1 --branch 14.0 --single-branch /opt/odoo

Para nuestro propósito, estamos copiando Odoo en el directorio /opt/odoo desde donde se instalará.

Configura el entorno Python de Virtualenv

Este paso es opcional, pero se recomienda ya que un entorno virtual de Python para Odoo ayudará a evitar conflictos con los módulos de Python del sistema operativo, especialmente cuando se realicen actualizaciones del sistema operativo.

Para ello, utilizaremos virtualenv.

  1. Crea un nuevo entorno virtualenv para Odoo.

    $ python3 -m venv /home/<username>/odoo-env
    
  2. Activa el entorno virtual. Vamos a crear un entorno bajo el directorio principal del usuario del sistema. Eres libre de elegir la ubicación que quieras.

    $ source /home/<username>/odoo-env/bin/activate
    
  3. Actualiza el PIP por si acaso.

    (odoo-env) $ pip3 install --upgrade pip
    
  4. Instala la rueda de Python en el entorno virtual.

    $ pip3 install wheel
    

Instala las dependencias de Python

Instala las dependencias de Python requeridas por Odoo 14.

$ pip3 install -r /opt/odoo/doc/requirements.txt
$ pip3 install -r /opt/odoo/requirements.txt

Los requisitos tardarán un poco en instalarse, así que ten paciencia.

Comprueba si los requisitos se han instalado correctamente revisando la lista de módulos de Python instalados.

$ pip3 list
Package                       Version
----------------------------- ---------
alabaster                     0.7.12
appdirs                       1.4.4
attrs                         20.3.0
Babel                         2.6.0
beautifulsoup4                4.9.3
cached-property               1.5.2
certifi                       2020.12.5
chardet                       3.0.4
decorator                     4.3.0
defusedxml                    0.7.1
docutils                      0.14
ebaysdk                       2.1.5
feedparser                    5.2.1
freezegun                     0.3.15
gevent                        20.9.0
greenlet                      0.4.17
html2text                     2018.1.9
idna                          2.6
imagesize                     1.2.0
isodate                       0.6.0
Jinja2                        2.11.2
libsass                       0.17.0
lxml                          4.6.1
Mako                          1.0.7
MarkupSafe                    1.1.0
num2words                     0.5.6
ofxparse                      0.19
packaging                     20.9
passlib                       1.7.1
Pillow                        8.0.1
pip                           21.0.1
pkg-resources                 0.0.0
polib                         1.1.0
psutil                        5.6.6
psycopg2                      2.8.5
pyasn1                        0.4.8
pyasn1-modules                0.2.8
pydot                         1.4.1
Pygments                      2.8.1
pyparsing                     2.4.7
PyPDF2                        1.26.0
pyserial                      3.4
python-dateutil               2.7.3
python-ldap                   3.1.0
python-stdnum                 1.8
pytz                          2019.1
pyusb                         1.0.2
qrcode                        6.1
reportlab                     3.5.55
requests                      2.21.0
requests-toolbelt             0.9.1
setuptools                    44.0.0
six                           1.15.0
snowballstemmer               2.1.0
soupsieve                     2.2
Sphinx                        3.5.2
sphinx-patchqueue             1.0.4
sphinxcontrib-applehelp       1.0.2
sphinxcontrib-devhelp         1.0.2
sphinxcontrib-htmlhelp        1.0.3
sphinxcontrib-jsmath          1.0.1
sphinxcontrib-qthelp          1.0.3
sphinxcontrib-serializinghtml 1.1.4
unidiff                       0.6.0
urllib3                       1.24.3
vobject                       0.9.6.1
Werkzeug                      0.16.1
wheel                         0.36.2
xlrd                          1.2.0
XlsxWriter                    1.1.2
xlwt                          1.3.0
zeep                          3.2.0
zope.event                    4.5.0
zope.interface                5.2.0

Sal del entorno virtual de Python.

$ deactivate

Configurar Odoo

Copia el archivo de configuración de Odoo por defecto para crear uno nuevo.

$ sudo cp /opt/odoo/debian/odoo.conf /etc/odoo-server.conf

Abre el archivo para editarlo.

$ sudo nano /etc/odoo-server.conf

Edita el archivo para que tenga el siguiente aspecto.

[options]
; This is the password that allows database operations:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/addons
xmlrpc_port = 8069

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.

La opción admin_passwd es la contraseña que permite las operaciones administrativas dentro de la GUI de Odoo. Asegúrate de elegir una contraseña segura.

La opción db_host es el FQDN o la dirección IP del servidor PostgreSQL.

La opción db_port está configurada como falsa ya que se está utilizando el puerto 5432 de PostgreSQL por defecto. Si quieres utilizar un puerto diferente, tendrás que actualizar este valor.

La opción db_user es el nombre del usuario de PostgreSQL.

La opción db_password es la contraseña del usuario PostgreSQL 'odoo' que creamos anteriormente en el servidor PostgreSQL.

La opción addons_path es la ruta por defecto de los Addons. También puedes añadir una ruta personalizada para los Addons separándolos con comas.

La opción xmlrpc_port es el puerto en el que escucha Odoo.

Crear el servicio de Odoo

Para asegurarnos de que Odoo sigue funcionando incluso después de un reinicio del sistema, necesitamos crear un servicio para él.

Crea un archivo /lib/systemd/system/odoo-server.service y ábrelo para editarlo.

$ sudo nano /lib/systemd/system/odoo-server.service

Pega el siguiente código en él.

[Unit]
Description=Odoo Open Source ERP and CRM

[Service]
Type=simple
PermissionsStartOnly=true
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/home/<username>/odoo-env/bin/python3 /opt/odoo/odoo-bin --config=/etc/odoo-server.conf --addons-path=/opt/odoo/addons/
WorkingDirectory=/opt/odoo/
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Sustituye /home/<username> por la ubicación que elegiste para instalar el Entorno Virtual de Python.

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.

Establecer los permisos del archivo

Establece los permisos del archivo odoo-server.service para que sólo el usuario de Odoo pueda leerlo o ejecutarlo.

$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service

Establece la propiedad en el entorno Python y en el directorio de instalación de Odoo.

$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /home/<username>/odoo-env

Restringe el archivo de configuración de Odoo.

$ sudo chown odoo: /etc/odoo-server.conf
$ sudo chmod 640 /etc/odoo-server.conf

Iniciar el servidor de Odoo

Inicia y habilita el servidor de Odoo.

$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server

Comprueba el estado del servidor.

$ sudo systemctl status odoo-server

En tu navegador, abre la URL http://<yourIPaddress>:8069 o http://odoo.yourdomain.com:8069. Si todo funciona correctamente, deberías ver la pantalla de creación de la base de datos de Odoo.

Pantalla de instalación de Odoo

Rellena todos los campos. Marca el campo Demo Data para rellenar la base de datos con datos de muestra y luego haz clic en el botón Crear base de datos.

A continuación, se te mostrará una lista de aplicaciones que puedes elegir y seleccionar.

La primera vez que crees una base de datos, la página de complementos tardará en cargarse, así que no actualices la página.

Instalar y configurar Nginx

Hasta ahora, hemos estado utilizando el servidor de Odoo para ejecutar la pila. Pero lo ideal es ejecutarlo en Nginx usando un proxy porque eso nos permitirá instalar SSL en él.

Instala Nginx.

$ sudo apt install nginx

Para ejecutarlo a través de Nginx, necesitamos ejecutar Odoo en localhost. Para cambiar eso, detén el servicio de Odoo.

$ sudo systemctl stop odoo-server

Abre el archivo de configuración del servidor de Odoo.

$ sudo nano /etc/odoo-server.conf

Añade las siguientes líneas.

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Crea un archivo de configuración de Nginx para Odoo.

$ sudo nano /etc/nginx/sites-available/odoo.conf

Pega el siguiente código.

#odoo server
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}

# http -> https
server {
   listen 80;
   server_name odoo.yourdomain.com;
   rewrite ^(.*) https://$host$1 permanent;
}

server {
 listen 443 ssl http2;
 server_name odoo.yourdomain.com;
 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Add Headers for odoo proxy mode
 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/odoo.yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
 ssl_session_timeout 1d;
 ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
 ssl_session_tickets off;
 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
 ssl_prefer_server_ciphers off;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;

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

 # Redirect longpoll requests to odoo longpolling port
 location /longpolling {
 proxy_pass http://odoochat;
 }

 # Redirect requests to odoo backend server
 location / {
   proxy_redirect off;
   proxy_pass http://odoo;
 }

 # common gzip
 gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
 gzip on;
}

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.

Activa este archivo de configuración vinculándolo al directorio sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/odoo.conf /etc/nginx/sites-enabled/

Prueba la configuración de Nginx.

$ sudo nginx -t

Instalar SSL

Vamos a instalar el SSL utilizando el servicio Let's Encrypt.

Para ello, instala Certbot.

$ sudo apt install certbot

Detén Nginx porque interferirá con el proceso de Certbot.

$ sudo systemctl stop nginx

Genera el certificado. También necesitamos crear un certificado DHParams.

$ sudo certbot certonly --standalone -d odoo.yourdomain.com --preferred-challenges http --agree-tos -n -m [email protected] --keep-until-expiring 
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

También necesitamos configurar una tarea cron para renovar el SSL automáticamente. Para abrir el editor crontab, ejecuta el siguiente comando.

$ sudo crontab -e

Pega la siguiente línea en la parte inferior.

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”

El trabajo cron anterior ejecutará certbot a las 2:25 de la madrugada todos los días. Puedes cambiarlo por lo que quieras.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Iniciar Odoo

Ahora que todo está configurado, podemos iniciar el servidor de Odoo de nuevo.

$ sudo systemctl start odoo-server

Inicia Odoo en tu navegador a través de https://odoo.yourdomain.com. Te aparecerá la pantalla descrita anteriormente. Introduce los datos necesarios para crear la base de datos y deberías entrar en Odoo y ver una pantalla como esta.

Página de inicio de Odoo

Conclusión

Con esto concluye nuestro tutorial sobre la instalación de Odoo en el servidor Ubuntu 20.04. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...