
🌐 También en: English · Deutsch · Français
¿Alguna vez has querido hacer una copia de seguridad de tu instancia autoalojada de Nextcloud sin sudar la gota gorda? ¿Harto de hacer rsync de carpetas a mano o de arriesgarte a romper la base de datos? Abróchate el cinturón, sysadmin: aquí tienes un pequeño y apañado script de Bash que hace el trabajo sucio por ti. Desde activar el modo de mantenimiento hasta sincronizar tus datos externos y volcar tu base de datos MySQL, todo se resuelve en una sola ejecución. 🧠
📜 ¿Qué hace este script?
Este script realiza una copia de seguridad en 6 pasos de tu servidor Nextcloud remoto:
- Activa el modo de mantenimiento
- Crea un volcado de la base de datos MySQL
- Guarda una copia del directorio
config/ - Guarda una copia de los
themes/personalizados (opcional) - Sincroniza el directorio de datos externo
- Vuelve a desactivar el modo de mantenimiento
Todo ello con rsync, ssh y un poco de magia de shell. El resultado: una copia de seguridad totalmente automatizada que puedes meter en cron hasta aburrirte.
🧠 El script (pegar y ajustar)
#!/bin/bash
# === CONFIGURATION ===
REMOTE_USER="root"
REMOTE_HOST="your.remote.host"
REMOTE_SSH_PORT=22
SSH_KEY="$HOME/.ssh/id_rsa"
# Local backup destination (no versioning)
LOCAL_BACKUP_DIR="/data/backup/nextcloud/yourinstance"
mkdir -p "$LOCAL_BACKUP_DIR"
# Remote Nextcloud directory (contains everything)
REMOTE_NC_DIR="/var/www/html/nextcloud"
# Database credentials (use .my.cnf or secured method in production)
REMOTE_DB_NAME="your_db_name"
REMOTE_DB_USER="your_db_user"
# REMOTE_DB_PASS is omitted for security
# === BACKUP START ===
echo "🛡️ [1/4] Enabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --on" > /dev/null
echo "🗃️ [2/4] Creating database dump ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"mysqldump -u $REMOTE_DB_USER -p'********' $REMOTE_DB_NAME" > "$LOCAL_BACKUP_DIR/db.sql"
echo "📦 [3/4] Backing up entire Nextcloud directory from $REMOTE_NC_DIR ..."
rsync -az --delete -e "ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR"
\
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_NC_DIR/" "$LOCAL_BACKUP_DIR/nextcloud/"
echo "✅ [4/4] Disabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --off" > /dev/null
🔒 No olvides sustituir tus secretos
- <your_db_name> – El nombre de tu base de datos de Nextcloud
- <your_db_user> – El usuario de la base de datos
- <your_db_password> – La contraseña (¡guárdala bien, gente!)
- REMOTE_HOST / PORT / DIRS – Ajústalos a la estructura de tu servidor
Lo recomendable es usar variables de entorno o archivos .env externos para los secretos. Ponerlos a fuego en el código vale para scripts rápidos y chapuceros; eso sí, no los subas a GitHub 😅.
🧪 Prueba antes de automatizar
Antes de soltar esto en tu crontab, pruébalo a mano y revisa tu carpeta de copias de seguridad. Una copia completa debería incluir:
db.sql– Tu base de datos completa de Nextcloudconfig/– Los archivos de configuraciónthemes/– Los temas personalizados (si los hay)datafiles/– Todos los archivos subidos por los usuarios
Puedes añadir registros, gestión de errores, control de versiones e informes por correo, pero este script básico cumple de sobra para la mayoría de las nubes alojadas en casa. ☁️
🤖 TL;DR
Si autoalojas Nextcloud, este es el script que no sabías que necesitabas. Entra por SSH, haz rsync a lo grande, vuelca la base de datos y duerme tranquilo sabiendo que tu nube está a salvo… al menos hasta que alguien tropiece con el cable de alimentación del NAS. 😉
¡Feliz hacking y haz tus copias con responsabilidad! 🧬





