Files
Crumb-Core-v.1/native_crumbcore_v1/native-backup.sh

194 lines
4.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# Crumbforest Backup Script
# Creates backup of application, database, and Qdrant data
#
# Run as root or with sudo
#
set -e
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
# Configuration
INSTALL_DIR="/opt/crumbforest"
BACKUP_BASE="/var/backups/crumbforest"
DB_NAME="crumbforest"
DB_USER="crumb_prod"
QDRANT_STORAGE="/var/lib/qdrant/storage"
# Functions
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_info() {
echo -e "${BLUE}${NC} $1"
}
check_root() {
if [ "$EUID" -ne 0 ]; then
print_error "Bitte als root ausführen oder sudo verwenden"
exit 1
fi
}
echo "============================================"
echo "💾 Crumbforest Backup"
echo "============================================"
echo ""
check_root
# Create backup directory
mkdir -p "$BACKUP_BASE"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$BACKUP_BASE/backup_$TIMESTAMP"
mkdir -p "$BACKUP_DIR"
print_info "Backup Location: $BACKUP_DIR"
echo ""
# Step 1: Backup application files
echo "=== Step 1: Application Files ==="
echo ""
print_info "Sichere Application Code..."
tar -czf "$BACKUP_DIR/app.tar.gz" -C "$INSTALL_DIR" app/ 2>/dev/null
print_success "App gesichert"
print_info "Sichere Dokumentation..."
if [ -d "$INSTALL_DIR/docs" ]; then
tar -czf "$BACKUP_DIR/docs.tar.gz" -C "$INSTALL_DIR" docs/ 2>/dev/null
print_success "Docs gesichert"
fi
print_info "Sichere .env Datei..."
cp "$INSTALL_DIR/.env" "$BACKUP_DIR/env.backup"
chmod 600 "$BACKUP_DIR/env.backup"
print_success ".env gesichert"
echo ""
# Step 2: Backup database
echo "=== Step 2: Database ==="
echo ""
print_info "Sichere MariaDB Datenbank..."
# Read DB password from .env
if [ -f "$INSTALL_DIR/.env" ]; then
source <(grep MARIADB_PASSWORD "$INSTALL_DIR/.env")
if mysqldump -u "$DB_USER" -p"$MARIADB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/database.sql" 2>/dev/null; then
print_success "Datenbank gesichert"
else
print_error "Datenbank-Backup fehlgeschlagen"
print_warning "Möglicherweise falsche Credentials in .env"
fi
else
print_warning ".env nicht gefunden - Datenbank-Backup übersprungen"
fi
echo ""
# Step 3: Backup Qdrant data
echo "=== Step 3: Qdrant Vector Database ==="
echo ""
if [ -d "$QDRANT_STORAGE" ]; then
print_info "Sichere Qdrant Daten..."
tar -czf "$BACKUP_DIR/qdrant.tar.gz" -C "$(dirname $QDRANT_STORAGE)" "$(basename $QDRANT_STORAGE)/" 2>/dev/null
print_success "Qdrant gesichert"
else
print_warning "Qdrant Storage nicht gefunden: $QDRANT_STORAGE"
fi
echo ""
# Step 4: Backup logs (optional, last 7 days)
echo "=== Step 4: Logs (Optional) ==="
echo ""
print_info "Sichere aktuelle Logs..."
if [ -d "/var/log/crumbforest" ]; then
tar -czf "$BACKUP_DIR/logs.tar.gz" -C /var/log crumbforest/ 2>/dev/null
print_success "Logs gesichert"
fi
# systemd logs
print_info "Exportiere systemd Logs..."
journalctl -u crumbforest --since "7 days ago" > "$BACKUP_DIR/systemd.log" 2>/dev/null || true
echo ""
# Step 5: Create combined archive
echo "=== Step 5: Final Archive ==="
echo ""
FINAL_ARCHIVE="$BACKUP_BASE/crumbforest_full_$TIMESTAMP.tar.gz"
print_info "Erstelle finales Archiv..."
tar -czf "$FINAL_ARCHIVE" -C "$BACKUP_BASE" "backup_$TIMESTAMP/"
print_success "Archiv erstellt: $FINAL_ARCHIVE"
# Calculate size
ARCHIVE_SIZE=$(du -h "$FINAL_ARCHIVE" | cut -f1)
print_info "Größe: $ARCHIVE_SIZE"
# Clean up temporary directory
rm -rf "$BACKUP_DIR"
print_success "Temp-Verzeichnis bereinigt"
echo ""
# Step 6: Cleanup old backups (keep last 7)
echo "=== Step 6: Cleanup Old Backups ==="
echo ""
print_info "Lösche alte Backups (behalte letzte 7)..."
cd "$BACKUP_BASE"
ls -t crumbforest_full_*.tar.gz 2>/dev/null | tail -n +8 | xargs rm -f 2>/dev/null || true
REMAINING=$(ls -1 crumbforest_full_*.tar.gz 2>/dev/null | wc -l)
print_success "Anzahl Backups: $REMAINING"
echo ""
# Summary
echo "============================================"
echo "✓ Backup abgeschlossen!"
echo "============================================"
echo ""
echo "Backup Archiv: $FINAL_ARCHIVE"
echo "Größe: $ARCHIVE_SIZE"
echo ""
echo "Inhalt:"
echo " ✓ Application Code"
echo " ✓ Dokumentation"
echo " ✓ .env Konfiguration"
echo " ✓ MariaDB Datenbank"
echo " ✓ Qdrant Vector DB"
echo " ✓ Logs (7 Tage)"
echo ""
echo "Wiederherstellung:"
echo " 1. Archiv extrahieren: tar -xzf $FINAL_ARCHIVE"
echo " 2. Datenbank: mysql -u $DB_USER -p $DB_NAME < database.sql"
echo " 3. Qdrant: tar -xzf qdrant.tar.gz -C /var/lib/"
echo " 4. App: tar -xzf app.tar.gz -C $INSTALL_DIR/"
echo " 5. .env: cp env.backup $INSTALL_DIR/.env"
echo ""
echo "Wuuuuhuuu! 🦉💚"
echo ""