#!/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"