Cómo hacer una copia de seguridad completa de Redmine (Windows)

Copia de seguridad Redmine Windows

Ya vimos en este post, cómo realizar una copia de seguridad completa de Redmine en un servidor Linux.

En este artículo te voy a explicar cómo hacer lo mismo en un Redmine que esté instalado en un servidor Windows, mediante el instalador de Bitnami.

Prepara los directorios donde almacenaremos la copia de seguridad

Vamos a crear dos carpetas donde guardaremos las copias que el sistema vaya realizando. Los directorios estarán fuera de la carpeta de instalación del Bitnami Redmine. A modo de ejemplo vamos a crear estas carpetas en el escritorio del servidor:

Hemos creado una carpeta principal llamada “Backup” y dos subcarpetas llamadas “Database” y “Files”.

Hay que tener en cuenta que para hacer una copia completa de seguridad de Redmine tenemos que realizar, por separado, dos acciones: un backup de la base de datos y un copiado de la carpeta /files de Redmine a otro directorio del servidor. También podrías preferir realizar una copia de todo el directorio de Redmine (incluidos plugins, temas, etc.). Entonces la carpeta sobre la que realizar la copia sería la carpeta base de instalación: en mi caso, C:/Bitnami/redmine-5.0.0-0.

Comprueba las credenciales de la base de datos

Tendremos que copiar las credenciales de la base de datos para poder lanzar la copia. Ve a la carpeta de instalación que creó Bitnami cuando se instaló Redmine y localiza el fichero database.yml. En mi caso la ruta hasta el fichero es ésta: C:/Bitnami/redmine-5.0.0-0/apps/redmine/htdocs/config/database.yml

  • el nombre de la base de datos (database)
  • el nombre del usuario (username)
  • la contraseña (password)

También asumimos que el servidor de la base de datos es localhost y el puerto es el estándar 3306.

Creamos el script para la copia de seguridad

Vamos a crear un script que le indicará al sistema todas las acciones que tiene que hacer para realizar la copia de seguridad.

Script de copia de seguridad

#!/bin/bash
#creamos las variables del script --base de datos
DATE=$(date +"%Y-%m-%d-%H%M")
SQLFILE="${DATE}-redmine-databasedump.sql"
#tendrás que cambiar los siguientes datos por los que has obtenido en el anterior paso
DATABASE="bitnami_redmine"
USER="bitnami" 
PASSWORD="08c6355aea"
# Backup de la base de datos y posterior compresión y guardado en la carpeta Backup/Database
mysqldump -u "${USER}" -p"${PASSWORD}" "${DATABASE}" | gzip > "C:/Users/Administrator/Desktop/Backup/Database/${SQLFILE}.gz"
#creamos las variables del script --ficheros
FILES_DATE=$(date +"%Y-%m-%d-%H%M")
FILES_DIR="C:/Bitnami/redmine-5.0.0-0/apps/redmine/htdocs/files"
FILES_ARCHIVE="C:/Users/Administrator/Desktop/Backup/Files/${FILES_DATE}-redmine-filesdump.zip"
# Copiado y zipeado de la carpeta (utilizamos 7z pero también se podría utilizar Zip)
cd "$FILES_DIR" && 7z a -r "$FILES_ARCHIVE" ./*
# Borramos la carpeta que se copió a Backup/Files (sólo queremos el fichero zip)
rm -r "C:/Users/Administrator/Desktop/Backup/Files/${FILES_DATE}-redmine-filesdump"

Nombraremos el fichero del scrip: backup.bat y lo puedes guardar en la carpeta raíz de Redmine, como he hecho yo, aunque perfectamente podría ir una carpeta externa a Redmine, para que no se pierda en el caso que actualicemos Redmine a otra versión.

Explicación del script

En las primeras líneas del script estamos declarando las variables que utilizaremos en el script. Por supuesto, tendrás que sustituir el nombre de la base de datos, el usuario y la contraseña por los que hayas encontrado en tu archivo database.yml.

Esto es lo que hará el script al lanzarlo:

  1. Hace la copia de la base de datos
  2. La comprime en un fichero de tipo .gz
  3. Guarda el fichero en el directorio /backups/database
  4. Hace una copia del directorio /files de redmine a la carpeta /backups/files
  5. La comprime en un fichero de tipo .zip
  6. Elimina la carpeta copiada

Para lanzar el script manualmente,tienes que seguir los siguientes pasos:

  1. Ve a la carpeta de instalación de Bitnami Redmine, en mi caso C:/Bitnami/redmine-5.0.0-0
  2. Haz doble click sobre el fichero “use_redmine”. Esto abrirá la consola de Bitnami y te ubicará en ese mismo directorio.
  3. Lanza el siguiente comando:
sh backup.bat

Pulsa Enter y cuando el sistema haya acabado (dependiendo de lo grande de la base de datos y el directorio de ficheros, pueden ser unos segundos o varios minutos) el script debería haber creado dos ficheros como éstos:

2023-02-24-1132-redmine-databasedump.sql.gz
2023-02-24-1134-redmine-filesdump.zip

Ahora ve a las carpeta de los backups y comprueba que se han creado.

Hacer la copia de seguridad de Redmine en Windows de forma programada y desatendida

Vale, Luis, todo esto está muy bien, pero yo no puedo estar todos los días lanzando manualmente el comando del backup… ¡No hay problema! Aunque en Windows no tenemos cron jobs para este tipo de tareas programadas, sí disponemos del “Programador de Tareas” (Task scheduler), que nos permite hacer prácticamente lo mismo.

Script de lanzamiento

Antes de ponernos con la tarea programada, tenemos que crear un primer script para indicarle a Windows que utilice la consola de Redmine, no su propia consola, ya que en este caso, no se generaría la copia de seguridad. Éste será el script que invocará la tarea programada inicialmente:

#cambia la ruta por la tuya
call C:\Bitnami\redmine-5.0.0-0\use_redmine.bat
bash backup.bat

Cómo veis, ahí se está invocando a la consola de Redmine y luego lanzando el script de la copia de seguridad desde esa consola. En mi caso, guardé el script en la carpeta raíz de Redmine.

Tarea programada para la copia de seguridad de Redmine en Windows

Digamos que queremos que la copia de seguridad completa se realice diariamente a las 5 de la mañana. Bien, vamos a crear una tarea programada que todos los días a las 5 de la mañana lance el comando que invoca el script creado. Éstos son los pasos:

  1. Abre el Programador de tareas de Windows buscando “Programador de tareas” en el menú Inicio.
  2. Haz clic en “Crear tarea” en el panel derecho.
  3. En la pestaña General, introduce un nombre para la tarea (por ejemplo, “Copia de seguridad Redmine”).
  4. Configura la tarea para que se ejecute tanto si el usuario ha iniciado sesión como si no y para que se ejecute con los privilegios más altos.
  5. En la pestaña Triggers (Desencadenantes), haz clic en “Nuevo” y configura el trigger para que se ejecute diariamente a las 5:00 am.
  6. En la pestaña Acciones, haz clic en “Nueva” y configura la acción para que inicie un programa; a continuación, introduce la ruta al archivo de script.
  7. En la pestaña Ajustes, configura los ajustes adicionales que sean necesarios.
  8. Haz clic en “Aceptar” para guardar la tarea programada.
  9. Pulsa en “Habilitar” (“Enable”)

Ahora la copia de seguridad se hará cada día a las 5 de la mañana.

Para que te quede más claro, te pongo aquí unos pantallazos de cómo tienes que configurar la tarea programada (en inglés):

Backup Redmine Windows General

General
Triggers
Actions

En principio, no serían necesarias más configuraciones, aunque puedes revisar el resto de pestañas.

Una vez hayas creado la tarea programada es importante que recuerdes que tienes que “Habilitarla” (“enable”), porque si no, no se lanzará la orden de realizar el backup. Prueba también a lanzar la tarea programada pulsando sobre “Run”:

Activa la tarea programada

Política de retención

Si no incluimos algún método por el que vayamos eliminando las copias de seguridad antiguas, nos podemos encontrar con que el servidor se quede sin espacio en algún momento.

Para que eso no ocurra, podemos añadir un par de líneas al script original para que los archivos antiguos se eliminen automáticamente. En este ejemplo dejaremos sólo los últimos 3 archivos de cada carpeta. Todos los demás archivos de la copia de seguridad se destruirán automáticamente. Comprueba el nuevo script:

#!/bin/bash
#creamos las variables del script --base de datos
DATE=$(date +"%Y-%m-%d-%H%M")
SQLFILE="${DATE}-redmine-databasedump.sql"
#tendrás que cambiar los siguientes datos por los que has obtenido en el anterior paso
DATABASE="bitnami_redmine"
USER="bitnami" 
PASSWORD="08c6355aea"
# Backup de la base de datos y posterior compresión y guardado en la carpeta Backup/Database
mysqldump -u "${USER}" -p"${PASSWORD}" "${DATABASE}" | gzip > "C:/Users/Administrator/Desktop/Backup/Database/${SQLFILE}.gz"
#creamos las variables del script --ficheros
FILES_DATE=$(date +"%Y-%m-%d-%H%M")
FILES_DIR="C:/Bitnami/redmine-5.0.0-0/apps/redmine/htdocs/files"
FILES_ARCHIVE="C:/Users/Administrator/Desktop/Backup/Files/${FILES_DATE}-redmine-filesdump.zip"
# Copiado y zipeado de la carpeta (utilizamos 7z pero también se podría utilizar Zip)
cd "$FILES_DIR" && 7z a -r "$FILES_ARCHIVE" ./*
# Borramos la carpeta que se copió a Backup/Files (sólo queremos el fichero zip)
rm -r "C:/Users/Administrator/Desktop/Backup/Files/${FILES_DATE}-redmine-filesdump"
# Borramos los backups antiguos (mantenemos los 3 últimos)
ls -t "C:/Users/Administrator/Desktop/Backup/Files"/* | awk 'NR>3' | xargs rm --
ls -t "C:/Users/Administrator/Desktop/Backup/Database"/*.gz | awk 'NR>3' | xargs rm --

Así que finalmente tenemos un sistema que:

  • realiza una copia de seguridad de la base de datos y de los archivos cada día a las 5 de la mañana, almacenando una versión comprimida de los mismos en el directorio de copias de seguridad
  • elimina los archivos de copia de seguridad antiguos para que sólo queden los últimos 3 en cada directorio.
NOTA: Recuerda que todas estas acciones las tienes que hacer con un usuario del servidor que tenga permisos máximos.

¡Espero que te haya servido este consejo! Por favor, comparte el post a través de tus redes sociales si te ha gustado 🙂

Sobre el autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *