¿Cómo usar los backups de base de datos de Odoo.Sh?

Guía práctica para extraer un backup de base de datos de Odoo.sh y restaurarlo en otro servidor

Nota del autor: Este artículo requiere un conocimiento básico del uso de la línea de comandos en Linux, así como de OdooSh, Postgres, y Dockers.

Odoo es una plataforma ERP de código abierto que se utiliza en todo el mundo para gestionar empresas de todos los tamaños y sectores. Con una amplia variedad de módulos, Odoo permite a los usuarios gestionar desde la contabilidad hasta la cadena de suministro, pasando por las ventas y el marketing. Odoo.sh, por su parte, es una plataforma en la nube que permite a los usuarios gestionar sus proyectos de Odoo en un entorno de desarrollo y producción seguro y escalable. Odoo.sh es altamente recomendado para cualquier organización grande o pequeña que busque "olvidarse" prácticamente de la gestión de la infraestructura y hosting necesario para un entorno Odoo.

En este artículo, vamos a hablar de un proceso que puede ser muy útil para aquellos usuarios de Odoo que necesitan hacer copias de seguridad y restauraciones de sus bases de datos con diversos fines. Este proceso se puede utilizar no solo para obtener y guardar copias de seguridad, sino también para generar análisis de datos con herramientas como Google Data Studio, Microsoft Power BI o Tableau o para crear entornos de pruebas con propósitos específicos.

Beneficios de este proceso

  • Copias de seguridad: El proceso descrito permite a los usuarios hacer copias de seguridad de sus bases de datos de Odoo de forma rápida y sencilla desde Odoo.Sh a un entorno local y a partir de ahí a cualquier otro medio de almacenamiento.
  • Restauración: El proceso también permite a los usuarios restaurar sus backups bases de datos a partir de una copia de seguridad en caso de que se produzca algún problema a través de un script.
  • Análisis de datos: Al tener una copia de la base de datos, los usuarios pueden utilizar sobre la base de datos restaurada, algunas herramientas de análisis de datos como Google Data Studio, Microsoft Power BI o Tableau para generar informes y visualizaciones que les ayuden a tomar decisiones empresariales informadas.
  • Entornos de pruebas: Los usuarios pueden utilizar una copia de su base de datos Odoo para crear entornos de pruebas en los que puedan probar nuevas funcionalidades o personalizaciones sin afectar a la base de datos de producción. Incluso, se puede utilizar esta base de datos realizar pruebas incluyéndo data real. En Odoo.Sh contamos con las opciones de las ramas Staging, pero ¿qué ocurre si todas ya están siendo utilizadas por diversas pruebas?

Pasos para hacer una copia de seguridad y restauración de la base de datos de Odoo


Paso 1: Acceder al servidor de Odoo

En primer lugar, los usuarios deben acceder al servidor de Odoo para descargar el backup de base de datos. Esto se puede hacer a través de la interfase web o por línea de comandos SSH. Para el último caso se requiere haber configurado previamente la llave pública (archivo id_rsa.pub) del servidor destino en el perfil del usuario con el que se realiza la operación.

Paso 2: Copiar la base de datos a local

Una vez que los usuarios tengan el acceso al servidor de Odoo.sh, deben copiar la base de datos a través de la línea de comandos. Esto se puede hacer utilizando el comando "scp" (secure copy). Por ejemplo, el backup diario que genera Odoo.sh siempre se encuentra en la ruta "/home/odoo/backup.daily/" si el nombre de la base de datos es "my_database" y mi acceso al servidor Odoo.sh del paso anterior es "user@serverodoosh", el siguiente comando se puede utilizar para copiar la este backup de base de datos comprimido:

scp -r user@serverodoosh:/home/odoo/backup.daily/mydatabase_daily.sql.gz /path/to/local/folder

Paso 3: Copiar la base de datos a ubicación destino

Una vez que los usuarios hayan copiado la base de datos a su ordenador local, deben ubicarla el la ruta destino para realizar el import a la base de datos postgres. En nuestro ejemplo, consideramos que nuestra base de datos postgres se encuentra dentro de un contenedor Docker "db" dentro del servidor local. Utilizar un contenedor Docker para instalar postgres es muy conviente, pues solo toma unos minutos y es bastante eficiente. Puedes encontrar la imágen oficial de Docker para Postgres aquí. El comando para copiar la base de datos de local a el contenedor Docker de postgres, asumiendo que el nombre del contenedor es "db" sería:

docker cp /path/to/local/folder/mydatabase_daily.sql.gz db:/docker-entrypoint-initdb.d/mydatabase_daily.sql.gz

El nombre del archivo "mydatabase_daily.sql.gz" en el destino podría ser diferente, pero lo mantenemos por simplicidad.

Adicionalmente, como el archivo backup está en formato comprimido .gz es necesario descomprimirlo para poder utilizarlo.

docker exec -it db sh -c "gunzip -f /docker-entrypoint-initdb.d/mydatabase_daily.sql.gz"

con el parámetro "-f" nos aseguramos de reemplazar cualquier archivo anterior en el caso que este sea un proceso recurrente.

Paso 4: Preparar el restore (opcional)

Si estás utilizando Dockers en tu entorno para la base de datos postgres, y este es un entorno que también tiene instalado odoo, es muy probable que también tengas contenedores de odoo y nginx. Asegurate de detener los contenedores antes de hacer la restauración pues se requiere borrar y volver a crear una base de datos vacía en donde se ejecute el restore.

Para apagar tus contenedores odoo y nginx puedes utilizar los comandos

docker stop odoo nginx db

Luego para eliminar y volver a crear la base de datos dentro del contenedor "db" puedes usar este comando:

echo "DROP DATABASE IF EXISTS my_database; CREATE DATABASE my_database;" | PGPASSWORD=odoo psql -h localhost -U odoo -d postgres

como en el paso anterior se detuvo el contenedor "db" para cerrar todas las sesiones, recuerda encenderlo nuevamente antes de borrar y crear la base de datos.

Paso 5: Restaurar el backup de base de datos 

Una vez que se tiene el backup de la base de datos en el contenedor de la base de datos, el siguiente paso es restaurar el backup en la base de datos vacía creada en el Paso 4. Para esto, se debe ejecutar el siguiente comando:

docker exec -u postgres db psql my_database odoo -f docker-entrypoint-initdb.d/mydatabase_daily.sql

Este comando ejecuta el cliente psql dentro del contenedor de la base de datos y se conecta a la base de datos "my_database". Luego, ejecuta el script SQL del backup utilizando la opción -f de psql.

Este paso puede tardar algunos minutos dependiendo del tamaño del backup y de la velocidad del servidor. Una vez que la restauración ha finalizado, se tiene una base de datos idéntica a la base de datos original. Como referencia, en un servidor Medim de AWS EC2, una base de datos que en Odoo.sh ocupa 13.5GB podría demorar unos 10 a 15mins.

Paso 6: Activar los clientes (opcional)

Finalmente, es necesario iniciar los contenedores de Odoo y Nginx que en nuestro ejemplo eran utilizados como capa de aplicación. Dependerá del uso que se le de a esta restauración de base de datos, debemos asegurarnos de contar con los accesos necesarios para poder acceder a ella. Para esto encender los contenedores Odoo y Nginx de nuestro, se deben ejecutar los siguientes comandos:

docker start odoo
docker start nginx

Paso 7: Cierre y Limpieza

Especialmente si este es un proceso recurrente, siempre es importante mantener "la casa limpia" y preparada para la siguiente ejecución. Se recomienda eliminar los archivos grandes descargardos o moverlos a una ubicación de almacenamiento diferente. Esto facilitará mucho la vida cuando querramos asegurarnos de que estamos utilizando el backup adecuado.

Beneficios de automatizar el proceso de restauración

Utilizar un proceso automatizado para restaurar backups en Odoo tiene varios beneficios:

Ahorro de tiempo: al automatizar el proceso de restauración de backups, se reduce el tiempo necesario para realizar esta tarea manualmente. 

Reducción de errores: al utilizar un proceso automatizado, se reducen los errores humanos en la restauración de backups.

Reproducibilidad: al utilizar un proceso automatizado, se puede reproducir la restauración de backups en diferentes entornos de forma idéntica.

Escalabilidad: al utilizar contenedores Docker para la restauración de backups, se puede escalar fácilmente el proceso a medida que aumenta la cantidad de datos a restaurar.

Flexibilidad: al utilizar contenedores Docker para la restauración de backups, se pueden restaurar backups en diferentes versiones de Odoo y en diferentes sistemas operativos.

Script restore_database.sh

#!/bin/bash

cd /mi/ruta/local
echo "Copiar backup desde OdooSH"
scp miusuario@miserverodoosh.odoo.com:/home/odoo/backup.daily/my_database_daily.sql.gz .
echo "Copiar backup al contenedor DB"
docker cp ./my_database_daily.sql.gz db:/docker-entrypoint-initdb.d/my_database_daily.sql.gz
echo "Descomprimir backup en el contenedor DB"
docker exec -it db sh -c "gunzip -f /docker-entrypoint-initdb.d/my_database_daily.sql.gz"
echo "detener contenedores"
docker stop odoo nginx db
echo "iniciar contenedor DB"
docker start db
sleep 30s
echo "borrar base de datos y crearla de nuevo"
echo "DROP DATABASE IF EXISTS my_database; CREATE DATABASE my_database;" | PGPASSWORD=odoo psql -h localhost -U odoo -d postgres
echo "Restaurar backup en la base de datos"
docker exec -u postgres db psql my_database odoo -f docker-entrypoint-initdb.d/my_database_daily.sql
echo "Iniciar contenedores"
docker start odoo
docker start nginx
echo "Borrar backup"
rm *_daily*
Compartir
Etiquetas
Archivar

Desarrollo a medida vs ERP local vs ERP global
¿Existe una solución que lo tenga todo?