Administrar un servidor Nextcloud implica algo más que mantener el servicio funcionando. Una de las responsabilidades más importantes es asegurar que toda la información almacenada pueda recuperarse ante cualquier problema, ya sea un fallo del sistema, un error humano o un problema en el almacenamiento. Para lograrlo es fundamental contar con una estrategia de copias de seguridad fiable, que incluya tanto los archivos del sistema como la base de datos y los datos de los usuarios.
Vamos a ver cómo realizar una copia de seguridad completa de Nextcloud. Primero realizaremos el proceso de forma manual para entender qué elementos deben respaldarse, y luego automatizaremos todo el procedimiento mediante un script en Bash ejecutado automáticamente con cron.
Backup manual de Nextcloud
Antes de realizar una copia de seguridad es recomendable activar el modo mantenimiento para evitar cambios en los archivos o en la base de datos durante el proceso.
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --onEste comando ejecuta la herramienta OCC de Nextcloud como el usuario www-data y activa el modo mantenimiento, bloqueando temporalmente el acceso de usuarios.
Crear estructura de backups
sudo mkdir -p /backups/nextcloud/{data,app,db}Esto crea la estructura de carpetas donde se almacenarán los backups.
/backups/nextcloud
├── data
├── app
└── dbBackup de la base de datos
sudo mysqldump -u nextclouduser -p nextcloud | sudo tee /backups/nextcloud/db/nextcloud.sql > /dev/nullEste comando realiza el respaldo de la base de datos.
mysqldump
Exporta la base de datos completa en formato SQL.
-u nextclouduser
Usuario de la base de datos.
-p
Solicita la contraseña.
nextcloud
Nombre de la base de datos.
tee
Guarda la salida en el archivo SQL.
/dev/null
Evita mostrar el contenido del dump en pantalla.

Backup de los datos de usuarios
sudo rsync -Aax /var/www/nextcloud/data/ /backups/nextcloud/data/Esto copia todos los datos de usuarios.
rsync es una herramienta eficiente para sincronizar archivos.
Opciones utilizadas:
-A
Preserva ACLs (permisos avanzados).
-a
Modo archivo (preserva permisos, fechas y estructura).
-x
Evita cruzar otros sistemas de archivos.
Backup de la aplicación
sudo rsync -Aax /var/www/nextcloud/ /backups/nextcloud/app/Esto respalda:
- Código de Nextcloud.
- Configuración.
- Aplicaciones instaladas.
Desactivar modo mantenimiento
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --offAl terminar veriamos algo asi en nuestro backup:

Automatización del backup con script
Para evitar realizar el proceso manualmente podemos crear un script.
Creamos el script:
sudo nano /usr/local/bin/backup_script.shContenido del script:
#!/bin/bash
# Rutas
NC_PATH="/var/www/nextcloud"
DATA_PATH="/srv/nextcloud-data"
BACKUP_PATH="/backups/nextcloud"
DB_USER="usernextcloud"
DB_NAME="nextcloud"
DATE=$(date +"%Y-%m-%d_%H-%M")
# Crear estructura de backup si no existe
mkdir -p $BACKUP_PATH/db
mkdir -p $BACKUP_PATH/data
mkdir -p $BACKUP_PATH/app
# Activar mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --on
# Backup base de datos
sudo mysqldump -u $DB_USER $DB_NAME | sudo tee $BACKUP_PATH/db/nextcloud_$DATE.sql > /dev/null
# Backup datos
sudo rsync -Aax $DATA_PATH/ $BACKUP_PATH/data/
# Backup app
sudo rsync -Aax $NC_PATH/ $BACKUP_PATH/app/
# Desactivar mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --offExplicación del script
Variables
NC_PATH="/var/www/nextcloud"Ruta donde está instalada la aplicación.
DATA_PATH="/srv/nextcloud-data"Directorio donde se almacenan los archivos de los usuarios.
BACKUP_PATH="/backups/nextcloud"Directorio donde se guardarán las copias de seguridad.
Variable de fecha
DATE=$(date +"%Y-%m-%d_%H-%M")Genera un timestamp para que cada backup tenga un nombre único.
Ejemplo:
nextcloud_2026-03-06_02-30.sqlActivar modo mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --onBloquea accesos mientras se realiza el backup.
Backup de base de datos
sudo mysqldump -u $DB_USER $DB_NAMEExporta la base de datos.
tee $BACKUP_PATH/db/nextcloud_$DATE.sqlGuarda el dump en el directorio de backups.
Backup de datos
rsync -Aax $DATA_PATH/ $BACKUP_PATH/data/Copia todos los archivos de usuarios preservando permisos.
Backup de la aplicación
rsync -Aax $NC_PATH/ $BACKUP_PATH/app/Guarda el código de Nextcloud.
Desactivar mantenimiento
sudo -u www-data php $NC_PATH/occ maintenance:mode --offRestaura el acceso al sistema.
Autenticación de MySQL sin contraseña
Para evitar introducir la contraseña manualmente en cada backup o que al ejecutarse produzca algún tipo de error podemos crear un archivo de configuración:
sudo nano /root/.my.cnfContenido:
[client]
user=(userdb)
password=(pass)Esto permite que herramientas como mysqldump utilicen automáticamente esas credenciales.
Es importante restringir los permisos:
sudo chmod 600 /root/.my.cnfAutomatizar el backup con Cron
Ahora podemos programar el script para que se ejecute automáticamente.
Editar el crontab:
sudo crontab -eEjemplo:
*/2 * * * * /usr/local/bin/backup_script.sh >> /var/log/nextcloud_backup.log 2>&1Explicación:
*/2Ejecuta el script cada 2 minutos.
>> /var/log/nextcloud_backup.logGuarda la salida en un archivo de log.
2>&1Redirige los errores al mismo log.
Verificar logs del backup
Para revisar la ejecución:
sudo tail -n 50 /var/log/nextcloud_backup.log
Esto mostrará las últimas líneas del log.
Estructura final de backups
/backups/nextcloud
├── app
├── data
└── db
└── nextcloud_2026-03-06_02-30.sqlConclusión
Automatizar las copias de seguridad de Nextcloud permite:
- Proteger datos críticos.
- Evitar pérdida de información.
- Reducir intervención manual.
- Mantener una estrategia de recuperación ante desastres.
Implementar este sistema con rsync + mysqldump + cron es una solución simple, eficiente y ampliamente utilizada en entornos de administración de servidores.
GabrielGR









