Configuracion SSL Redmine y Odoo

Entorno y situacion

El cliente necesita actualizar su entorno redmine incluyendo ssl, sin embargo, durante la creación del entorno docker, no vinculó el puerto necesario para la comunicación por ssl, ahora no puede realizar el port forwarding necesario en el docker-compose.yaml sin destruir todo el trabajo realizado durante meses en redmine.

La solucion mas rapida, sencilla y fiable para esto, es realizar un backup de la base de datos redmine del docker db (docker que hostea la base de datos, en este caso, postgres), como del directorio files dentro del docker redmine, este directorio es en el que se guardaran todos los ficheros que los usuarios han guardado en sus respectivos proyectos de redmine.

El entorno, esta compuesto por dos docker.yaml:

Odoo

Este compose, vincula tanto los ficheros de configuración, como los addons, como el directorio donde se guardaran las backups dentro del contenedor, lo mismo ocurre con los datos del postgres.

Redmine

Este docker construye el servicio web de redmine, vinculando los ficheros clave, como files y sqlite, los cuales, ambos, respectivamente, contienen la base de datos y los archivos de los proyectos.

Datos de prueba


Creacion Backup

Odoo

En el caso de la base de datos, tenemos varias opciones, pero en esta ocasión lo haremos desde odoo, ya que es extremadamente intuitivo.

Primero accederemos al manager de la base de datos introduciendo la ruta de la anterior captura en la url.

Ahora, hacemos click en ese gran boton azul en el que dice Backup

Nos aparecera un formulario, y deberemos de rellenarlo para que se realize la Backup.

Una vez se realize la copia de seguridad, se nos descargara la copia de seguridad de la base de datos en el cliente.

Una vez hecho esto ya tendremos el backup de la base de datos.

Redmine

En este caso, odoo y redmine funcionan en entornos diferentes, redmine, en este caso funciona con sqlite dentro del mismo docker, asi que todo lo que hicimos antes solo funcionara para realizar la copia de seguridad de las bases de datos dentro del postgresql, pero no de las bases de datos con las que funciona REDMINE, para esto, deberemos de hacer lo siguiente:


Haremos una copia de el fichero files, en mi caso, guardandolo en un zip.



Haremos una copia de seguridad de la base de datos, que se guarda en el fichero sqlite.

Restauracion Backup

IMPORTANTE: Es extremadamente recomendable crear un nuevo docker compose, con los cambios que se deben aplicar, restaurar las backups, y asegurarnos de que TODO está bien antes de destruir el contenedor que ya tenemos, si decides no seguir este consejo, te arriesgas a perder todo tu trabajo, que, incluso si es un 0.0001% es una posibilidad inaceptable.

En mi caso, la modificacion que le hice al docker.yaml fue añadir los respectivos puertos que usare para la comunicacion ssl en ambos dockers.

Odoo

Ahora, al momento de restaurar la base de datos se daran dos casos, que ya hayamos usado odoo para otras cosas o que sea una nueva, en el segundo caso, deberemos de seleccionar el texto a la derecha de create database, el cual dice or restore a database.

Tendremos que rellenar el formulario que nos aparecera, y pasarle el zip que nos dio antes al realizar la backup.

Le daremos a continuar y la base de datos se restaurara.

Ahora, en el caso de que ya se haya usado, en el manager, aparecera abajo, como segunda opcion, la opcion restore database



Y nos aparecerá el mismo formulario.

Redmine

Restauraremos la backup dentro de la base de datos

Y volveremos a colocar la copia de files en files.

Y al entrar, podemos ver que todo se ha restaurado correctamente

Configuracion Certbot

Para poder implementar esto deberemos de modificar el yml de redmine, de tal manera que quede asi:

En este yml, se esta creando el docker de certbot e implementando los docker necesarios para su configuracion.

El yml de odoo debera de verse asi:

Cabe resaltar que sera necesario redirigir los puertos tanto del http como del https de redmine a los puertos well known, pues de lo contrario se dificultará la generación de los certificados.

Ahora generaremos los certificados:

Y añadiremos la siguiente línea en crontab del servidor cada tres meses para que el certificado se renueve:

Configuracion HTTPS ODOO

Aquí la situación es complicada, pues el docker de odoo por sí mismo no es capaz de gestionar https, por lo tanto, la forma más sencilla de configurar HTTPS, es configurando un proxy de nginx que tomara la conexion de odoo y añadirá ssl.

Primero, instalaremos nginx usando apt install python3-certbot-nginx -y

Ahora, limpiaremos el directorio sites-enabled de nginx por razones de seguridad

Y crearemos uno nuevo en el que haremos toda la configuración de odoo, la cual será la siguiente:

Reiniciamos el servicio

Y ya tenemos Odoo funcionando con un certificado de letsencrypt

NOTA: En esta ocasión hice todo esto en local, por ello, lets encrypt no pondrá el candado en https, en el momento en el que se abra a internet y si el dominio que hostea la página coincide con el dominio en el certificado, el candado estará.

Configuracion HTTPS Redmine

NOTA: Dado que es necesario que ambos servicios están funcionando en el mismo servidor, los dos no pueden ocupar el puerto 443, por lo tanto, en redmine, añadiremos el siguiente port fowarding antes de continuar con la configuración del proxy, ya que certbot solo acepta el 443, lo que haremos será redirigir este puerto del docker a uno de nuestra preferencia en la máquina principal.

Dentro del contenedor de redmine, instalamos nginx.

Ahora, nos moveremos al fichero sites-enabled de nginx y lo limpiaremos

Ahora, crearemos un nuevo fichero e introduciremos la configuración del proxy, que sera la siguiente.

Y reiniciamos nginx

Y ya lo tenemos