Initial commit: EifelDC - Discord-like Matrix chat platform
Some checks failed
CI / Rust Check (push) Has been cancelled
CI / Rust Tests (push) Has been cancelled
CI / Frontend Check (push) Has been cancelled
CI / Build Tauri (macOS) (push) Has been cancelled
CI / Build Tauri (macOS Intel) (push) Has been cancelled
CI / Build Tauri (Linux) (push) Has been cancelled
Some checks failed
CI / Rust Check (push) Has been cancelled
CI / Rust Tests (push) Has been cancelled
CI / Frontend Check (push) Has been cancelled
CI / Build Tauri (macOS) (push) Has been cancelled
CI / Build Tauri (macOS Intel) (push) Has been cancelled
CI / Build Tauri (Linux) (push) Has been cancelled
Includes server (Rust/Axum API proxy with voice management), Tauri desktop client with Svelte UI, bot-sdk, Docker infra (Synapse, PostgreSQL, Coturn, Nginx), and CI/CD pipeline.
This commit is contained in:
59
infra/scripts/backup.sh
Executable file
59
infra/scripts/backup.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
INFRA_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
BACKUP_DIR="${INFRA_DIR}/backups"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_PATH="${BACKUP_DIR}/${TIMESTAMP}"
|
||||
|
||||
mkdir -p "${BACKUP_PATH}"
|
||||
|
||||
echo "=== EifelDC Backup ==="
|
||||
echo "Backup directory: ${BACKUP_PATH}"
|
||||
echo ""
|
||||
|
||||
if command -v docker &>/dev/null && docker compose -f "${INFRA_DIR}/docker-compose.yml" ps &>/dev/null 2>&1; then
|
||||
echo "[Docker Mode]"
|
||||
|
||||
echo "[1/4] Backing up PostgreSQL..."
|
||||
docker compose -f "${INFRA_DIR}/docker-compose.yml" exec -T postgres \
|
||||
pg_dump -U synapse synapse > "${BACKUP_PATH}/synapse_db.sql"
|
||||
|
||||
echo "[2/4] Backing up Synapse media..."
|
||||
docker cp eifeldc-synapse:/data/media_store "${BACKUP_PATH}/media_store" 2>/dev/null || true
|
||||
|
||||
echo "[3/4] Backing up Synapse config..."
|
||||
docker cp eifeldc-synapse:/data/homeserver.yaml "${BACKUP_PATH}/homeserver.yaml" 2>/dev/null || true
|
||||
docker cp eifeldc-synapse:/data/signing.key "${BACKUP_PATH}/signing.key" 2>/dev/null || true
|
||||
|
||||
echo "[4/4] Backing up environment config..."
|
||||
cp "${INFRA_DIR}/.env" "${BACKUP_PATH}/.env" 2>/dev/null || true
|
||||
else
|
||||
echo "[Native Mode]"
|
||||
|
||||
echo "[1/3] Backing up PostgreSQL..."
|
||||
sudo -u postgres pg_dump synapse > "${BACKUP_PATH}/synapse_db.sql" 2>/dev/null || echo "Warning: Could not dump database"
|
||||
|
||||
echo "[2/3] Backing up Synapse data..."
|
||||
SYNAPSE_DIR="${SYNAPSE_DIR:-/opt/eifeldc/synapse-data}"
|
||||
cp -r "${SYNAPSE_DIR}/homeserver.yaml" "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
cp -r "${SYNAPSE_DIR}/signing.key" "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
cp -r "${SYNAPSE_DIR}/media_store" "${BACKUP_PATH}/" 2>/dev/null || true
|
||||
|
||||
echo "[3/3] Backing up environment config..."
|
||||
cp "${INFRA_DIR}/.env" "${BACKUP_PATH}/.env" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
COMPRESSED="${BACKUP_DIR}/eifeldc_backup_${TIMESTAMP}.tar.gz"
|
||||
tar -czf "${COMPRESSED}" -C "${BACKUP_DIR}" "${TIMESTAMP}"
|
||||
rm -rf "${BACKUP_PATH}"
|
||||
|
||||
echo ""
|
||||
echo "Backup saved: ${COMPRESSED}"
|
||||
echo ""
|
||||
|
||||
KEEP_COUNT=7
|
||||
ls -t "${BACKUP_DIR}"/eifeldc_backup_*.tar.gz 2>/dev/null | tail -n +$((KEEP_COUNT + 1)) | xargs -r rm --
|
||||
echo "Old backups cleaned (keeping latest ${KEEP_COUNT})"
|
||||
echo "Done!"
|
||||
Reference in New Issue
Block a user