#!/bin/bash # # Crumbforest Update Script # Updates code and dependencies without full reinstallation # # 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" APP_USER="crumbforest" LOG_DIR="/var/log/crumbforest" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # 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 Update" echo "============================================" echo "" check_root # Step 1: Stop service echo "=== Step 1: Stop Service ===" echo "" if systemctl is-active --quiet crumbforest; then print_info "Stoppe crumbforest Service..." systemctl stop crumbforest print_success "Service gestoppt" else print_warning "Service läuft nicht" fi echo "" # Step 2: Backup current installation echo "=== Step 2: Backup ===" echo "" BACKUP_DIR="/var/backups/crumbforest" mkdir -p "$BACKUP_DIR" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/app_backup_$TIMESTAMP.tar.gz" print_info "Erstelle Backup..." tar -czf "$BACKUP_FILE" -C "$INSTALL_DIR" app/ .env 2>/dev/null || true print_success "Backup erstellt: $BACKUP_FILE" echo "" # Step 3: Update code echo "=== Step 3: Update Code ===" echo "" print_info "Kopiere neuen Code..." cp -r "$PROJECT_ROOT/app"/* "$INSTALL_DIR/app/" print_success "Code aktualisiert" print_info "Aktualisiere Konfiguration..." if [ -f "$PROJECT_ROOT/crumbforest_config.json" ]; then cp "$PROJECT_ROOT/crumbforest_config.json" "$INSTALL_DIR/app/" print_success "Config aktualisiert" fi # Update docs if needed if [ -d "$PROJECT_ROOT/docs_git" ]; then print_info "Aktualisiere Dokumentation aus docs_git..." cp -r "$PROJECT_ROOT/docs_git"/* "$INSTALL_DIR/docs/" 2>/dev/null || true print_success "Docs aktualisiert" elif [ -d "$PROJECT_ROOT/docs" ]; then print_info "Aktualisiere Dokumentation aus docs..." cp -r "$PROJECT_ROOT/docs"/* "$INSTALL_DIR/docs/" 2>/dev/null || true print_success "Docs aktualisiert" fi # Update Crumb Doktor if exists if [ -f "$PROJECT_ROOT/crumbpages-doktor.sh" ]; then cp "$PROJECT_ROOT/crumbpages-doktor.sh" "/usr/local/bin/crumb-doktor" chmod +x "/usr/local/bin/crumb-doktor" print_success "Crumb Doktor aktualisiert" fi echo "" # Step 4: Update Python dependencies echo "=== Step 4: Python Dependencies ===" echo "" print_info "Aktualisiere Dependencies..." "$INSTALL_DIR/venv/bin/pip" install --upgrade -r "$PROJECT_ROOT/app/requirements.txt" print_success "Dependencies aktualisiert" echo "" # Step 5: Set permissions echo "=== Step 5: Permissions ===" echo "" print_info "Setze Besitzer..." chown -R "$APP_USER:$APP_USER" "$INSTALL_DIR/app" print_success "Permissions gesetzt" echo "" # Step 6: Database migrations (if needed) echo "=== Step 6: Database Migration ===" echo "" print_warning "Falls Schema-Änderungen vorhanden sind, bitte manuell migrieren!" echo "" # Step 7: Start service echo "=== Step 7: Start Service ===" echo "" print_info "Starte Service..." systemctl start crumbforest sleep 2 if systemctl is-active --quiet crumbforest; then print_success "Service läuft" else print_error "Service konnte nicht gestartet werden!" print_error "Prüfe Logs: journalctl -u crumbforest -n 50" exit 1 fi echo "" # Step 8: Health check echo "=== Step 8: Health Check ===" echo "" sleep 3 if curl -s http://localhost:8000/health | grep -q "ok"; then print_success "Health Check OK" else print_warning "Health Check fehlgeschlagen - prüfe Logs" fi echo "" # Summary echo "============================================" echo "✓ Update abgeschlossen!" echo "============================================" echo "" echo "Backup: $BACKUP_FILE" echo "" echo "Status prüfen:" echo " sudo systemctl status crumbforest" echo " sudo journalctl -u crumbforest -f" echo "" echo "Health Check:" echo " curl http://localhost:8000/health" echo "" echo "Wuuuuhuuu! 🦉💚" echo ""