120 lines
3.3 KiB
Bash
Executable File
120 lines
3.3 KiB
Bash
Executable File
#!/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 ."
|