Enviar mensaje de notificación a Telegram cuando realiza copias de seguridad.
Este git sirve para realizar copias de seguridad de nuestros contenedores de docker o de cualquier carpeta/archivos.
Para poder recibir los mensajes en el Telegram, debes obtener el Token y chat_id de tu bot de telegram, puedes solicitarlos aquí desde la App de Telegram:
- Bot token: https://t.me/botfather
- Chat_ID: https://t.me/myidbot
Empezamos a instalar el bot de inicio. Para que funcione necesita permisos, por lo que instalar en el usuario ROOT:
INSTALAR LOS PAQUETES Y ACTUALIZAR EL SISTEMA.
sudo apt update
sudo apt upgrade -y
sudo apt curl -y
Si no estamos en usuario root, usamos sudo
delante.
COPIA DE SGURIDAD DE ARCHIVOS.
Para realizar una copia de seguridad de archivos utilizaremos la opción TAR
de linux. tar
es un programa de archivo diseñado para almacenar múltiples archivos en un único fichero (un archivo), y para manipular dichos archivos.
Todas las variables siguentes puedes consultarlas en la página man de linux página man tar.
ALGUNAS VARIABLES:
Modo de operación
- c --> indica que estamos creando un empaquetado tar.
- v --> indica que se trabaje en modo verbose, o lo que es lo mismo, que tar mostrará qué está haciendo en pantalla.
- z --> comprime el fichero backup con gzip para hacerlo más pequeño
- f /fichero --> precede al nombre del fichero /fichero donde vamos a guardar el backup.
- P --> para preservar el path absoluto del recurso guardado.
- x --> Extrae, y descomprime si se da el caso, los directirios y archivos que se encuentren dentro del fichero.tar específico
- t --> Listar el contenido de un archivo. Cuando se dan, especifican los nombres de los miembros a listar.
Modificadores de la operación
- -G, --incremental
- -g, --listed-incremental=FILE --> Handle new GNU-format incremental backups.
- -T --> nos permite incluir un fichero en el que especificar una lista de directorios de los que hacer backup.
- -X --> Exluye archivos o carpetas a realizar backup.
Preparación archivos
Para ello lo primero que hacemos es crear una carpeta donde se almacenara la copia, la llamaremos backup. También podemos montar un disco externo y montar ahí la carpeta.
mkdir /backup
Si has elegido la variable -T
:
La opción -T de tar nos permite incluir un fichero en el que especificar una lista de directorios de los que hacer backup. Pongamos por ejemplo que tengo un fichero llamado lista-backup.txt en el que incluyo dicha lista con los directorios del sistema que quiero guardar. La inclusión es recursiva, por lo que se tienen en cuenta los subdirectorios por debajo de los que especificamos:
[root@$(user)-pc ~]# cat lista-backup.txt /root /home/$(user)/Documents /home/$(user)/Pictures /home/$(user)/scripts /etc /var/log /var/spool /var/mail |
tar zPpcf backup-sistema.tar.gz -T lista-backup.txt |
COPIA DE SGURIDAD DE ARCHIVOS.
Una vez preparados los archivos con sus variables, podemos escoger que tipo de copia.
- Copia de contenedores docker: docker.
- Copia de contenedores docker o archivos y enviarlos a otro equipo/disco duro: backup send.
- Copia del sistema: system.
Cuando se introducen las variables a ejecutar, si no estamos en usuario root, usamos sudo
delante de los comandos.
Todos los scripts tienen una línea con find que nos permite borrar copias de X
tiempo.
Edita el script backup.sh, para añadir tu token de bot, y tu chat_id
Este script realiza el backup y lo envía a otra carpeta. Descargar el script script backup.sh Y modicamos lo siguiente:
- Cambiar el
TOKEN_BOT
de tu bot de telegram. - Cambiar el
TOKEN_ID
de tu chat bot de telegram. - Cambiar las variables del script de las rutas de origen y destino, ejemplo de tar: tar -cvzf
/destino/
nombre.tar.gz/origen
Edita el script backupother.sh, para añadir tu token de bot, y tu chat_id
Este script realiza el backup y lo envía a otra máquina. Utilizaremos SPC, la conexión está cifrada. Descargar el script script backupother.sh Y modicamos lo siguiente:
- Cambiar el
TOKEN_BOT
de tu bot de telegram. - Cambiar el
TOKEN_ID
de tu chat bot de telegram. - Cambiar las variables del script de las rutas de origen y destino, ejemplo de tar: tar -cvzf
/destino/
nombre.tar.gz/origen
Edita el script backupsystem.sh, para añadir tu token de bot, y tu chat_id
Este script realiza el backup y lo envía a otra carpeta. Descargar el script script backupsystem.sh Y modicamos lo siguiente:
- Cambiar el
TOKEN_BOT
de tu bot de telegram. - Cambiar el
TOKEN_ID
de tu chat bot de telegram. - Cambiar las variables del script de las rutas de origen y destino, ejemplo de tar: tar -cvzf
/destino/
nombre.tar.gz/origen
Asigna los permisos a+x
Cambiar el .sh
y la ruta donde esté el archivo.
chmod a+x /root/scripts/backup.sh
Si no estamos en usuario root, usamos sudo
delante.
Agregamos al cron las siguientes lineas para que se ejecuten
Abrimos el cron
crontab -e
Y añadimos las líneas, el cron los ejecutará cada día que hayamos elegido.
00 23 1,15 * * /root/scripts/backup.sh
Ejemplos
Tiempo | Comando | Description |
---|---|---|
Cada 15 de mes | 00 23 15 * * /root/scripts/backup.sh | Cada 15 de mes a las 23h |
Cada 1 y 15 de mes | 00 23 1,15 * * /root/scripts/backup.sh | Cada 1 y 15 de mes a las 23h |
Cada Lunes a las 7 de la mañana | 0 19 * * mon /root/scripts/backup.sh | - |
En los meses seleccionados | * * * feb,jun,oct * /root/scripts/backup.sh | - |
Diariamente | @daily /root/scripts/backup.sh | Todos los días a las 12 de la noche: 0 0 * * * |
Cada semana | @weekly /root/scripts/backup.sh | Ejecutar una vez a la semana: 0 0 * * 0 |
Cada mes | @monthly /root/scripts/backup.sh | Ejecutar una vez al mes: 0 0 1 * * |
Y reinciamos el cron:
service cron restart
El funcionamiento es sencillo, cada día 1 y 15 de cada mes, se realizará una copia de seguridad.
Restaurar backup
Si queremos recuperar el backup de la config, desempaquetamos el .tar.gz del volumen en el directorio del contenedor, antes de desplegar la imagen.
Primero nos situamos en la carpeta del backup a recuperar y desempaquetamos eltar.gz
en el destino a recuperar. Si los archivos a recuperar es un contenedor docker, una vez recuperado el backup, desplegamos el docker-compose.yml y cuando la despliegas esta todo como estaba antes.
- Para descomprimir un archivo
.tar.gz
.:
tar -xvzf archive.tar.gz
- Para descomprimir un archivo
.tar.gz
en un directorio específico:
tar -xvzf archive.tar.gz -C /home/docker/files
Si no estamos en usuario root, usamos sudo
delante de tar o zip.