como hacer un backup a un vps

Las copias de seguridad de VPS son simples, simplemente lo estás pensando demasiado

Las copias de seguridad de VPS son realmente simples, solo estás pensando demasiado

La gente sigue pensando que las cópias de seguridad manuales de VPS son una tarea imposible. Exigen GUI y herramientas automatizadas. Pasan horas y horas tratando de usar herramientas de respaldo oscuras basadas en terminales.

En cambio, permítame ser el primero en decir que las copias de seguridad de VPS son en realidad increíblemente simples. Este es el único comando que necesita saber:

$ rsync USER@IP_ADDRESS:/ -aAXvh \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/home/USER/backups/
 

Hecho. ¿Podemos dejar de preocuparnos por las copias de seguridad de VPS ahora?

 

De acuerdo, parece mucho, pero te prometo que no lo es. Volveremos a lo que hace ese comando en un momento; primero, hablemos sobre por qué debería hacer una copia de seguridad de su VPS en primer lugar.


¿Por qué son importantes las copias de seguridad de VPS?

Ya sea que sea propietario de una pequeña empresa, aloje un sitio web personal simple o trabaje en una organización de primer nivel, sus datos siempre son importantes. Pero debido a que está en línea, siempre sigue siendo vulnerable a los piratas informáticos, el ransomware o incluso la eliminación accidental.

Tener un plan de respaldo y recuperación adecuado es esencial para protegerse contra estos eventos inesperados. Si conserva copias duplicadas de sus archivos importantes y los almacena en una ubicación separada y segura, puede recuperarlos si tiene problemas con la integridad de sus datos, sin importar la fuente.

En lugar de simplemente ejecutar ese comando sin pensarlo, debe dedicar unos minutos a crear una política de respaldo adecuada y estandarizada para minimizar el riesgo y hacer su vida más fácil.

La frecuencia y el tiempo de su copia de seguridad dependen de la frecuencia con la que cambian los datos, cuánto tiempo lleva hacer una copia de seguridad, cuántos datos necesita duplicar y cuándo los visitantes o el usuario utilizarán más su servicio. Dado que el proceso de copia de seguridad puede utilizar muchos recursos del sistema, debe programar sus copias de seguridad para momentos del día con poco uso. Para un VPS personal, debe realizar copias de seguridad semanales o incluso diarias.

Recuerde : la copia de seguridad y la recuperación de datos son dos cosas diferentes. Las copias de seguridad son el acto de duplicar archivos, mientras que la recuperación es el proceso de restaurar datos desde su copia de seguridad. La restauración no es tan fácil como una copia de seguridad, ¡pero ni siquiera puede intentar la restauración sin una copia de seguridad adecuada!

Veamos de qué se trata rsync

rsyncsignifica sincronización remota y es un programa de utilidad para sincronizar archivos y directorios de un host a otro de manera eficiente. rsyncreplica un conjunto de datos completo entre el origen y el destino cuando se ejecuta por primera vez. Después de esa primera ejecución, rsyncsolo transfiere los datos que han cambiado. Estos cambios se denominan delta.

rsync utiliza compresión y envía datos a través de un túnel SSH cifrado para una seguridad sólida.

El uso más básico de rsynces replicar una carpeta en el mismo host. El siguiente ejemplo sincronizará todos los archivos y carpetas de source_folderdestination_folder.

$ rsync -av ~/source_folder/ destination_folder/
 

La -aopción significa el modo de archivo y es un alias para otros indicadores ( -rltpgoD), y la -vopción activa el modo detallado para obtener detalles sobre la transferencia.

Ahora que se rsyncha copiado source_folderuna vez, puedo agregar un nuevo archivo y volver a ejecutar el mismo comando. Esta vez, rsyncno volverá a copiar toda la carpeta al destino. Solo transferirá los archivos modificados o los archivos que se hayan agregado desde la última ejecución.

$ cd source_folder
$ touch pattern.txt
$ vi IP.txt
$ rsync -av ~/source_folder/  dest_folder/
sending incremental file list
./
IP.txt
pattern.txt

sent 353 bytes  received 61 bytes  828.00 bytes/sec
total size is 13  speedup is 0.03
 

Este tipo de copia de seguridad es un ejemplo de copia de seguridad incremental.

Para sincronizar archivos y carpetas entre su sistema local y el VPS remoto, necesita las credenciales SSH e instalarlas rsyncen el VPS remoto. El siguiente ejemplo sincronizará una carpeta de su sistema local al VPS remoto.

$ rsync -av ~/source_folder USER@IP_ADDRESS:/home/USER/backup/
 

El rsynccomando anterior sincronizará el source_folderdesde su sistema local al VPS remoto en la carpeta /home/USER/backup/.

Si SSH se está ejecutando en cualquier puerto no estándar en su VPS remoto, entonces debe especificar el puerto no estándar de SSH usando la -ebandera.

$ rsync -avP source_folder/ -e 'ssh -p 2222' USER@IP_ADDRESS:/home/USER/backup/
 

La -Pbandera combina las banderas --progress--partial. El primero producirá una barra de progreso en la terminal, y el segundo le dice al VPS que guarde los archivos parcialmente transferidos si hay alguna interrupción durante la transferencia.

Cambiando las tornas: haciendo una copia de seguridad de su VPS en su máquina local

Ahora que le he mostrado cómo enviar datos desde su máquina local a su VPS, es hora de extraer datos de su VPS a su máquina local.

$ rsync -avP USER@IP_ADDRESS:/var/www/html /home/dd/backups/
receiving incremental file list
html/
     612 100%  597.66kB/s    0:00:00 (xfr#1, to-chk=2/4)
html/drupal/
html/wordpress/

sent 59 bytes  received 820 bytes  195.33 bytes/sec
total size is 612  speedup is 0.70
 

La única diferencia entre este comando y el envío anterior es que hemos intercambiado las carpetas de origen y destino.

Todavía podemos usar la -ebandera si necesita cambiar el puerto SSH.

$ rsync -avP -e 'ssh -p 2222' USER@IP_ADDRESS:/var/www/html /home/dd/backups/
 

Esto funciona muy bien para una sola carpeta, pero ¿qué sucede si desea hacer una copia de seguridad de todo el VPS? También podemos hacer eso, pero queremos excluir algunas carpetas. La --excludebandera hace exactamente esto al excluir archivos basados en un patrón. rsyncno admite expresiones regulares, por lo que solo funcionará la coincidencia de archivos estándar.

$ rsync --dry-run USER@IP_ADDRESS:/ -aAXvh --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /home/dd/backups/
 

La --dry-runbandera en el ejemplo anterior no transferirá ningún archivo pero le mostrará la salida del comando. Después de verificar la salida con cuidado, puede omitir la --dry-runopción de extraer archivos de un VPS remoto. La /ruta inmediatamente después IP_ADDRESS:indica que se rsyncdebe sincronizar todo el sistema de archivos, excluyendo las carpetas especificadas en la --exclude={ }marca.

Convirtamos esta magia en un guión

¿Recuerdas cuando dije que una buena estrategia de respaldo te facilita la vida? Ingrese a las secuencias de comandos.

Ahora volvemos a pensar demasiado.

La secuencia de comandos no eliminará las instantáneas antiguas, pero vinculará las instantáneas recientes a una carpeta por el nombre latest. Para personalizar la secuencia de comandos para su entorno, cambiar el valor de source_dirdestination_dirssh_userip_addressssh_port_nosymbolic_name_recent_backupen la siguiente secuencia de comandos.

#!/bin/bash

#Create a timestamp
date=`date "+%Y-%m-%dT%H_%M_%S"`

#Source location, you can change '/' to something like /var/www/html
source_dir="/"

#Backup location on your local system
destination_dir="/home/dd/Documents/"

#Name of Backup folder
backup_folder_name=backup-$date

#Full path of backup; concatenation of above two paths
final_destination_dir=$destination_dir$backup_folder_name

#Create backup directory
mkdir -p $final_destination_dir

#rsync options
rsync_option="-aAXvhP"

#SSH username
ssh_user="peter"

#SSH Port
SSHPort=2222

#IP address of remote host
ip_address="123.45.67.89"

#Symbolic name of latest backup
symbolic_name_recent_backup="latest"

#Exclude folders that you don't want to backup

exclude_folders=(
  "/dev"
  "/usr"
  "/var"
  "/sbin"
  "/home"
  "/etc"
  "/proc"
  "/sys"
  "/tmp"
  "/run"
  "/mnt"
  "media"
)

#Change to the destination directory where rsync will pull data from remote VPS

cd $destination_dir

#Get the most recent snapshot folder name that will be symbolically linked to the latest folder.

latest_backup_dir=$(ls -td -- backup* | head -n 1 | cut -d'/' -f1)

#Place all the exclude folders in a single variable

for item in "${exclude_folders[@]}"
do
  exclude_flags="${exclude_flags} --exclude ${item}"
done

#Remove the folder which was symbolically linked to the snapshots folder earlier

if [ -L $symbolic_name_recent_backup ];
then
     echo "Removing previous symbolic link to the snapshots"
     rm -rf $symbolic_name_recent_backup
fi

#Create a new symbolic link to the latest snapshots

echo "Creating new symbolic link to the latest snapshots"
$(ln -s $latest_backup_dir latest)

#Run rsync

rsync $rsync_option ${exclude_flags} -e  "ssh -p $SSHPort" $ssh_user@$ip_address:$source_dir $final_destination_dir || echo "rsync died with error code $?" >> /var/log/backup.log

 

Automatice el script para que se ejecute una vez a la semana

Una vez que haya probado el script anterior en su entorno, automatice el script para que se ejecute al menos una vez a la semana utilizando un trabajo cron. Puede elegir el intervalo de ejecución del script de acuerdo con sus requisitos. Asegúrese de poder autenticarse en el VPS remoto utilizando el método basado en claves y sin una frase de contraseña, de lo contrario, el trabajo cron no funcionará.

Simplemente ejecute crontab -u USER -een la terminal, elija un editor y agregue una línea. Especifique el intervalo de tiempo que desea, junto con la ruta donde guardó el script anterior.

Mi estrategia de respaldo es ejecutar el script de respaldo a las 9 AM todos los lunes, de ahí la 0 9 * *especificación del intervalo de tiempo. Si algo sale mal, puede consultar el archivo de registro /var/log/backup.logpara obtener más información.

$ crontab -u USER -e
...
...
0 9 * * Mon /path/to/your/backup/rsync_backup.sh
 

El script es simple, y tal vez no sea una solución integral para sus necesidades, pero hace que la copia de seguridad de un VPS sea increíblemente fácil. Puede hacer una copia de seguridad de un VPS en su máquina local, o incluso de un VPS en otro.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *