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.

Una ilustración oscura en la terminal muestra cómo se habilita el modo de mantenimiento de Nextcloud antes de exportar una base de datos MariaDB.
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.

Las instrucciones oficiales de copia de seguridad de Nextcloud explican los componentes y las opciones de exportación de la base de datos. Este procedimiento utiliza MariaDB; para PostgreSQL, MySQL o SQLite, utilice los comandos de volcado y restauración correspondientes en la sección de bases de datos de dicho manual .

Prepara Restic y protege sus credenciales.

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.

sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env

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:

RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password

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
Una ilustración de la terminal muestra la ruta del repositorio de Restic, la ruta del archivo de contraseñas y el comando de inicialización de Restic.
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.

Una ilustración de la terminal muestra a Restic realizando una copia de seguridad del directorio de la aplicación Nextcloud, un directorio de datos independiente y un directorio de almacenamiento temporal para el volcado SQL.
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:

30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1

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:

sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'

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.

Una ilustración de la terminal muestra una entrada diaria de cron para el script Restic de Nextcloud junto con el comando de instantáneas de Restic.
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.

Dejar un comentario

Automatice las copias de seguridad consistentes de Nextcloud con Restic y Cron.

Automatice las copias de seguridad consistentes de Nextcloud con Restic y Cron.

Realice copias de seguridad de los archivos de Nextcloud y MariaDB conjuntamente, programe instantáneas Restic cifradas con cron y verifique la recuperación sin poner en riesgo el servidor en producción.

Permitir que los usuarios autorizados creen salas de Jitsi con inicio de sesión de Keycloak.

Permitir que los usuarios autorizados creen salas de Jitsi con inicio de sesión de Keycloak.

Permitir únicamente que las cuentas autorizadas inicien salas de Jitsi Meet mediante Keycloak y autenticación por token, manteniendo la opción de unirse como invitado cuando sea necesario.

Copia de seguridad y restauración de un buzón de correo de Zimbra CE mediante exportaciones TGZ

Copia de seguridad y restauración de un buzón de correo de Zimbra CE mediante exportaciones TGZ

Exporta un buzón individual de Zimbra Community Edition, valida su copia de seguridad TGZ y restaura los elementos que falten sin sobrescribir el correo existente.

Sincroniza los usuarios de Active Directory con ONLYOFFICE DocSpace a través de LDAP.

Sincroniza los usuarios de Active Directory con ONLYOFFICE DocSpace a través de LDAP.

Conecte ONLYOFFICE DocSpace a Active Directory u OpenLDAP, importe usuarios y grupos de forma segura, asigne campos de cuenta y programe una sincronización fiable.

Debian 12 en un VPS con poca RAM: Cómo reducir los fallos por falta de memoria de MySQL

Debian 12 en un VPS con poca RAM: Cómo reducir los fallos por falta de memoria de MySQL

Diagnosticar errores de memoria insuficiente (OOM kills) en MySQL en Debian 12, comprobar los límites de memoria del VPS, configurar el espacio de intercambio y ajustar la memoria y la concurrencia de la base de datos sin prometer una solución universal.

Agregar fuentes al servidor de documentos ONLYOFFICE: Docker vs Linux

Agregar fuentes al servidor de documentos ONLYOFFICE: Docker vs Linux

Instale fuentes personalizadas en ONLYOFFICE Document Server, compare los montajes persistentes de Docker con las copias directas, reconstruya la lista de fuentes y verifique el resultado.

Coloca ONLYOFFICE Docs detrás de HAProxy sin interrumpir la edición.

Coloca ONLYOFFICE Docs detrás de HAProxy sin interrumpir la edición.

Configure HAProxy HTTPS, el reenvío de encabezados, los tiempos de espera de WebSocket y las comprobaciones de estado para ONLYOFFICE Docs, y luego verifique la edición y el guardado.

Instalar y firmar módulos de kernel personalizados en SLES 15 Secure Boot

Instalar y firmar módulos de kernel personalizados en SLES 15 Secure Boot

Cargue un módulo de kernel SLES 15 personalizado sin deshabilitar el arranque seguro. Asegúrese de que el kernel en ejecución coincida, firme el archivo .ko, registre una clave MOK y verifique la carga.

Reenvío seguro de Syslog de SLES con rsyslog y TLS mutuo

Reenvío seguro de Syslog de SLES con rsyslog y TLS mutuo

Envía los registros del sistema SLES a un recolector rsyslog remoto a través de TLS autenticado, con comprobaciones de certificados, almacenamiento en búfer de interrupciones y pruebas de entrega.

Cómo iniciar Ubuntu Server en modo de emergencia: Guía de recuperación paso a paso

Cómo iniciar Ubuntu Server en modo de emergencia: Guía de recuperación paso a paso

Diagnostica de forma segura el modo de emergencia de Ubuntu Server. Lee los registros de arranque, comprueba los puntos de montaje raíz y fstab, repara una unidad defectuosa, gestiona los errores del sistema de archivos y verifica un reinicio correcto.