Cómo instalar el software ERP Odoo 17 en Rocky Linux 9
Odoo (antes conocido como OpenERP) es un conjunto autoalojado de más de 10.000 aplicaciones de código abierto 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 familiar.
Este tutorial nos enseñará a instalar Odoo 16 Stack en un servidor Rocky Linux 9.
Requisitos previos
- Un servidor Rocky Linux 9 con un mínimo de 2GB RAM para alojar Odoo Stack.
- Un segundo servidor Rocky Linux 9 con un mínimo de 2GB 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 independiente. También puedes elegir cualquiera de las opciones de bases de datos gestionadas disponibles en cualquier proveedor de tu elección.
- 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.
- Mantén tus sistemas actualizados.
$ sudo dnf update
- Un usuario no root con privilegios sudo en ambos servidores.
- Fail2Ban debe estar instalado. Este paso es opcional. Para ello puedes seguir nuestra guía sobre la instalación de Fail2Ban en Rocky Linux.
- SELinux debe estar desactivado.
- Pocos paquetes que necesiten tus sistemas.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar las reglas del cortafuegos
El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Para este tutorial, supondremos que tienes instalado el cortafuegos Firewalld en ambos servidores.
Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --state running
El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.
$ sudo firewall-cmd --zone=public --list-all
Debería mostrar el siguiente resultado.
public target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
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 Odoo.
Ejecuta los siguientes comandos para abrir los puertos necesarios en el servidor Odoo.
$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp $ sudo firewall-cmd --zone=public --add-service=http $ sudo firewall-cmd --zone=public --add-service=https
Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client http https ssh ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
En el servidor PostgreSQL, necesitamos abrir los puertos 22, 6010 y 5432. Ábrelos utilizando los siguientes comandos.
$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp
Haz que todos los cambios sean permanentes y recarga el cortafuegos para activar los cambios.
$ sudo firewall-cmd --runtime-to-permanent $ sudo firewall-cmd --reload
Paso 2 – Asignar nombres de host
Puedes utilizar las direcciones IP de los servidores o 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.
Establece el nombre de host en el servidor de Odoo utilizando el siguiente comando.
$ sudo hostnamectl set-hostname odoo.yourdomain.com
Establece el nombre de host en el servidor PostgreSQL utilizando el siguiente comando.
$ sudo hostnamectl set-hostname postgresql.yourdomain.com
En el servidor 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.
Paso 3 – Instalar y configurar PostgreSQL
Rocky Linux 9 viene con PostgreSQL 13 por defecto y PostgreSQL 15 como módulo de flujo postgresql:15
. Sin embargo, instalaremos la última versión disponible en el momento de escribir este tutorial, PostgreSQL 16 desde su repositorio oficial.
Instala el RPM del repositorio PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Desactiva el módulo incorporado de PostgreSQL.
$ sudo dnf -qy module disable postgresql
Instala PostgreSQL 16.
$ sudo dnf install -y postgresql16-server postgresql16-contrib
Inicializa la base de datos.
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Habilita e inicia el servicio PostgreSQL.
$ sudo systemctl enable postgresql-16 $ sudo systemctl start postgresql-16
Comprueba el estado del servicio.
$ sudo systemctl status postgresql-16
Deberías obtener un resultado similar.
? postgresql-16.service - PostgreSQL 16 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled) Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago Docs: https://www.postgresql.org/docs/16/static/ Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 8678 (postgres) Tasks: 7 (limit: 10819) Memory: 17.4M CPU: 60ms CGroup: /system.slice/postgresql-16.service ??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/ ??8679 "postgres: logger " ??8680 "postgres: checkpointer " ??8681 "postgres: background writer " ??8683 "postgres: walwriter " ??8684 "postgres: autovacuum launcher " ??8685 "postgres: logical replication launcher " Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server... Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG: redirecting log output to logging collector process Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT: Future log output will appear in directory "log". Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.
A continuación, tenemos que crear un usuario de base de datos odoo
. Se te pedirá una contraseña para el rol. Introduce una contraseña segura de tu elección.
$ 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 conectarse.
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 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-16
Para encontrar dónde almacena PostgreSQL el archivo de Autenticación de Cliente, ejecuta el siguiente comando para iniciar el intérprete de comandos de PostgreSQL.
$ sudo -u postgres psql
Ejecuta la siguiente consulta para encontrar la ubicación del archivo.
postgres=# SHOW hba_file;
Obtendrás el siguiente resultado.
hba_file ------------------------------------ /var/lib/pgsql/16/data/pg_hba.conf (1 row)
Escribe exit
para salir del intérprete de comandos.
Abre el archivo /var/lib/pgsql/16/data/pg_hba.conf
para editarlo.
$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf
Pega la siguiente línea al final.
host all odoo odoo.yourdomain.com scram-sha-256
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 guardar el archivo.
Configurar la dirección de escucha de PostgreSQL
A continuación, tenemos que permitir que el servidor de bases de datos escuche conexiones remotas.
Inicia el intérprete de comandos PostgreSQL y ejecuta el siguiente comando para localizar el archivo de configuración PostgreSQL.
$ sudo -u postgres psql postgres=# SHOW config_file;
Recibirás la siguiente salida.
config_file ---------------------------------------- /var/lib/pgsql/16/data/postgresql.conf (1 row)
Escribe exit
para salir del intérprete de comandos.
Abre el archivo /var/lib/pgsql/16/data/postgresql.conf
para editarlo.
$ sudo nano /var/lib/pgsql/16/data/postgresql.conf
Cambia la línea listen_addresses
de
#listen_addresses = 'localhost' # what IP address(es) to listen on;
a.
listen_addresses = '*'
El *
significa que escuchará todas las direcciones IP. Puedes cambiarla por la dirección IP de tu instancia de odoo.
listen_addresses = 'localhost, <odoo_server_ip>'
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 el servicio PostgreSQL.
$ sudo systemctl start postgresql-16
Paso 4 – Instalar Odoo
Instala Python 3.10
Rocky Linux 9 viene con Python 3.9 mientras que Odoo 17 requiere Python 3.10 y superior. Por lo tanto, necesitamos instalarlo primero.
Puedes comprobar primero la versión disponible actualmente.
$ python --version Python 3.9.18
Instala las dependencias necesarias para Python.
$ sudo dnf groupinstall "Development Tools" $ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev $ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel
Descarga el código fuente del sitio web de Python. En el momento de escribir este tutorial, la última versión 3.10.x disponible es la 3.10.14, que es la que hemos utilizado.
$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
Extrae el archivo.
$ tar xzf Python-3.10.14.tgz
Cambia al directorio extraído.
$ cd Python-3.10.14
Configura el código fuente.
$ ./configure --enable-optimizations
Instala Python 3.10.14. Utiliza el comando altininstall
para no sobrescribir la versión de Python del sistema.
$ sudo make altinstall
Confirma la instalación.
$ python3.10 -V OR $ python3.10 --version
Deberías obtener la siguiente salida.
Python 3.10.14
A continuación, tenemos que establecer Python 3.10 como versión de Python por defecto. Crea enlaces simbólicos para cada versión de Python instalada en tu servidor. Al crear la versión simbólica, debes incluir la versión exacta de Python en tus comandos. Ejecuta los siguientes comandos para crear los enlaces simbólicos.
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1 $ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
Para ver las versiones de Python disponibles, utiliza el siguiente comando.
$ sudo update-alternatives --config python3
Deberías ver la siguiente salida.
There are 2 programs which provide 'python3'. Selection Command ----------------------------------------------- 1 /usr/local/bin/python3.10 *+ 2 /usr/bin/python3.9 Enter to keep the current selection[+], or type selection number:
Selecciona el número 1 para cambiar a Python 3.10.
Cierra la sesión y vuelve a entrar en el terminal para cambiar a la versión de Python. Ahora puedes utilizar Python 3.10.14 utilizando directamente python
.
Instala las dependencias y prepárate para la instalación
Crea un nuevo usuario de sistema para gestionar los procesos de Odoo en el servidor de Odoo con el directorio home como /opt/odoo
. Esto es para prevenir cualquier riesgo de seguridad ejecutándolo bajo el usuario root.
$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Instala las dependencias del sistema necesarias para la configuración de Odoo 17.
$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel
Instala Nodejs. Rocky Linux 9 viene con Node 18.x que es la versión LTS actual de Nodejs. Sin embargo, utilizaremos el repositorio oficial Nodesource para ello.
Añade el repositorio Node 20.
$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
Instala Nodejs.
$ sudo dnf -y install nodejs
Confirma la versión de Node.
$ node --version v20.12.1
Instala el paquete Less CSS con Node. Si utilizas un lenguaje con interfaz de derecha a izquierda, instala también el paquete rtlcss
.
$ sudo npm install -g less rtlcss
Instala wkhtmltopdf
. Utilizaremos el paquete RPM del repositorio de paquetes Wkhtmltopdf de GitHub. La última versión disponible en el momento de escribir este tutorial es 0.12.6.1 r3.
Descarga el RPM Wkhtmltopdf.
$ cd ~ $ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Instala las fuentes requeridas por Wkhtmltopdf.
$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch
Instala Wkhtmltopdf.
$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Comprueba la versión de wkhtmltopdf
instalada.
$ wkhtmltopdf --version wkhtmltopdf 0.12.6.1 (with patched qt)
Descargar archivos de Odoo
Cambiar al usuario del sistema de Odoo.
$ sudo su - odoo
Clona el repositorio Github de Odoo en tu sistema.
$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch
Para nuestro propósito, estamos copiando Odoo al directorio /opt/odoo
desde donde se instalará. Esto creará el directorio /opt/odoo/odoo
que utilizaremos para la instalación.
Configurar el entorno Virtualenv Python
Este paso es opcional pero se recomienda ya que un entorno virtual Python para Odoo ayudará a evitar conflictos con los módulos Python del Sistema Operativo, especialmente al realizar actualizaciones del SO.
Para ello, utilizaremos virtualenv
.
- Crea un nuevo entorno
virtualenv
para Odoo.$ python3 -m venv odoo-env
- Activa el entorno virtual. Vamos a crear un entorno bajo el directorio personal del usuario del sistema. Eres libre de elegir la ubicación que quieras.
$ source odoo-env/bin/activate
- Actualiza PIP por si acaso.
(odoo-env) $ pip3 install --upgrade pip
- 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 17.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Los requisitos tardarán algún tiempo en instalarse, así que ten paciencia.
Comprueba si los requisitos se han instalado correctamente comprobando la lista de módulos Python instalados.
$ pip3 list Package Version ----------------- -------- attrs 23.2.0 Babel 2.9.1 beautifulsoup4 4.12.3 cached-property 1.5.2 certifi 2024.2.2 cffi 1.16.0 chardet 4.0.0 cryptography 3.4.8 decorator 4.4.2 docopt 0.6.2 docutils 0.17 ebaysdk 2.1.5 freezegun 1.1.0 geoip2 2.9.0 gevent 21.8.0 greenlet 1.1.2 idna 2.10 isodate 0.6.1 Jinja2 3.0.3 libsass 0.20.1 lxml 4.8.0 MarkupSafe 2.0.1 maxminddb 2.6.0 num2words 0.5.10 ofxparse 0.21 passlib 1.7.4 Pillow 9.0.1 pip 24.0 platformdirs 4.2.0 polib 1.1.1 psutil 5.9.0 psycopg2 2.9.2 pyasn1 0.6.0 pyasn1_modules 0.4.0 pycparser 2.22 pydot 1.4.2 pyOpenSSL 21.0.0 pyparsing 3.1.2 PyPDF2 1.26.0 pyserial 3.5 python-dateutil 2.8.1 python-ldap 3.4.0 python-stdnum 1.17 pytz 2024.1 pyusb 1.2.1 qrcode 7.3.1 reportlab 3.6.8 requests 2.25.1 requests-file 2.0.0 requests-toolbelt 1.0.0 rjsmin 1.1.0 setuptools 65.5.0 six 1.16.0 soupsieve 2.5 urllib3 1.26.5 vobject 0.9.6.1 Werkzeug 2.0.2 wheel 0.43.0 xlrd 1.2.0 XlsxWriter 3.0.2 xlwt 1.3.0 zeep 4.1.0 zope.event 5.0 zope.interface 6.2
Sal del entorno virtual de Python.
$ deactivate
Crea un directorio para addons de terceros
$ mkdir /opt/odoo/odoo/custom-addons
Este directorio debe añadirse al parámetro addons_path
que define los directorios donde Odoo busca los módulos. Sal del usuario del sistema Odoo.
$ exit
Paso 5 – Configurar Odoo
Copia el archivo de configuración por defecto de Odoo para crear uno nuevo.
$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf
Abre el archivo para editarlo.
$ sudo nano /etc/odoo.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/odoo/addons, /opt/odoo/odoo/custom-addons xmlrpc_port = 8069 default_productivity_apps = True
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á establecida en false ya que se está utilizando el puerto PostgreSQL 5432 por defecto. Si quieres utilizar un puerto diferente, tendrás que actualizar este valor.
La opción db_user
es el nombre del usuario 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 Addons. También puedes añadir una ruta personalizada para Addons separándolas con comas.
La opción xmlrpc_port
es el puerto en el que escucha Odoo.
La opción default_productivity_apps
asegura que las aplicaciones de productividad por defecto (Empleados, Email Marketing, Proyectos y Encuestas) permanezcan activadas. Estas cuatro aplicaciones son las predeterminadas en la Edición Comunidad de Odoo. En la edición Enterprise, hay apps de productividad adicionales que se pueden habilitar por defecto y que son Citas, Conocimiento, Planificación y Firmar.
Crear servicio Odoo
Para asegurarnos de que Odoo sigue funcionando incluso después de reiniciar el 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 Requires=postgresql-16.service After=network.target postgresql-16.service [Service] Type=simple SyslogIdentifier=odoo-server User=odoo Group=odoo ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log WorkingDirectory=/opt/odoo/odoo/ StandardOutput=journal+console KillMode=mixed [Install] WantedBy=multi-user.target
Sustituye /home/<username>
por la ubicación que elegiste para instalar el Entorno Virtual Python.
Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.
Crear un directorio Log para Odoo
$ sudo mkdir /var/log/odoo
Establece los permisos del archivo
Establece los permisos en el archivo odoo-server.service
para que sólo los usuarios de Odoo puedan 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, la instalación de Odoo y el directorio log.
$ sudo chown -R odoo: /opt/odoo/ $ sudo chown -R odoo: /opt/odoo/odoo-env $ sudo chown -R odoo: /var/log/odoo
Restringe el archivo de configuración de Odoo.
$ sudo chown odoo: /etc/odoo.conf $ sudo chmod 640 /etc/odoo.conf
Iniciar el servidor 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 ? odoo-server.service - Odoo Open Source ERP and CRM Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled) Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago Main PID: 102598 (python3) Tasks: 4 (limit: 10736) Memory: 69.6M CPU: 895ms CGroup: /system.slice/odoo-server.service ??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.
Paso 6 – Instalar y configurar Nginx
Rocky Linux 9 viene con una versión antigua de Nginx. Necesitas utilizar el repositorio oficial de Nginx para instalar la última versión.
Crea y abre el archivo /etc/yum.repos.d/nginx.repo
para editarlo.
$ sudo nano /etc/yum.repos.d/nginx.repo
Pega en él el siguiente código.
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Utilizaremos la versión mainline de Nginx y, por tanto, hemos habilitado el repositorio mainline en el archivo anterior utilizando enabled=1
en la sección mainline en lugar de la estable. Puedes elegir cualquiera de las dos.
Instala Nginx.
$ sudo dnf install -y nginx
Verifica la instalación.
$ nginx -v nginx version: nginx/1.25.4
Habilita e inicia el servicio del servidor Nginx.
$ sudo systemctl enable nginx --now
Comprueba el estado del servicio.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled) Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago Docs: http://nginx.org/en/docs/ Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 103453 (nginx) Tasks: 3 (limit: 10736) Memory: 3.1M CPU: 17ms CGroup: /system.slice/nginx.service ??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??103454 "nginx: worker process" ??103455 "nginx: worker process"
Paso 7 – Instalar SSL
Necesitamos instalar Certbot para generar certificados SSL gratuitos ofrecidos por Let’s Encrypt. Para ello utilizaremos el instalador de paquetes Snapd. Requiere el repositorio EPEL (Extra Packages for Enterprise Linux) para funcionar.
Instala el repositorio EPEL.
$ sudo dnf install -y epel-release
Rocky Linux 9 no viene con Snapd instalado. Instala el paquete Snapd.
$ sudo dnf install -y snapd
Habilita e Inicia el servicio Snap.
$ sudo systemctl enable snapd --now
Instala el paquete Snap core, y asegúrate de que tu versión de Snapd está actualizada.
$ sudo snap install core $ sudo snap refresh core
Crea los enlaces necesarios para que Snapd funcione.
$ sudo ln -s /var/lib/snapd/snap /snap $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Instala Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Comprueba si Certbot funciona correctamente.
$ certbot --version certbot 2.10.0
Genera el certificado. También necesitamos crear un certificado DHParams.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com
Genera un certificado de intercambio de claves Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovación de Certbot.
$ sudo systemctl list-timers
Encontrarás snap.certbot.renew.service
como uno de los servicios programados para ejecutarse.
NEXT LEFT LAST PASSED UNIT ACTIVATES .... .... .... ...... .... ......... Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer dnf-makecache.service Wed 2024-04-10 19:08:00 UTC 7h left - - snap.certbot.renew.timer snap.certbot.renew.service Thu 2024-04-11 00:00:00 UTC 12h left Wed 2024-04-10 00:00:36 UTC 11h ago logrotate.timer logrotate.service
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 8 – Configurar Nginx
Para ejecutarlo a través de Nginx, necesitamos ejecutar Odoo en localhost. Para cambiar eso, detén el servicio Odoo.
$ sudo systemctl stop odoo-server
Abre el archivo de configuración del servidor de Odoo.
$ sudo nano /etc/odoo.conf
Añade las siguientes líneas.
xmlrpc_interface = 127.0.0.1 proxy_mode = True
Crea un archivo de configuración Nginx para Odoo.
$ sudo nano /etc/nginx/conf.d/odoo.conf
Pega el código siguiente.
#odoo server upstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } map $sent_http_content_type $content_type_csp { default ""; ~image/ "default-src 'none'"; } # http -> https server { listen 80; listen [::]:80; server_name odoo.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; http2 on; http3 on; quic_retry on; 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_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem; ssl_session_timeout 30m; 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_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; 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; } location /websocket { proxy_pass http://odoochat; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-Host $http_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; proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8 } # Redirect requests to odoo backend server location / { # Add Headers for odoo proxy mode proxy_set_header X-Forwarded-Host $http_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; proxy_redirect off; proxy_pass http://odoo; proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8 } # common gzip gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript; gzip on; # Serve static files right away location ~ ^/[^/]+/static/.+$ { # root and try_files both depend on your addons paths root /opt/odoo/odoo; try_files /opt/odoo/odoo/addons$uri @odoo; expires 24h; add_header Content-Security-Policy $content_type_csp; } }
Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Prueba la configuración de Nginx.
$ sudo nginx -t
Si no ves ningún error, significa que puedes continuar. Reinicia el servidor Nginx.
$ sudo systemctl restart nginx
Paso 9 – Iniciar Odoo
Podemos iniciar el servidor de Odoo de nuevo después de que todo esté configurado.
$ sudo systemctl start odoo-server
Inicia Odoo en tu navegador a través de https://odoo.yourdomain.com
. En tu navegador, abre la URL http://<yourIPaddress>:8069
o http://odoo.yourdomain.com:8069
. Deberías ver la pantalla de creación de la base de datos de Odoo si todo funciona correctamente.
Elige tu correo electrónico y contraseña para crear tus credenciales de acceso. La contraseña maestra es la admin_passwd
que añadiste en el archivo /etc/odoo.conf
. Rellena todos los campos restantes.
Marca el campo Demo Data
para rellenar la base de datos con datos de muestra. No instales datos de demostración en servidores orientados a Internet. Las bases de datos con datos de demostración contienen nombres de usuario y contraseñas por defecto que pueden utilizarse para entrar en tus sistemas y causar problemas importantes, incluso en sistemas de montaje/dev. Nosotros la utilizamos sólo con fines de tutorial.
Haz clic en el botón Crear base de datos para completar la instalación. La primera vez que crees una base de datos, la página de complementos tardará en cargarse, así que no actualices la página. Se te redirigirá automáticamente a la siguiente página de acceso una vez creada la base de datos.
Introduce las credenciales utilizadas en el paso anterior para iniciar sesión en el ERP Odoo y serás redirigido a la página del panel de control como se muestra a continuación. Se rellenará previamente con datos de demostración. Si no has marcado la opción de datos de demostración en la página de creación de la base de datos, obtendrás un panel de control diferente y mucho más limpio.
A partir de aquí puedes empezar a utilizar Odoo para gestionar tu negocio.
Paso 10 – Actualizar Odoo
Detén el servidor de Odoo.
$ sudo systemctl stop odoo-server
Cambia al usuario del sistema Odoo.
$ sudo su - odoo
Extrae el último código fuente de GitHub.
$ git fetch $ git rebase --autostash
El segundo comando puede encontrar conflictos con el código fuente si lo cambias manualmente. Se te dará la lista de archivos en conflicto. Tendrás que cambiar manualmente todos los archivos y volver a ejecutar el comando para solucionar los problemas.
Si quieres descartar los cambios conflictivos, puedes ejecutar el siguiente comando para restablecer la fuente.
$ git reset --hard
Activa el entorno virtual Python.
$ source odoo-env/bin/activate
Instala las dependencias de Python.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Sal del entorno virtual Python.
$ deactivate
Inicia el servidor de Odoo.
$ sudo systemctl start odoo-server
Paso 11 – Asegurar Odoo usando Fail2Ban
Este paso es opcional, pero si tienes Fail2Ban instalado, puedes añadir una configuración para proteger Odoo.
Crea y abre el archivo odoo-login.conf
para editarlo.
$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf
Pega el siguiente código en él.
[odoo-login] enabled = true port = http,https bantime = 900 ; 15 min ban maxretry = 10 ; if 10 attempts findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset logpath = /var/log/odoo.log ; set the actual odoo log path here
Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo.
Crea y abre el archivo de filtro odoo-login.conf
para editarlo.
$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf
Pega en él el siguiente código.
[Definition] failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from <HOST> ignoreregex =
Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida que guardes el archivo.
Reinicia Fail2Ban.
$ sudo systemctl restart fail2ban
Conclusión
Con esto concluye nuestro tutorial sobre la instalación y configuración de Odoo en el servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.