Inicio
» Cómo
»
Automatice las copias de seguridad consistentes de Nextcloud con Restic y Cron.
Automatice las copias de seguridad consistentes de Nextcloud con Restic y Cron.
Para una copia de seguridad fiable de Nextcloud, pausa la actividad del usuario, exporta la base de datos y usa Restic para capturar la exportación junto con los directorios de la aplicación y los datos. Coloca la tarea en un script con permisos de administrador y prográmala con cron; verifica las instantáneas y realiza una restauración de prueba antes de confiar en la programación.
Este ejemplo presupone un servidor Debian o Ubuntu, una instalación directa de Nextcloud en /var/www/nextcloud, un directorio de datos independiente en /srv/nextcloud-datay MariaDB. Sustituya estos valores por sus rutas y nombre de base de datos reales. Los pasos se verificaron con el Manual de administración de Nextcloud 35 y la documentación de Restic 0.19.1 en octubre de 2026.
Ilustración tipo terminal de las dos acciones que inician una copia de seguridad consistente: habilitar el modo de mantenimiento y exportar la base de datos.
¿Qué debe contener una copia de seguridad de Nextcloud?
La guía de copias de seguridad de Nextcloud indica que la configuración, los datos, la base de datos, el tema y las aplicaciones personalizadas son elementos importantes que se deben conservar. Generalmente, la copia de seguridad del directorio completo de la aplicación incluye su configuración y las aplicaciones integradas, pero compruebe si las aplicaciones personalizadas, los temas o el directorio de datos se encuentran en otra ubicación del servidor. Incluya cada ruta por separado en el comando Restic.
El modo de mantenimiento bloquea las sesiones existentes e impide nuevos inicios de sesión mientras se ejecuta la copia de seguridad. Esto reduce la probabilidad de que la base de datos y los archivos cambien en distintos momentos, pero también deja Nextcloud inaccesible durante ese tiempo. Para un gran volumen de datos, programe la tarea en un período de baja actividad. Si su servidor tiene procesos o scripts externos que escriben directamente en el directorio de datos, póngalos también en pausa.
Instala Restic y el cliente MariaDB usando la fuente de paquetes de confianza de tu distribución. Elige un repositorio en un disco diferente o en un destino de copia de seguridad remoto. Un repositorio almacenado únicamente en el servidor Nextcloud no protege contra la pérdida de dicho servidor ni de su almacenamiento. No coloques el repositorio dentro de ninguno de los directorios de los que se realiza la copia de seguridad.
Restic cifra los datos del repositorio, pero necesitas la contraseña para restaurarlos. Crea un archivo de contraseñas y guarda una copia protegida fuera del servidor, por ejemplo, en un gestor de contraseñas autorizado. Si pierdes la contraseña, no podrás leer el repositorio cifrado. Evita introducir la contraseña directamente en la línea de comandos, crontab o script.
Coloque de forma segura la contraseña de Restic elegida en el archivo de contraseñas. Introduzca la ubicación del repositorio y la ruta del archivo de contraseñas en el archivo de entorno:
Para un backend remoto, utilice la URL del repositorio y las credenciales documentadas de dicho backend, almacenadas con permisos restringidos. Restic documenta la configuración del repositorio y la variable de entorno password-file compatible en su guía de preparación de repositorios . Inicialice un nuevo repositorio una sola vez, no en cada ejecución.
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Configuración de ejemplo para un repositorio Restic cifrado; la contraseña se guarda en un archivo protegido aparte.
Las credenciales de MariaDB también necesitan protección. Configure un archivo de opciones de cliente legible por el usuario root, como por ejemplo /root/.my.cnfcon el usuario, la contraseña y el host de la base de datos, y luego establezca sus permisos en 600. El script a continuación pasa ese archivo a mariadb-dump, por lo que la contraseña de la base de datos no aparece en los argumentos del proceso.
Crea un script de copia de seguridad que devuelva Nextcloud al servicio.
Guarda lo siguiente como /usr/local/sbin/nextcloud-restic-backup. Ajusta NC_DATA_DIRy DB_NAMEpara que coincidan config/config.php. El script habilita el modo de mantenimiento, exporta MariaDB, realiza una copia de seguridad de la aplicación, los datos y el volcado SQL temporal, y luego desactiva el modo de mantenimiento incluso si un comando posterior falla.
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
Configure la propiedad y los permisos para que solo el usuario root pueda editar o ejecutar el script, y luego pruébelo manualmente durante una ventana de mantenimiento. Esta mountpointcomprobación evita que un disco de copia de seguridad faltante envíe silenciosamente un repositorio grande al sistema de archivos local del servidor. Si su repositorio es remoto en lugar de estar montado localmente, reemplace esta comprobación con una comprobación confiable para su sistema backend.
Revisa las rutas antes de la primera ejecución. Si la carpeta de datos ya está dentro de /var/www/nextcloud, no des por sentado que la ruta de ejemplo es correcta; usa el directorio de datos real de la configuración de Nextcloud. Confirma también que las aplicaciones o temas personalizados almacenados fuera del directorio de la aplicación se incluyan explícitamente.
La copia de seguridad de Restic incluye la aplicación, los archivos de usuario y el volcado de la base de datos creado para esta ejecución.
Programa cron y comprueba el resultado.
Tras una ejecución manual exitosa, agregue una entrada de crontab raíz con sudo crontab -e. Este ejemplo inicia la tarea diariamente a las 2:30 a. m. utilizando la ruta completa del script y registra la salida para la resolución de problemas:
Cron proporciona un entorno limitado, por lo que el script establece una configuración explícita PATHy carga los ajustes de Restic por sí mismo. Compruebe que cron esté habilitado en su distribución y que este horario no se solape con el ejecutor de tareas en segundo plano de Nextcloud ni con ninguna otra tarea de mantenimiento. El manual de crontab de Linux describe el formato de la programación y el entorno que proporciona cron.
Confirme que el trabajo se ha realizado comprobando /var/log/nextcloud-restic.logque la salida ha sido exitosa y mostrando las instantáneas recientes:
Restic checkverifica normalmente la estructura del repositorio. Una lectura completa de datos lleva más tiempo y puede consumir un ancho de banda considerable para un repositorio remoto; programe la verificación restic check --read-dataperiódicamente o utilícela para comprobar partes del repositorio a lo largo del tiempo. Consulte la documentación de integridad del repositorio--read-data-subset de Restic .
Una lista de instantáneas no es una prueba de restauración. Restaure una instantánea reciente en un directorio temporal independiente con restic restore latest --target /tmp/nextcloud-restore-test, y luego confirme que los archivos de la aplicación, el directorio de datos y el volcado SQL estén presentes. No restaure sobre una instalación activa como prueba. Para una recuperación real, restaure los archivos y la base de datos como un conjunto coincidente; las instrucciones de restauración de Nextcloud incluyen consideraciones sobre la recreación de la base de datos y la sincronización del cliente.
Esta configuración proporciona instantáneas cifradas repetibles, pero cron no supervisa sus propios fallos y Restic no define la política de retención. Revise el registro o configure alertas para las ejecuciones fallidas, conserve una copia independiente de las credenciales del repositorio y pruebe la recuperación periódicamente. Si la ventana de mantenimiento es demasiado larga, utilice instantáneas coordinadas del sistema de archivos y una exportación coherente con la base de datos diseñada para su plataforma de almacenamiento, en lugar de realizar copias de seguridad de archivos modificados en tiempo real.
El programa ejecuta diariamente el script propiedad del usuario root; la lista de instantáneas es una comprobación rápida de que se han registrado las ejecuciones.