Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save nullx5/51ad6323112fe0b88e447649e38a19fd to your computer and use it in GitHub Desktop.
Save nullx5/51ad6323112fe0b88e447649e38a19fd to your computer and use it in GitHub Desktop.

configurar rclone con dropbox backups copias de seguridad respaldos

Configurar dropbox en rclone:


sudo apt install rclone

rclone config
n) New remote
name> dropbox
Storage> 13
client_id> dejar en blanco enter
client_secret> dejar en blanco enter
Edit advanced config? > n
Use auto config? > y
Se abre el browser y darle a permitir a rclone gestionar dropbox
Keep this "dropbox" remote? > y
q


rclone listremotes              # listar remotos
rclone config show              # listar remotos verbose

rclone config delete [remote]   # eliminar remotos


@nullx5
Copy link
Author

nullx5 commented Jun 27, 2025

script hacer backups de wordpress files y database .sql con rclone y dropbox

nvim wp_full_backup.sh

#!/bin/bash

# === CONFIGURACIÓN ===
LOG_FILE="/var/log/wp_full_backup.log"
BACKUP_DIR="/home/blessed/backups"
WP_DATA_PATH="/var/lib/docker/volumes/wp-vol/_data"
DB_USER="root"
DB_PASS="pass123"
DB_NAME="wordpress"
DB_HOST="127.0.0.1"
DB_PORT="3306"
RCLONE_REMOTE="dropbox:/backups"
DIAS_RETENCION=7

# Redirigir salida estándar y de error al archivo log
exec >> "$LOG_FILE" 2>&1

# === FUNCIONES ===

log() {
  echo "$1"
}

crear_directorios() {
  mkdir -p "$BACKUP_DIR"
}

backup_base_datos() {
  log "🗃️  Backup de base de datos..."
  mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$SQL_BACKUP"
  if [ $? -ne 0 ]; then
    log "❌ Error en el backup de la base de datos. Abortando."
    exit 1
  fi
}

backup_wordpress() {
  log "📂 Backup de archivos WordPress..."
  sudo tar -czf "$WP_BACKUP" -C "$WP_DATA_PATH" .
  if [ $? -ne 0 ]; then
    log "❌ Error al comprimir archivos WordPress. Abortando."
    exit 1
  fi
}

unificar_backups() {
  log "🧩 Unificando backups..."
  tar -czf "$FINAL_BACKUP" -C "$BACKUP_DIR" "$(basename "$SQL_BACKUP")" "$(basename "$WP_BACKUP")"
  rm -f "$SQL_BACKUP" "$WP_BACKUP"
}

subir_a_dropbox() {
  log "☁️  Subiendo backup a Dropbox..."
  rclone copy "$FINAL_BACKUP" "$RCLONE_REMOTE"
  if [ $? -eq 0 ]; then
    log "✅ Backup subido correctamente."
  else
    log "❌ Error al subir el backup a Dropbox."
  fi
}

limpiar_backups_locales() {
  log "🧹 Limpiando backups locales > $DIAS_RETENCION días..."
  find "$BACKUP_DIR" -type f -name "full-backup-*.tar.gz" -mtime +$DIAS_RETENCION -exec rm -f {} \;
}

limpiar_backups_dropbox() {
  log "🧹 Limpiando backups en Dropbox > $DIAS_RETENCION días..."
  archivos=$(rclone lsf "$RCLONE_REMOTE" --format pt --files-only)

  for archivo in $archivos; do
    # Extrae la fecha del nombre: full-backup-2025-06-16-01-00-00.tar.gz
    fecha_str=$(echo "$archivo" | grep -oP '\d{4}-\d{2}-\d{2}' | head -1)
    if [[ $fecha_str ]]; then
      # Convertir fecha del archivo a timestamp
      archivo_ts=$(date -d "$fecha_str" +%s)
      actual_ts=$(date +%s)
      dias_diff=$(( (actual_ts - archivo_ts) / 86400 ))

      if [ "$dias_diff" -gt "$DIAS_RETENCION" ]; then
        log "❌ Eliminando $archivo de Dropbox (tiene $dias_diff días)"
        rclone delete "$RCLONE_REMOTE/$archivo"
      fi
    fi
  done
}

# === VARIABLES INTERNAS ===
TIMESTAMP=$(date +"%Y-%m-%d-%H-%M-%S")
SQL_BACKUP="$BACKUP_DIR/backup.sql"
WP_BACKUP="$BACKUP_DIR/wp-vol-backup.tar.gz"
FINAL_BACKUP="$BACKUP_DIR/full-backup-$TIMESTAMP.tar.gz"

# === FLUJO PRINCIPAL ===

log "🚀 Iniciando proceso de backup..."
crear_directorios
backup_base_datos
backup_wordpress
unificar_backups
subir_a_dropbox
limpiar_backups_locales
limpiar_backups_dropbox
log "🏁 Backup completado."
log "------------------------------------------------------------"

sudo chmod +x /usr/local/bin/wp_full_backup.sh

/etc/systemd/system/wp_full_backup.service

[Unit]
Description=Backup completo de WordPress y MariaDB con subida a Dropbox
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/wp_full_backup.sh

/etc/systemd/system/wp_full_backup.timer

[Unit]
Description=Ejecutar backup WordPress y MariaDB diario

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

sudo systemctl daemon-reload
sudo systemctl enable --now wp_full_backup.timer
systemctl list-timers | grep wp_full_backup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment