104 lines
3.6 KiB
Bash
Executable File
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}" |