Objetivo

Para que te sitúes un poco, hace tiempo que estoy detrás de una solución generalizada para hacer respaldos de todos los servidores que tenemos activos y los ordenadores que utilizamos en Charrúa. Hasta ahora, en cada servidor, cuenta de cliente u ordenador, teníamos que instalar y ejecutar algún tipo de software o script que desencadene, cada determinado tiempo, la tarea de backup y luego lo transfiera de manera segura a un NAS o a la nube.

Te presento a BackupPC:

BackupPC es un software libre de respaldo disco-a-disco, con una interfaz web. El software es multiplataforma, y puede ejecutarse en cualquier sistema tipo Linux, Solaris o servidor basado en Unix. No se requiere el uso de clientes, ya que el servidor es en sí mismo es cliente para múltiples protocolos que son manejados por otros servicios nativos del sistema operativo.

Wikipedia

En este artículo voy a enseñarte varias cosas, crear un servidor de respaldo en DigitalOcean con CentOS 7, instalar Docker y luego instalar BackupPC. Por último te voy a dejar unos conceptos básicos de como realizar tu primer backup a uno de tus servidores (a los que llamaremos clientes o hosts).

Algo muy interesante a destacar, será que el servidor de respaldo se comunicara con tus otros servidores u ordenadores mediante SSH. De esta manera, cada determinado tiempo, supongamos 1 día, todos tus datos serán respaldados.

Crear el droplet en DigitalOcean

Un «droplet» es un servidor virtual privado, o como mejor se conoce VPS. DigitalOcean los llama «droplets».

Lo interesante de esta empresa es que te dan USD 100-200 para que pruebes de manera gratuita los servicios, mas allá de la calidad del servicio que te prestan. Yo lo utilizo hace ya 3 años, y la verdad no me puedo quejar, ni mis clientes.

Si no tienes una cuenta con ellos, te dejo el enlace para tus USD 100-200 iniciales https://m.do.co/c/bbd50ca17fc0. Básicamente si te suscribes utilizando este enlace a ti te dan USD 100 y a mi, si en el futuro trabajas con ellos, me darán un pago de USD 25.

Una vez tengas una cuenta creada, crearas tu primer droplet. En mi caso he seleccionado estas opciones:

  • Imagen: CentOS 7.6 x64
  • Plan: Standard USD 5 por mes
  • Datacenter: Frankfurt
  • Opciones adicionales: Monitoring
  • Autenticación: One-time password

Una vez creamos el droplet, DigitalOcean nos envía un correo con la clave del servidor. Dentro del panel del droplet, tenemos un botón Console sobre el margen superior derecho, le damos click.

Esto nos abrirá la consola del servidor donde debemos ingresar el login root y el password que nos han enviado. El sistema nos pedirá cambiar el password generado automáticamente. Es importante no utilizar el usuario root (a menos que sepas lo que haces), para ello, puedes seguir una guía de configuración inicial para CentOS 7: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7

En la siguiente guía lo que harás será:

  • Crear un super-usuario con privilegios root.
  • Crear una llave SSH en tu ordenador para comunicarte con el servidor de manera segura.
  • Copiar la llave SSH al servidor.
  • Deshabilitar el acceso root al servidor.

Los comandos que debes ejecutar son:

ssh root@SERVER_IP_ADDRESS
adduser demo
passwd demo
gpasswd -a demo wheel
gpasswd -a demo wheel

He copiado como luce mi consola para que puedas hacerte una idea de los comandos que he ejecutado. Recuerda que todo esto, lo tienes detallado en la guía mencionada anteriormente. Verás que uso asteriscos *** para ocultar ciertos datos.

Charrua01:~ danielpereyra$ ssh root@***
root@***'s password: 
Last login: Wed Jan 8 13:02:27 2020 from ***
[root@centos-s-1vcpu-1gb-fra1-01 ~]# adduser demo
[root@centos-s-1vcpu-1gb-fra1-01 ~]# passwd demo
Cambiando la contraseña del usuario demo.
Nueva contraseña: 
Vuelva a escribir la nueva contraseña: 
passwd: todos los símbolos de autenticación se actualizaron con éxito.
[root@centos-s-1vcpu-1gb-fra1-01 ~]# gpasswd -a demo wheel
Añadiendo al usuario demo al grupo wheel

Luego en mi ordenador local, en mi caso ya tengo generada la llave SSH, por lo que solo la voy a copiar al droplet, ejecutamos:

ssh-copy-id demo@SERVER_IP_ADDRESS
Charrua01:~ danielpereyra$ ssh-copy-id demo@***
/***/ssh-copy-id: INFO: Source of key(s) to be installed: "/***/.ssh/id_rsa.pub"
/***/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/***/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@***'s password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'demo@***'"
and check to make sure that only the key(s) you wanted were added.

Aquí solo te queda modificar el archivo /etc/ssh/sshd_config para deshabilitar el acceso root al servidor y reiniciar SSH con systemctl reload sshd.

Recuerda que en el caso de que no tengas generada tu llave SSH la deberas generar antes de poder copiarla al servidor.

¿NECESITAS POTENCIAR TU PÁGINA WEB O TIENDA ONLINE?

Si buscas realizar mejoras en tu página web o tienda online, estás en el lugar adecuado. Podemos trabajar juntos para impulsar tu presencia en línea y hacer realidad tus objetivos digitales.

¡HABLEMOS DE TU PROYECTO!

Instalar Docker en CentOS 7

Puedes ver la guía completa en: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7

sudo yum check-update
curl -fsSL https://get.docker.com/ | sh
sudo systemctl start docker
sudo systemctl status docker

La salida de este último comando debería ser similar a:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)

Instalar y ejecutar BackupPC

El paquete que utilizaremos es adferrand/backuppc y lo puedes ver aquí: https://hub.docker.com/r/adferrand/backuppc/

Probaremos la primera vez, ejecutar el siguiente comando, para que se descargue la imagen, se cree la configuración inicial del paquete y se ejecute:

sudo docker run \
    --name backuppc \
    --publish 80:8080 \
    adferrand/backuppc

Algo interesante a tener en cuenta es que también se crea una llave SSH cuando ejecutamos el contenedor, esta es la clave que utilizaremos para comunicarnos con los ordenadores o servidores (clientes) que queremos respaldar.

En la consola te saldrá todo lo que se esta ejecutando y al final verás algo similar a esto:

Enjoy!
2020-01-08 13:32:24 circus[1] [INFO] Starting master on pid 1
2020-01-08 13:32:24 circus[1] [INFO] Arbiter now waiting for commands
2020-01-08 13:32:24 circus[1] [INFO] backuppc started
2020-01-08 13:32:24 circus[1] [INFO] lighttpd started

Si vemos esto, estamos ejecutando correctamente el servidor lightttpd, iremos al navegador y escribiremos: http://SERVER_IP_ADDRESS. Se nos preguntará por usuario y password, por defecto son:

  • Usuario: backuppc
  • Password: password

Debemos prestar atención a que si finalizamos la ejecución del contenedor, no podremos acceder a BackupPC.
Puedes consultar la documentación del paquete de BackupPC en el enlace https://hub.docker.com/r/adferrand/backuppc/.

Finalizaremos la ejecución del contenedor, en nuestra consola, presionamos control+c. Vamos a ver el siguiente mensaje en consola:

2020-01-08 13:40:56 circus[1] [INFO] Got signal SIG_INT
2020-01-08 13:40:56 circus[1] [INFO] Arbiter exiting
2020-01-08 13:40:56 circus[1] [INFO] backuppc stopped
2020-01-08 13:40:56 circus[1] [INFO] lighttpd stopped

Si probamos ingresar nuevamente en http://SERVER_IP_ADDRESS comprobaremos que no es posible.

Debemos recordar que el contenedor se ha creado y esta con estado stopped, para poder chequearlo ejecutaremos:

sudo docker ps --filter "status=exited"

Lo que nos devolverá

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                     PORTS               NAMES
e54c649339a1        adferrand/backuppc   "/entrypoint.sh /run…"   11 minutes ago      Exited (0) 3 minutes ago                       backuppc

Vamos a eliminar ese contenedor para poder ejecutarlo nuevamente con alguna configuración extra:

sudo docker container prune

El siguiente paso será ejecutar el contenedor en segundo plano configurando algunas opciones, simplemente he copiado las que vienen por defecto en la documentación del paquete.
Recuerda que si tienes o quieres una configuración distinta, deberás modificar los valores a tus necesidades.

sudo docker run -d \
    --name backuppc \
    --publish 80:8080 \
    --volume /var/docker-data/backuppc/etc:/etc/backuppc \
    --volume /var/docker-data/backuppc/home:/home/backuppc \
    --volume /var/docker-data/backuppc/data:/data/backuppc \
    --env ‘BACKUPPC_UUID=1001’ \
    --env ‘BACKUPPC_GUID=1001’ \
    adferrand/backuppc

Configuración básica de BackupPC

En el navegador, ingresaremos a la URL donde está nuestro servidor http://SERVER_IP_ADDRESS.

Lo primero que haremos será configurar las opciones de transferencia, en este ejemplo realizaremos un backup a otro servidor web que utiliza Linux.

En el menú de la izquierda, ingresamos en Edit Config.

Opciones de transferencia.

Una vez dentro de Edit Config ingresamos a Xfer (transferencia) en el menu superior.
Configuraremos 3 opciones:

  • XferMethod: método de transferencia.
    Utilizaremos rsync.
  • RsyncShareName: ruta que queremos respaldar.
    Puedes utilizar / para respaldar el servidor u ordenador completamente. También puedes seleccionar otras rutas o carpetas que quieras respaldar y no hacerlo a todo.
  • BackupFilesExclude: exclusión de archivos.
    Configuraremos esta opción en nuestro caso ya que haremos un respaldo completo y hay ciertas rutas que no nos interesa respaldar ya que pueden provocar que el respaldo nunca se finalize.
    En primer lugar agregaremos un asterisco * y luego agregaremos dos rutas /sys y /proc.

Por último debemos salvar los cambios con el botón Save.

Opciones de programación.

Una vez dentro de Edit Config ingresamos a Schedule (programación) en el menu superior.

Las opciones por defecto son:

  • Full backup: cada 7 días manteniendo solo la última copia.
  • Incremetal backup: todos los días manteniendo las últimas 6 copias.

Vamos a utilizar las opciones por defecto. Recuerda que si haces cambios debes salvar con el botón Save.
En el caso de que quieras más información, en cada opción puedes hacer click y vas directo a la documentación donde está todo muy bien explicado.

Opciones de notificaciones (Email)

Nuevamente en Edit Config ingresamos a Email en el menu superior.

El cliente SMTP predeterminado que usa BackupPC es msmtp (https://marlam.de/msmtp/msmtp.html). Para el envío de correos voy a usar una cuenta gratuita de Mailgun y así obtener acceso rápidamente a un servidor SMTP.

Dentro de Mailgun simplemente debes hacer una serie de configuraciones para que los correos se envíen desde tu dominio. Una vez tengas el dominio verificado y los registros DNS puestos podrás crear direcciones de email y obtener los datos del servidor SMTP

Volviendo a la parte de Email en BackupPC, vamos a configurar solo dos valores:

  • EMailFromUserName: con la dirección que hemos creado recién, ejemplo [email protected].
  • EMailAdminUserName: con la dirección que queremos recibir las notificaciones.

Luego, debemos configurar el servidor SMTP, para ello hay que entrar en la consola del contenedor y crear/modificar el archivo de configuración. Lo primero que haremos será cambiar al usuario que usa nuestro contenedor, el predeterminado es backuppc.

su backuppc
vi /home/backuppc/.msmtprc
# Set default values for all following accounts.
account default

# Use port 587 for TLS instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# Host name of the SMTP server.
host smtp.mailgun.org

# Envelope-from address
from [email protected] 

# Authentication.
auth on
user [email protected]
password xxxxxxxx

Recuerda modificar los valores que aparecen arriba con tus datos.

Cambia los permisos del archivo de configuración:

chmod 600 .msmtprc

Una vez hayas salvado ese archivo, desde la misma consola del contenedor ejecuta el siguiente comando para lanzar una prueba y verificar que todo esté correcto.

/usr/local/BackupPC/bin/BackupPC_sendEmail -u [email protected]

Sending test email using /usr/sbin/sendmail -t -f [email protected]                         
.es

Si todo es correcto verás algo como lo siguiente y te llegará un correo de prueba a la dirección que hayas elegido antes.

Tu primer backup

Para que nuestro servidor de respaldo pueda realizar las tareas, debemos configurar su acceso a ordenadores o servidores (clientes) mediante SSH.

Esto lo haremos copiando la llave SSH del usuario que ejecutará BackupPC a los clientes que queremos respaldar.

Si vamos a la sección número 3 de este artículo, veremos que al ejecutar el contenedor de BackupPC se crea la llave SSH.

Si prestas atención, la segunda vez que ejecutamos el contenedor en segundo plano, hemos definido algunas opciones, entre ellas rutas y que usuario va a utilizar BackupPC.

El usuario que hemos definido es BACKUPPC_UUID=1001 y BACKUPPC_GUID=1001. Estos datos corresponden al usuario que hemos creado en la sección número 1 de este artículo: demo.

Para saber cual es el UUID y el GUID de tu usuario puedes ejecutar el comando:

id demo

Esto te devolverá:

uid=1001(demo) gid=1001(demo) grupos=1001(demo),10(wheel)

Por lo tanto podemos decir que nuestro usuario demo será quien este usando BackupPC y al que se le ha creado la llave SSH.

Copiar llave SSH

Siguiendo el ejemplo, nuestra llave SSH estaría ubicada dentro de uno de los directorios o rutas que hemos definido al ejecutar por segunda vez el contenedor. Precisamente en /var/docker-data/backuppc/home/.ssh/id_rsa.

Si volvemos a nuestra consola del servidor de respaldo ejecutaremos el siguiente comando para copiar la llave SSH a uno de nuestros clientes:

ssh-copy-id -i /var/docker-data/backuppc/home/.ssh/id_rsa root@CLIENT_HOST

Si la operación es correcta, hemos copiado nuestra llave SSH al servidor cliente que queremos respaldar. De esta forma nuestro servidor de respaldo, se comunicaría directamente con el cliente mediante SSH.

Configurar el cliente en BackupPC

Dentro de la interfaz gráfica de BackupPC, haremos click en la opción Edit Hosts del menú lateral. Luego haremos click en Add para añadir un nuevo host (o cliente).

En el campo Host, indicaremos el IP del cliente y en el campo User, ingresaremos nuestro usuario demo.

Recuerda hacer click en Save al finalizar.

Hacer un respaldo manual

Una vez hemos configurado nuestro host (cliente) vamos a iniciar el primer respaldo manual. Para ello, luego de salvar el host, vamos a recargar la interfaz gráfica. Veremos que aparece por arriba del menu lateral una nuevo campo desplegable y un título Hosts.

Vamos a desplegar el campo y le damos click a nuestro cliente (por el momento es el único que tenemos). Una vez estemos dentro del host, le haremos click al botón Start Full Backup.

Esto comenzará nuestro primer respaldo. Si hay algún tipo de error lo podremos ver en el menú izquierdo, bajo LOG file o LOG files.

Conclusión

Hemos creado un VPS en DigitalOcean con CentOS 7, realizamos la configuración inicial del mismo y hemos instalado Docker en el que será nuestro servidor centralizado de respaldo.

A su vez hemos instalado BackupPC desde el paquete adferrand/backuppc para Docker.

Por último hemos configurado el acceso a un cliente mediante SSH y creado nuestro primer respaldo con BackupPC.

Si te he ayudado, comparte ayudando a otros! 🤓

HAGAMOS DESPEGAR TU NEGOCIO ONLINE 🚀

Te ayudo a potenciar tu página web o tienda online con estos servicios.

DESARROLLO WEB

MANTENIMIENTO WEB

CONSULTORÍA WEB

OPTIMIZACIÓN WPO

DESINFECCIONES

SOPORTE WEB

Publicaciones Similares

Deja una respuesta

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

Responsable: charrua.es. Finalidad: Poder contestar tu solicitud. Almacenamiento de los datos: Los datos son almacenados en un servidor alojado dentro de la UE y gestionado por charrua.es. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.