Esta pagina se ve mejor con JavaScript habilitado

Django Backups

 ·  🎃 kr0m

Nuestra aplicación en Django tan solo se compone de una base de datos PostgreSQL, el código de la propia aplicación, algunos ficheros de configuración de Nginx y el script RC de Daphne. En este artículo programaremos un pequeño script con el que realizaremos los backups de las partes anteriormente comentadas.

Antes de comenzar es recomendable leer los artículos anteriores sobre Django ya que son los pasos previos a este artículo:


En mi caso se trata de una Jail bajo Iocage , por lo tanto voy a poner a su disposición el directorio donde realizar los backups editando el fstab de la Jail en cuestión.

Ejecutamos en el host padre:

mkdir /storage/backups/rxWod
iocage console rxWod
mkdir -p /storage/backups/rxWod
exit
iocage fstab -a rxWod “/storage/backups/rxWod /storage/backups/rxWod nullfs rw 0 0”

Ahora ya podemos proceder con el script de backup:

vi .scripts/backup.sh

#! /usr/local/bin/bash

DATE=$(date +%d_%m_%Y)
SHORT_HOSTNAME=$(hostname -s)
BACKUPSDIR="/storage/backups/$SHORT_HOSTNAME/BACKUP"

rm -rf $BACKUPSDIR 2>/dev/null
mkdir -p $BACKUPSDIR

# -- Common data --
cp -rp /root/.scripts/ $BACKUPSDIR/scripts
crontab -l > $BACKUPSDIR/crontab
cp /etc/hosts $BACKUPSDIR/hosts
cp /etc/rc.conf $BACKUPSDIR/rc.conf
# -----------------

# -- Custom data --
cd /home/kr0m/rxWod/
tar czf rxWodProject.tar.gz --exclude=rxWodProject/node_modules rxWodProject
mv rxWodProject.tar.gz $BACKUPSDIR/

pg_dump -U postgres rxwod > $BACKUPSDIR/rxwod.psql

cp /usr/local/etc/nginx/nginx.conf $BACKUPSDIR/
cp /usr/local/etc/nginx/rxwod.conf $BACKUPSDIR/
cp /usr/local/etc/rc.d/daphne $BACKUPSDIR/usr_local_etc_rc.d_daphne
# ------------------

DIRNAME=$(dirname $BACKUPSDIR)
cd $DIRNAME
tar czf backup_"$DATE".tar.gz BACKUP
chmod 600 backup_"$DATE".tar.gz

# Sleep 5s to let disk sync data and get correct backup size
sleep 5
BACKUPSIZE=$(du backup_"$DATE".tar.gz|awk '{print$1}')
BACKUPSIZEHUMAN=$(du -h backup_"$DATE".tar.gz|awk '{print$1}')
# 574276 -> 575 MB
if [ $BACKUPSIZE -lt 574276 ]; then
	python3.7 /root/.scripts/tg.py "$SHORT_HOSTNAME: Abnormal backup size -> /storage/backups/$SHORT_HOSTNAME/backup_$DATE.tar.gz $BACKUPSIZEHUMAN"
else
	python3.7 /root/.scripts/tg.py "$SHORT_HOSTNAME: Backup successfully -> /storage/backups/$SHORT_HOSTNAME/backup_$DATE.tar.gz $BACKUPSIZEHUMAN"
fi

rm -rf BACKUP

NOTA: Como podemos ver el script emplea un segungo script en Python para enviar avisos en caso de que el backup resulte de un tamaño mas pequeño de lo normal, dicho script se basa en este artículo anterior .

Le asignamos los permisos necesarios:

chmod 700 .scripts/backup.sh

Ya podemos ejecutar el script:

.scripts/backup.sh

Podemos ver el fichero en el directorio correcto:

ls -la /storage/backups/rxWod/backup_27_03_2021.tar.gz

-rw-------  1 root  wheel  230827 Mar 27 19:43 /storage/backups/rxWod/backup_27_03_2021.tar.gz

Ahora tan solo queda crontabearlo para que se ejecute diariamente:

crontab -e

00 00 * * * /root/.scripts/backup.sh >/dev/null 2>&1
Si te ha gustado el artículo puedes invitarme a un RedBull aquí