Files
element_matrix_chat/scripts/backup.sh
T
2025-11-08 22:27:01 +01:00

104 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Script de backup para Matrix + Element
set -e
# Colores
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Configuración
BACKUP_DIR="./backups"
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_NAME="matrix_backup_$DATE"
echo -e "${BLUE}💾 Iniciando backup de Matrix...${NC}"
# Crear directorio de backup
mkdir -p "$BACKUP_DIR"
echo -e "${BLUE}📁 Creando directorio de backup: $BACKUP_NAME${NC}"
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"
# Backup de configuraciones
echo -e "${BLUE}⚙️ Respaldando configuraciones...${NC}"
cp docker-compose.yml "$BACKUP_DIR/$BACKUP_NAME/"
cp element-config.json "$BACKUP_DIR/$BACKUP_NAME/"
cp -r configs "$BACKUP_DIR/$BACKUP_NAME/" 2>/dev/null || true
# Backup de base de datos PostgreSQL
echo -e "${BLUE}🗄️ Respaldando base de datos...${NC}"
if docker ps | grep -q element_matrix_chat-postgres-1; then
docker exec element_matrix_chat-postgres-1 pg_dump -U synapse synapse > "$BACKUP_DIR/$BACKUP_NAME/database.sql"
echo -e "${GREEN}✅ Base de datos respaldada${NC}"
else
echo -e "${YELLOW}⚠️ PostgreSQL no está ejecutándose, saltando backup de BD${NC}"
fi
# Backup de datos de Synapse (excluyendo media store por tamaño)
echo -e "${BLUE}📋 Respaldando configuración de Synapse...${NC}"
if [ -d synapse3 ]; then
mkdir -p "$BACKUP_DIR/$BACKUP_NAME/synapse_config"
cp synapse3/homeserver.yaml "$BACKUP_DIR/$BACKUP_NAME/synapse_config/" 2>/dev/null || true
cp synapse3/localhost.log.config "$BACKUP_DIR/$BACKUP_NAME/synapse_config/" 2>/dev/null || true
cp synapse3/localhost.signing.key "$BACKUP_DIR/$BACKUP_NAME/synapse_config/" 2>/dev/null || true
cp -r synapse3/appservices "$BACKUP_DIR/$BACKUP_NAME/synapse_config/" 2>/dev/null || true
echo -e "${GREEN}✅ Configuración de Synapse respaldada${NC}"
fi
# Crear archivo de información del backup
echo -e "${BLUE}📄 Creando archivo de información...${NC}"
cat > "$BACKUP_DIR/$BACKUP_NAME/backup_info.txt" << EOF
Matrix + Element Backup
======================
Fecha: $(date)
Versión Docker Compose: $(docker-compose --version)
Contenedores activos:
$(docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}")
Archivos incluidos:
- docker-compose.yml
- element-config.json
- synapse_config/ (homeserver.yaml, claves, etc.)
- database.sql (dump de PostgreSQL)
NO incluidos (por tamaño):
- media_store/
- postgresdata/
Para restaurar:
1. Restaurar archivos de configuración
2. docker-compose up -d postgres
3. docker exec -i element_matrix_chat-postgres-1 psql -U synapse synapse < database.sql
4. docker-compose up -d
EOF
# Comprimir backup
echo -e "${BLUE}🗜️ Comprimiendo backup...${NC}"
cd "$BACKUP_DIR"
tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME"
rm -rf "$BACKUP_NAME"
cd ..
# Información final
BACKUP_SIZE=$(du -h "$BACKUP_DIR/${BACKUP_NAME}.tar.gz" | cut -f1)
echo
echo -e "${GREEN}🎉 Backup completado exitosamente${NC}"
echo -e "${BLUE}📍 Información del backup:${NC}"
echo -e " • Archivo: ${GREEN}$BACKUP_DIR/${BACKUP_NAME}.tar.gz${NC}"
echo -e " • Tamaño: ${GREEN}$BACKUP_SIZE${NC}"
echo -e " • Fecha: ${GREEN}$(date)${NC}"
echo
echo -e "${BLUE}💡 Para restaurar:${NC}"
echo -e " tar -xzf $BACKUP_DIR/${BACKUP_NAME}.tar.gz"
echo -e " # Seguir instrucciones en backup_info.txt"
# Limpiar backups antiguos (mantener últimos 5)
echo -e "${BLUE}🧹 Limpiando backups antiguos...${NC}"
cd "$BACKUP_DIR"
ls -t matrix_backup_*.tar.gz | tail -n +6 | xargs rm -f 2>/dev/null || true
REMAINING=$(ls matrix_backup_*.tar.gz 2>/dev/null | wc -l)
echo -e "${GREEN}✅ Manteniendo $REMAINING backups${NC}"