[Tutoriales] Instalando odoo 12 en CentOS 7 Paso a Paso
odoo es una solución empresarial Open Source modular que integra un sin número de herramientas que pueden ayudarle a optimizar su negocio. Aquí te enseñamos como instalarlo.
El siguiente tutorial busca mostrarle paso a paso como instalar odoo 12 en un servidor linux CentOS 7.x con un nombre de dominio o sub-dominio personalizado utilizando nginx como Reverse Proxy con un certificado SSL provisto por Let's Encrypt para proveer una conexión segura a su servicio.
Prerequisitos
- Máquina Virtual o Servidor Dedicado con Linux (CentOS 7)
- Permiso
root
- Un dominio o sub-dominio que apunte a la dirección IP de su servidor.
- Disponer de los puertos 80 y 443 habilitados.
Hemos preparado este tutorial utilizando una máquina virtual con CentOS Linux release 7.6 (Core).
Instalación
Para iniciar la instalación de odoo 12 en CentOS 7 de forma correcta procederemos con los siguientes pasos:
1. Instalar Python 3.6 y las dependencias de odoo
Para instalar Python 3.6 en CentOS 7, se requiere del repositorio de Extra Packages for Enterprise (EPEL) 1 y Software Collections (SCL) 2. Al habilitar estas librerías tendremos acceso a nuevas versiones de servicios y lenguajes de programación no disponibles a través del repositorio base del Sistema Operativo.
Instalación de los Repositorios
Para habilitar los repositorios de EPEL 1 y SCL 2 ejecutamos el siguiente comando:
sudo yum install -y epel-release centos-release-scl
Instalación de los Paquetes Fuentes
Luego de completada la instalación de los repositorios, podremos instalar Python 3.6 junto a todas las herramientas necesarias para construir las dependencias de odoo:
sudo yum install -y rh-python36 git gcc wget nodejs-less libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel
Durante el proceso de instalación, al utilizar paquetes de los repositorios instalados de forma reciente y descargar archivos de estos repositorios por primera vez, el sistema le solicitará autorización para aceptar las llaves GPG 3 de los servidores remotos, lo cual le permitirá acceder a la información publicada en estos repositorios:
...
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
Importing GPG key 0xF2EE9D55:
Userid : "CentOS SoftwareCollections SIG (https://wiki.centos.org/SpecialInterestGroup/SCLo) <security@centos.org>"
Fingerprint: c4db d535 b1fb ba14 f8ba 64a8 4eb8 4e71 f2ee 9d55
Package : centos-release-scl-rh-2-3.el7.centos.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
Is this ok [y/N]: y
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
Userid : "Fedora EPEL (7) <epel@fedoraproject.org>"
Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
Package : epel-release-7-11.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]: y
Escriba y
y presione enter
para aceptar las llaves y continuar.
2. Crear el Usuario de Sistema de odoo
Según el formato de conexión establecido con el servicio de PostgreSQL, necesitaremos un Usuario de Sistema que posea los permisos necesarios para ejecutar odoo y conectarse con la base de datos. Para evitar conflictos de permisos durante el proceso de instalación, crearemos un Usuario de Sistema que será utilizado en todo el proceso de instalación de odoo y el cuál será el usuario por defecto a utilizar para conectar la base de datos. Para crear este usuario utilizaremos el siguiente comando:
sudo useradd -m -U -r -d /opt/odoo12 -s /bin/bash odoo_user
Opcional - Tips de Seguridad
Puede establecer una contraseña para este usuario utilizando el siguiente comando:
sudo passwd odoo_user
La consola le solicitará que coloque una contraseña segura para el usuario. Esta contraseña debe ser colocada dos veces para confirmar que es correcta.
3. Instalar y Configurar PostgreSQL
Hasta el momento de publicación de este tutorial no ha sido publicada de forma oficial en el repositorio de CentOS 7.6 una versión de PostgreSQL compatible con odoo 12. Por esta razón instalaremos PostgreSQL a través del repositorio oficial de la organización.
Instalación del Repositorio Oficial de PostgreSQL
Para instalar este repositorio procedemos ejecutar el siguiente comando:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
Instalación del Servicio
Completada la instalación del repositorio, procedemos a instalar PostgreSQL Server:
sudo yum install -y postgresql10-server postgresql10-devel
Al igual que el Paso 2, al instalar un nuevo repositorio, el sistema le solicitará aceptar las llaves GPG 3 de los servidores remotos:
...
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
Userid : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>"
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package : pgdg-redhat-repo-42.0-4.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y
Escriba y
y presione enter
para aceptar las llaves y continuar.
Iniciación y Configuración del Servicio
Iniciamos la base de datos a través del siguiente comando:
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Si la inicialización se completa correctamente deberá recibir el siguiente mensaje:
Initializing database ... OK
Una vez finalizada la inicialización procedemos a habilitar el servicio de PostgreSQL. Si no está familiarizado con el termino, "habilitar un servicio" en Linux corresponde a añadir dicho servicio en la Lista de Servicios del Sistema, la cuál asegura que el servicio sea restablecido cada vez que iniciemos o re-iniciemos el sistema:
sudo systemctl enable postgresql-10
sudo systemctl start postgresql-10
Creación del usuario PostgreSQL de odoo
Procedemos a crear el usuario de Base de Datos con el mismo nombre del Usuario de Sistema creado anteriormente en el Paso 2:
sudo su - postgres -c "createuser -s odoo_user"
4. Instalar WKHTMLtoPDF
wkhtmltopdf
es una paquete Open Source que permite convertir documentos HTML a PDF a través de la línea de comandos. odoo necesita de esta aplicación para poder imprimir Reportes PDF. La versión recomendada por odoo es la 0.12.1
. Esta versión se encuentra disponible en el repositorio base.
Opcional - Validar versión existente
Si desea conocer la versión de wkhtmltopdf
disponible en los repositorios del sistema, puede ejecutar el siguiente comando:
sudo yum info wkhtmltopdf.x86_64
Para instalar la aplicación procedemos a ejecutar el siguiente comando:
sudo yum install -y wkhtmltopdf.x86_64
Update: 24 de Octubre de 2019
Descargamos la aplicación en el directorio home del usuario:
wget -P ~/. https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.1/wkhtmltox-0.12.1_linux-centos7-amd64.rpm
Procedemos a reinstalar la librería a través del siguiente comando:
sudo yum localinstall ~/wkhtmltox-0.12.1_linux-centos7-amd64.rpm
Con estos pasos hemos reinstalado correctamente la librería. Si su problema estaba relacionado a este inconveniente, su instalación de Odoo debería exportar correctamente los archivos PDF.
5. Instalar y Configurar odoo
Para iniciar con el proceso de instalación de odoo de forma correcta debemos iniciar sesión con el Usuario de Sistema creado en el Paso 2 de este tutorial. Para realizar esta acción procedemos a ejecutar el siguiente comando:
sudo su - odoo_user
Copia del Repositorio
Procedemos a clonar el código fuente de odoo 12 desde el repositorio de odoo en GitHub a traves del siguiente comando:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 12.0 /opt/odoo12/odoo
Esta acción iniciará el proceso de copia que demorará de 1 a varios minutos dependiendo de su velocidad de internet.
Habilitando y Configurando Python
Procedemos a habilitar la colección de software requerida para acceder a la versión de los binarios de Python 3.6:
scl enable rh-python36 bash
Procedemos a movernos a la ruta donde hemos copiado los archivos fuentes de odoo y donde realizaremos la instalación:
cd /opt/odoo12
Creamos un nuevo ambiente de Python 3 para disponer de las librerías requeridas en los próximos pasos:
python3 -m venv venv
Procedemos a activar el ambiente:
source venv/bin/activate
Tips de Seguridad
Puede confirmar que el ambiente fue activado correctamente si ve que su línea de comandos a cambiado al siguiente formato:
(venv) [odoo12@erp ~]$
Iniciando la instalación de pre-requisitos de Python
Procedemos a instalar todos los módulos de Python requeridos a través del siguiente comando:
(venv) [odoo12@erp ~]$ pip3 install -r odoo/requirements.txt
Este proceso iniciará la descarga e instalación de los módulos de Python requeridos para la instalación de odoo. Este proceso es riguroso y podrá demorar de 3 a 15 minutos dependiendo de los recursos de su equipo.
Si su instalación fue completada correctamente deberá ver el siguiente mensaje:
...
Successfully installed Babel-2.3.4 Jinja2-2.10.1 ...
...
Una vez completado todo este proceso, procedemos a desactivar el ambiente de Python 3 a través del siguiente comando:
(venv) [odoo12@erp ~]$ deactivate
Creación de Directorio para Custom Addons
Antes de cerrar la sesión del usuario odoo_user
, procedemos a crear una carpeta para componentes personalizados:
mkdir /opt/odoo12/odoo-custom-addons
A partir de este punto necesitaremos volver al usuario con privilegios root
para completar la instalación, por lo que ejecutaremos el siguiente comando para volver al usuario anterior:
exit
Creación del Archivo de Configuración de odoo
A continuación, abrimos el editor de su preferencia (En nuestro caso VIM) y creamos el siguiente archivo de configuración:
sudo vim /etc/odoo12.conf
Editamos y colocamos la siguiente información:
[options]
admin_passwd = password_superadmin (Debe cambiar este valor por una contraseña segura.)
db_host = False
db_port = False
db_user = odoo_user (Nombre del Usuario de Sistema del Paso 2)
db_password = False
addons_path = /opt/odoo12/odoo/addons, /opt/odoo12/odoo-custom-addons
; Configuraciones de Seguridad
; xmlrpc_interface = 127.0.0.1
; netrpc_interface = 127.0.0.1
; Tweaks de Performance (Estas configuraciones serán explicadas en lo adelante. Este ejemplo corresponde a un servidor con 2 Cores y 2 GB de memoria.)
limit_memory_hard = 1610612736
limit_memory_soft = 1288490189
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5
Guarde los cambios realizados y cierre el archivo.
6. Crear el Archivo de Servicio (systemd unit file)
Para poder ejecutar odoo como servicio, es necesario crear un archivo de servicio.
Para esto abrimos el editor de su preferencia (En nuestro caso VIM) y creamos el siguiente archivo de configuración en la ruta /etc/systemd/system/
:
sudo vim /etc/systemd/system/odoo12.service
Colocamos la siguiente información:
[Unit]
Description=Odoo12
Requires=postgresql-10.service
After=network.target postgresql-10.service
[Service]
Type=simple
SyslogIdentifier=odoo12 (Nombre del Usuario de Sistema creado en el Paso 2.)
PermissionsStartOnly=true
User=odoo_user (Nombre del Usuario de Sistema creado en el Paso 2.)
Group=odoo_user (Nombre del Usuario de Sistema creado en el Paso 2.)
ExecStart=/usr/bin/scl enable rh-python36 -- /opt/odoo12/venv/bin/python3 /opt/odoo12/odoo/odoo-bin -c /etc/odoo12.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
Guarde los cambios realizados y cierre el archivo.
Notificando al Sistema
Al crear un nuevo archivo de configuración debemos actualizar el sistema para que identifique los cambios. Podemos realizar esta acción ejecutando el siguiente comando:
sudo systemctl daemon-reload
Habilitando e Iniciando odoo
Procedemos a habilitar e iniciar el servicio de odoo:
sudo systemctl enable odoo12
Sudo systemctl start odoo12
Tips para Validación del Servicio
Si desea conocer el estatus del servicio puede proceder con el siguiente comando:
sudo systemctl status odoo12
Si desea conocer la información guardada en el sistema al momento de iniciar el servicio de odoo, puede ejecutar el siguiente comando:
sudo journalctl -u odoo12
7. Probar la instalación
Para probar su instalación de forma remota debe asegurar que el puerto 8069
se encuentre desbloqueado en su firewall.
Abra su explorador y presione:
http://<IP_del_Servidor>:8069
Si puede ver la siguiente pantalla, su instalación ha sido realizada correctamente.
8. Instalar y Configurar Nginx
Para configurar un nombre de dominio personalizado a nuestra instalación de odoo, requeriremos de un servidor web que pueda funcione como Reverse Proxy entre el cliente y el servicio de odoo.
Para esto utilizaremos Nginx, un servidor HTTP de alto desempeño y Reverse Proxy responsable de administrar la carga de algunos de los sítios web más grandes del internet.
Para instalar Nginx en nuestro servidor procedemos a ejecutar el siguiente comando:
sudo yum install -y nginx
Habilitando e Iniciando el Servidor Web
Procedemos a habilitar e iniciar el servicio de Nginx:
sudo systemctl enable nginx
Sudo systemctl start nginx
Tips - Validando el Servicio
Si desea conocer el estatus del servicio puede proceder con el siguiente comando:
sudo systemctl status nginx
Confirmando la Instalación
Puede validar la instalación accediendo a la dirección web http://<IP_del_Servidor>
en un explorador de su preferencia. Si la instalación fue realizada correctamente, deberá ver una página similar a la siguiente:
9. Habilitar Let's Encrypt
Let's Encrypt es una autoridad de certificación libre y abierta desarrollada por Internet Security Research Group (ISRG). Los certificados emitidos por Let's Encrypt son avalados por casi todos los exploradores existentes hoy en día.
Con Let's Encrypt podremos generar un certificado SSL con el cual podremos acceder de forma segura a nuestro servicio de odoo a través del protocolo SSL.
Para obtener un certificado de Let's Encrypt, necesitaremos instalar la herramienta de gestión certbot en nuestro servidor. Para esto procedemos a ejecutar el siguiente comando:
sudo yum install -y certbot
Generando una Llave de Intercambio Segura
Para este proceso vamos a generar una llave de intercambio bajo el proceso de encriptación de Diffie-Hellman (DH). Este es un método de intercambio criptográfico seguro sobre un canal de comunicación inseguro.
Para generar una llave de encriptación de 2048 bits DH, debemos ejecutar el siguiente comando:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Configurando el Directorio de Certificados
Para obtener un certificado SSL para nuestro dominio, tendremos que habilitar un plugin de Nginx en nuestra dirección raíz que genere un archivo temporal que nos permita validar el dominio en el directorio ${webroot-path}/.well-known/acme-challenge
.
Para simplificar el proceso validación, vamos a redireccionar todas las llamadas HTTP de .well-known/acme-challenge
a un solo directorio llamado /var/lib/letsencrypt/
.
Para crear el directorio y asignar los permisos de lugar en nuestro Servidor Nginx, procedemos con los siguientes comandos:
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Creando Fragmentos reutilizables (Snippets)
Para evitar duplicar información, crearemos los siguientes fragmentos que podremos incluir en todos nuestros bloques de dominio del servidor Nginx.
Primero crearemos la carpeta donde publicaremos nuestros fragmentos:
sudo mkdir /etc/nginx/snippets
Ahora procedemos a crear nuestro primer fragmento. Para esto abrimos el editor de su preferencia (En nuestro caso VIM) y creamos el siguiente archivo de configuración en la ruta /etc/nginx/snippets/
:
sudo vim /etc/nginx/snippets/letsencrypt.conf
Colocamos la siguiente información:
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
Guardamos los cambios realizados y cerramos el archivo.
De inmediato procedemos a crear nuestro segundo fragmento. Para esto abrimos el editor de su preferencia (En nuestro caso VIM) y creamos el siguiente archivo de configuración en la misma ruta:
sudo vim /etc/nginx/snippets/ssl.conf
Colocamos la siguiente información:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4;
add_header Strict-Transport-Security max-age=15768000;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
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;
Guardamos los cambios realizados y cerramos el archivo.
Configurando los Bloques de Dominio
Luego de crear los fragmentos, editamos el archivo de configuración del bloque de dominio que deseamos modificar e incluimos el fragmento correspondiente a la configuración de Let's Encrypt (snippets/letsencrypt.conf), en este caso utilizaremos el dominio ejemplo.com.
Para crear un archivo de configuración de este dominio procedemos a utilizar el editor de su preferencia (En nuestro caso VIM) y creamos el archivo en la ruta /etc/nginx/conf.d/
:
sudo vim /etc/nginx/conf.d/ejemplo.com.conf
Colocamos la siguiente información:
server{
listen 80;
server_name: ejemplo.com www.ejemplo.com;
include snippets/letsencrypt.conf;
}
Tips - Chequeo de Configuración de Nginx
Puede validar la integridad de los archivos de configuración de Nginx a través del siguiente comando:
nginx -t
Si el archivo no posee errores recibirá el siguiente mensaje:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Cerramos y guardamos el archivo y procedemos de inmediato a actualizar el servidor web (Nginx) para que se apliquen los cambios:
sudo systemctl reload nginx
Generando el Certificado SSL
Antes de ejecutar el comando de certbot que genera el certificado del dominio configurado, vamos a ejecutar el comando en modo de prueba para asegurar que nuestra configuración se encuentre correcta y no agotar la cuota de ejecución.
Ejecutar el siguiente comando de prueba:
certbot certonly --agree-tos --email info@ejemplo.com --webroot -w /var/lib/letsencrypt/ -d ejemplo.com --dry-run
Si el proceso se completó correctamente deberá recibir el siguiente mensaje:
...
IMPORTANT NOTES:
- The dry run was successful.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
El parámetro --dry-run
es el responsable de ejecutar el comando en modo de prueba. Si el proceso anterior finalizó correctamente, solo debe ejecutar el comando anterior sin el parámetro --dry-run
:
certbot certonly --agree-tos --email info@ejemplo.com --webroot -w /var/lib/letsencrypt/ -d ejemplo.com
Durante el proceso de validación se ejecutará la pregunta de si desea compartir su correo electrónico:
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
Presione y
si desea compartirlo, o n
en caso contrario.
Si su proceso fue completado correctamente deberá recibir el siguiente mensaje:
...
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ejemplo.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ejemplo.com/privkey.pem
Your cert will expire on 2019-12-08. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Configurando el Bloque de Dominio con el nuevo Certificado
Ahora que existen los archivos de certificado (puede validarlos en la ruta /etc/letsencrypt/live/nombre_de_dominio
), podemos editar el archivo de bloque de dominio creado anteriormente con el editor de su preferencia (En nuestro caso VIM) en la ruta /etc/nginx/conf.d/
:
sudo vim /etc/nginx/conf.d/ejemplo.com.conf
Modificamos el archivo para que posea el siguiente formato:
server {
listen 80;
server_name ejemplo.com www.ejemplo.com;
include snippets/letsencrypt.conf;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name www.ejemplo.com;
ssl_certificate /etc/letsencrypt/live/ejemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ejemplo.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/ejemplo.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
return 301 https://ejemplo.com$request_uri;
}
server {
listen 443 ssl http2;
server_name ejemplo.com;
ssl_certificate /etc/letsencrypt/live/ejemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ejemplo.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/ejemplo.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
}
Guardamos y cerramos el archivo de configuración y procedemos a validar que el mismo no esté corrompido a través del siguiente comando de Nginx:
nginx -t
Si el archivo no posee errores recibirá el siguiente mensaje:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Si el paso anterior se ejecutó correctamente, procedemos a reiniciar el servidor web con el siguiente comando:
sudo systemctl reload nginx
Probando la Instalación
Puede validar la instalación accediendo a la dirección web https://IP_Servidor
en un explorador de su preferencia. Si la instalación fue realizada correctamente, deberá ver un candado en la barra de dominio del explorador.
Auto renovando el certificado Let's Encrypt (Cron job)
Los certificados Let's Encrypt son válidos por un período de 90 días. Para renovar un certificado existente de forma automática antes de que los mismos expiren, necesitaremos crear un cronjob que se ejecute 2 veces al día, el cual renovará cualquier certificado próximo a expirar 30 días antes de que se cumpla el plazo.
Para crear el cronjob que ejecuta esta tarea, procedemos a ejecutar el siguiente comando:
sudo crontab -e
Este comando abrirá el editor por defecto con el archivo cron del usuario. En este documento colocaremos la siguiente línea:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"
Guardamos y cerramos el archivo para actualizar el archivo cron.
Validaremos que hemos guardado correctamente la configuración ejecutando el siguiente comando:
sudo crontab -l
Si la consola retorna el comando colocado en la línea publicada, la configuración fue guardada correctamente.
Probando la renovación del certificado
Si desea validar que el proceso de validación no retornará errores, puede ejecutar el siguiente comando:
sudo certbot renew --dry-run
El siguiente mensaje confirma que el proceso funcionará correctamente:
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
10. Habilitando Nginx como Reverse Proxy para odoo
Ya completados todos los pasos anteriores, tendremos todos los prerequesitos necesarios para habilitar Nginx como Reverse Proxy para odoo.
Utilizar un Reverse Proxy nos proporciona un sin número de beneficios tales como posibilidad de colocar Balanceadores de Carga, Caching, Compresión, Servir contenido Estático y mucho más.
En este proceso habilitaremos SSL, Redirección del Contenido HTTP a HTTPS, almacenamiento en caché de archivos estáticos y compresión GZip.
El procedimiento de configuración solo consiste en modificar el Bloque de Dominio creado en el Paso 9 y agregar los valores necesarios para cambiar el comportamiento de Nginx.
Configurando el Bloque de Dominio
Procedemos a editar el archivo de bloque de dominio creado anteriormente con el editor de su preferencia (En nuestro caso VIM) en la ruta /etc/nginx/conf.d/
:
sudo vim /etc/nginx/conf.d/ejemplo.com.conf
Modificamos el archivo para que posea el siguiente formato:
; Al tope del archivo
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoo-chat {
server 127.0.0.1:8072;
}
; Modificamos los bloques ya existentes
server {
listen 80;
server_name erp.suplidom.com;
include snippets/letsencrypt.conf;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name erp.suplidom.com;
ssl_certificate /etc/letsencrypt/live/erp.suplidom.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/erp.suplidom.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/erp.suplidom.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
; Nuevo contenido
access_log /var/log/nginx/ejemplo.com-access.log;
error_log /var/log/nginx/ejemplo.com-error.log;
location / {
proxy_redirect off;
proxy_pass http://odoo;
}
location /longpolling {
proxy_pass http://odoo-chat;
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
:%s/ejemplo.com/nuevo_dominio.com/gi
.Guardamos los cambios y cerramos el archivo de configuración.
Tips - Chequeo de Configuración de Nginx
Puede validar la integridad de los archivos de configuración de Nginx a través del siguiente comando:
nginx -t
Si el archivo no posee errores recibirá el siguiente mensaje:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Si el paso anterior se ejecutó correctamente, procedemos a reiniciar el servidor web con el siguiente comando:
sudo systemctl reload nginx
Al actualizar el servicio, procedemos a visitar el dominio o subdominio a través de su explorador de preferencia.
Si puede visualizar la pantalla de configuración de base de datos, ¡FELICIDADES!, has instalado correctamente odoo 12 en CentOS 7.x.
Troubleshooting (Solución de Problemas)
Al visitar el dominio recibo un error 502 Bad Gateway
Si recibe este error al visitar el dominio o subdominio configurado, procedemos a revisar el log del servicio a través del comandotail -5 /var/log/nginx/erp.suplidom.com/ejemplo.com-error.conf
. Si los resultados mostrados muestran el siguiente tipo de error:[crit] [####]#0: *1 connect() to 127.0.0.1:8069 failed (13: Permission denied) while connecting to upstream,...
, debe habilitar los permisos de lugar en el Sistema Operativo a través del siguiente comando:sudo setsebool -P httpd_can_network_connect 1
. Luego de esto su servicio deberá restablecerse.
¡Bonus! - A Publicar en los Próximos días
- Completando la configuración Inicial
- Habilitando Multiprocessing
- Otros Errores conocidos.
-
EPEL: Acrónimo del término inglés Extra Packages for for Enterprise, corresponden a un grupo de interés especial de paquetes de alta calidad para Linux Empresarial creado y mantenido por el proyecto Fedora. Para más información visite https://fedoraproject.org/wiki/EPEL/es ↩︎
-
SCL: Acrónimo del término inglés Software Collections, corresponde a una colección de paquetes de software 'add-on' creado y mantenido por Red Hat. Visite el website de Software Collection en el siguiente enlace: https://www.softwarecollections.org/en/scls/ ↩︎
-
GPG: Acrónimo de GNU Privacy Guard, corresponde a una implementación completa y gratuita del estándar de comunicación OpenPGP definido en el estándar RFC4880. GnuPG permite encriptar y firmar información y comunicaciones. Visite el website de GnuPG a través del siguiente enlace: https://gnupg.org/ ↩︎