bashscripts/backups/backup_gitea.sh
2026-03-07 00:16:30 +01:00

66 lines
2.2 KiB
Bash

#!/bin/bash
#########################################################
# #
# Script Backup Gitea + còpia remota + retenció dies #
# + email + mida + temps + integritat #
# #
#########################################################
# Assegurar els paths per al cron
PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
# --- CONFIGURACIÓ ---
GITEA_DIR="/opt/gitea"
BACKUP_FILE="gitea-backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz"
REMOTE_SERVER="estudiset.backups"
REMOTE_PATH="/home/debian/backups/studi7/gitea/"
EMAIL="roger@estudiset.cat"
RETENTION_DAYS=7
# Dump gitea
su - gitea -s /bin/bash -c "$GITEA_DIR/gitea dump -c $GITEA_DIR/custom/conf/app.ini --file $GITEA_DIR/$BACKUP_FILE --tempdir $GITEA_DIR/"
# Mida del backup
BACKUP_SIZE=$(du -h "$GITEA_DIR/$BACKUP_FILE" | awk '{print $1}')
# Hash local
LOCAL_HASH=$(sha256sum "$GITEA_DIR/$BACKUP_FILE" | awk '{print $1}')
# --- ENVIAR A SERVIDOR REMOT ---
rsync -AaxzPh --remove-source-files "$GITEA_DIR/$BACKUP_FILE" "$REMOTE_SERVER:$REMOTE_PATH"
if [ $? -ne 0 ]; then
echo "ERROR: No s'ha pogut copiar el backup al servidor remot." | mail -s "[Backup Gitea] ERROR" "$EMAIL"
exit 1
fi
# --- HASH REMOT ---
REMOTE_HASH=$(ssh "$REMOTE_SERVER" "sha256sum ${REMOTE_PATH}/${BACKUP_FILE} 2>/dev/null | awk '{print \$1}'")
if [ "$LOCAL_HASH" = "$REMOTE_HASH" ]; then
INTEGRITY="OK — la còpia és idèntica"
else
INTEGRITY="ERROR — el hash no coincideix!"
fi
# --- RETENCIÓ DE 7 DIES ---
ssh "$REMOTE_SERVER" "find $REMOTE_PATH -type f -mtime +$RETENTION_DAYS -name 'gitea-backup_*.tar.gz' -delete"
# --- EMAIL DE RESULTAT ---
MSG="Backup de Gitea completat correctament.
Servidor remot: $REMOTE_SERVER
Ruta: $REMOTE_PATH
Fitxer: $BACKUP_FILE
Mida: $BACKUP_SIZE
Integritat:
- Hash local: $LOCAL_HASH
- Hash remot: $REMOTE_HASH
- Estat: $INTEGRITY
Retenció: S'han eliminat backups de més de 7 dies."
echo "$MSG" | mail -s "[Backup Gitea] OK" "$EMAIL"
echo "$MSG"