Sanitized mirror from private repository - 2026-04-20 01:32:01 UTC
This commit is contained in:
119
docs/services/matrix/backup-matrix.sh
Executable file
119
docs/services/matrix/backup-matrix.sh
Executable file
@@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# Matrix Synapse Backup Script
|
||||
# Creates a complete backup for migration
|
||||
# =============================================================================
|
||||
# Run as root
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="${BACKUP_DIR:-/opt/synapse/backups}"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="matrix_backup_${TIMESTAMP}"
|
||||
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
|
||||
echo "=========================================="
|
||||
echo "Matrix Synapse Backup Script"
|
||||
echo "Backup location: ${BACKUP_PATH}"
|
||||
echo "=========================================="
|
||||
|
||||
mkdir -p "${BACKUP_PATH}"
|
||||
|
||||
# 1. Backup PostgreSQL
|
||||
echo "[1/5] Backing up PostgreSQL database..."
|
||||
sudo -u postgres pg_dump -Fc synapse > "${BACKUP_PATH}/synapse.dump"
|
||||
echo " Database: $(du -h ${BACKUP_PATH}/synapse.dump | cut -f1)"
|
||||
|
||||
# 2. Backup Synapse config and keys
|
||||
echo "[2/5] Backing up configuration..."
|
||||
cp /opt/synapse/homeserver.yaml "${BACKUP_PATH}/"
|
||||
cp /opt/synapse/*.signing.key "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
cp /opt/synapse/*.log.config "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
cp /root/.matrix_secrets "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
|
||||
# 3. Backup media
|
||||
echo "[3/5] Backing up media files (this may take a while)..."
|
||||
if [ -d /opt/synapse/media_store ]; then
|
||||
tar -czf "${BACKUP_PATH}/media_store.tar.gz" -C /opt/synapse media_store
|
||||
echo " Media: $(du -h ${BACKUP_PATH}/media_store.tar.gz | cut -f1)"
|
||||
else
|
||||
echo " No media directory found"
|
||||
fi
|
||||
|
||||
# 4. Backup Element config
|
||||
echo "[4/5] Backing up Element config..."
|
||||
cp /opt/element/web/config.json "${BACKUP_PATH}/element_config.json" 2>/dev/null || true
|
||||
|
||||
# 5. Backup TURN config
|
||||
echo "[5/5] Backing up TURN config..."
|
||||
cp /etc/turnserver.conf "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
|
||||
# Create restore instructions
|
||||
cat > "${BACKUP_PATH}/RESTORE.md" << 'RESTORE'
|
||||
# Matrix Restore Instructions
|
||||
|
||||
## On the new server:
|
||||
|
||||
1. Run the install script first (it will create a fresh install)
|
||||
|
||||
2. Stop services:
|
||||
```
|
||||
systemctl stop synapse nginx coturn
|
||||
```
|
||||
|
||||
3. Restore database:
|
||||
```
|
||||
sudo -u postgres dropdb synapse
|
||||
sudo -u postgres createdb -O synapse -E UTF8 -l C -T template0 synapse
|
||||
sudo -u postgres pg_restore -d synapse synapse.dump
|
||||
```
|
||||
|
||||
4. Restore config files:
|
||||
```
|
||||
cp homeserver.yaml /opt/synapse/
|
||||
cp *.signing.key /opt/synapse/
|
||||
cp *.log.config /opt/synapse/
|
||||
chown -R synapse:synapse /opt/synapse
|
||||
```
|
||||
|
||||
5. Restore media:
|
||||
```
|
||||
cd /opt/synapse
|
||||
tar -xzf /path/to/backup/media_store.tar.gz
|
||||
chown -R synapse:synapse media_store
|
||||
```
|
||||
|
||||
6. Restore TURN config:
|
||||
```
|
||||
cp turnserver.conf /etc/turnserver.conf
|
||||
```
|
||||
|
||||
7. Restore Element config:
|
||||
```
|
||||
cp element_config.json /opt/element/web/config.json
|
||||
```
|
||||
|
||||
8. Start services:
|
||||
```
|
||||
systemctl start coturn nginx synapse
|
||||
```
|
||||
RESTORE
|
||||
|
||||
# Create archive
|
||||
echo ""
|
||||
echo "Creating final archive..."
|
||||
cd "${BACKUP_DIR}"
|
||||
tar -czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}"
|
||||
rm -rf "${BACKUP_NAME}"
|
||||
|
||||
FINAL_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" | cut -f1)
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ Backup Complete!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Backup file: ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
|
||||
echo "Size: ${FINAL_SIZE}"
|
||||
echo ""
|
||||
echo "Download: scp root@server:${BACKUP_DIR}/${BACKUP_NAME}.tar.gz ."
|
||||
Reference in New Issue
Block a user