Este es uno de esos puntos que siempre se olvidan cuando se va con prisas. Pero un buen plan de rescate en caso de problemas es vital para cualquier sistema informático y nuestro IoT Gateway no es una excepción.
Para ello usaremos la herramienta duplicity, Está aplicación programada en Python usa tar + gzip + gpg para hacer las copias.
Almacenando la información en un servidor de Internet de nuestra propiedad donde instalaremos el servicio rsync.
La comunicación entre el servidor rsync y el IoT Gateway se realizará a través de Zerotier, para tener un canal seguro lejos de miradas indiscretas.
Esquema copias de seguridad online

- Se usa la aplicación duplicity, esta aplicación esta programada en Python y usa tar + gzip + gpg para hacer las copias. Además soporta muchisimos tipos de repositorios de datos diferentes.
- Duplicity soporta varios tipos de repositorios para guardar las copias de seguridad. Nosotros usaremos el repositorio rsync.
Política de retención
- Copias de seguridad copletas cada mes
- Incrementales cada día
- Se mantienen dos copias completas en el repositorio con sus respectivas incrementales
- Los ficheros de la copia son de 100MB
Estrategia de las copias de seguridad
- Se hacen copias de seguridad del sistema completo
- Cada servicio, puede contener, el directorio backup dentro de la estructura /docker-data/SERVICIO/backup
- En la documentación de cada servicio hay las instrucciones de backup del mismo
- El backup completo de máquina, incluye la ejecución de los backup propios por servicio antes de copiar la máquina
# linia del backup que llama a los backup de los servicios que necesitan procedimientos propios find /docker-data/ -name backup.sh -exec {} \; - El repositorio remoto es un servidor rsync que esta accesible des de la red Zerotier, o directamente a través de Internet.
Repositorio de copias de seguridad
- Se asume que ya tenemos instalado y configurado el servicio de VPN entre el gateway y el servidor.
- Lo siguiente será instalar rsync y configurarlo
Instalar servidor rsync
apt install rsyncCrear usuario de sistema que será propietario del directorio donde se guardan las copias de seguridad:
useradd rsyncCreamos fichero de configuración de rsync
/etc/rsyncd.conf
uid = rsync
gid = rsync
pid file = /var/run/rsyncd.pid
read only = false
hosts allow = *
port = 873
# address = a.b.c.d
[backup]
path = PATH_DONDE_GUARDAREMOS_EL_BACKUP
secrets file = /etc/rsyncd.secrets
Creamos el fichero de contraseñas:
/etc/rsyncd.secrets
USUARIO_DEL_GATEWAY:EL_PASSWORD_SIN_CIFRARCambiamos propietario y permisos del fichero de passwords:
chown rsync.rsync /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secretsAñadir servicio rsync en la secuencia de arranque del equipo y lo iniciamos:
systemctl enable rsync
systemctl start rsyncInstalación de rsync en el IoT Gateway
add-apt-repository ppa:duplicity-team/duplicity-release-git
apt install duplicityScripts de backup en el IoT Gateway
Los scripts de backup que usamos estan en este fichero:
Descarga el fichero y lo descoprimes en /opt/backup
mkdir -p /opt/backup
cd /opt/backup
# copia el fichero backup.tar.gz dentro del directorio /opt/backup
tar xvfz backup.tar.gzPrimero hay que configurarlo, modificando /opt/backup/config:
PASSPHRASE="PASSWORD_CIFRADO_BACKUP"
URL="rsync://USUARIO_DEL_GATEWAY:EL_PASSWORD_SIN_CIFRAR@IP_SERVIDOR_BACKUP::PATH_DONDE_GUARDAREMOS_EL_BACKUP"Lo siguiente es ponerlo en crontab:
0 1 * * * /opt/backup/full-backup-online.sh 2>&1 | /usr/bin/tee /var/log/backup-online.log Obtener lista de ficheros copiados
list-online.sh
#!/bin/bash
source config
PASSPHRASE=$PASSPHRASE duplicity collection-status $URL 2>&1Restore
# Restaurar toda la última copia de seguridad en el directorio indicado
PASSPHRASE=clausimetrica duplicity ftp://user:pass@hostname /tmp/restore
# Restarurar solo una carpeta, o fichero
PASSPHRASE=clausimetrica duplicity --file-to-restore nom_fitxer_o_directori_a_recuperar ftp://user:pass@hostname /tmp/restore
# Restarurar la copia de hace 3 días de una carpeta, o un fichero
PASSPHRASE=clausimetrica duplicity -t 3D --file-to-restore nom_fitxer_o_directori_a_recuperar ftp://user:pass@hostname /tmp/restore
