#!/bin/bash # Konfiguration PROJECT_DIR="/opt/containers/recipe-app" BACKUP_DIR="/media/share1/backups" # Ändra till önskad backup-plats DATE=$(date +"%Y%m%d_%H%M%S") BACKUP_NAME="recipe_app_backup_$DATE" # Skapa backup-mapp om den inte finns mkdir -p "$BACKUP_DIR/$BACKUP_NAME" # Säkerhetskopiera compose.yml (om den finns) if [ -f "$PROJECT_DIR/compose.yml" ]; then echo "Säkerhetskopierar compose.yml..." cp "$PROJECT_DIR/compose.yml" "$BACKUP_DIR/$BACKUP_NAME/compose.yml.backup" else echo "Varning: compose.yml hittades inte i $PROJECT_DIR" fi # Säkerhetskopiera projektmappen (exkludera onödiga mappar) echo "Säkerhetskopierar projektmappen (exkluderar node_modules, .next, dist, uploads, db)..." rsync -a \ --exclude='node_modules' \ --exclude='.next' \ --exclude='dist' \ --exclude='uploads' \ --exclude='db' \ "$PROJECT_DIR/" "$BACKUP_DIR/$BACKUP_NAME/recipe-app/" # Säkerhetskopiera Docker-images echo "Säkerhetskopierar Docker-images..." docker save -o "$BACKUP_DIR/$BACKUP_NAME/recipe_frontend_backup.tar" recipe-frontend:local || echo "Kunde inte säkerhetskopiera recipe-frontend:local" docker save -o "$BACKUP_DIR/$BACKUP_NAME/recipe_api_backup.tar" recipe-api:local || echo "Kunde inte säkerhetskopiera recipe-api:local" # Säkerhetskopiera körande containrar echo "Säkerhetskopierar körande containrar..." FRONTEND_CONTAINER_ID=$(docker ps -aqf "name=recipe-app-frontend") API_CONTAINER_ID=$(docker ps -aqf "name=recipe-app-recipe-api") if [ ! -z "$FRONTEND_CONTAINER_ID" ]; then docker commit "$FRONTEND_CONTAINER_ID" recipe-frontend-container-backup docker save -o "$BACKUP_DIR/$BACKUP_NAME/recipe_frontend_container_backup.tar" recipe-frontend-container-backup docker rmi recipe-frontend-container-backup fi if [ ! -z "$API_CONTAINER_ID" ]; then docker commit "$API_CONTAINER_ID" recipe-api-container-backup docker save -o "$BACKUP_DIR/$BACKUP_NAME/recipe_api_container_backup.tar" recipe-api-container-backup docker rmi recipe-api-container-backup fi # Säkerhetskopiera Docker-volymer echo "Säkerhetskopierar Docker-volymer..." docker run --rm -v recipe-db-data:/volume -v "$BACKUP_DIR/$BACKUP_NAME":/backup alpine tar cvf /backup/recipe_db_data_backup.tar /volume # Komprimera backup-mappen i delar echo "Komprimerar backup i delar..." cd "$BACKUP_DIR" tar -czvf "$BACKUP_NAME-part1.tar.gz" -C "$BACKUP_NAME" compose.yml.backup recipe_db_data_backup.tar 2>/dev/null tar -czvf "$BACKUP_NAME-part2.tar.gz" -C "$BACKUP_NAME" recipe_app 2>/dev/null tar -czvf "$BACKUP_NAME-part3.tar.gz" -C "$BACKUP_NAME" *.tar 2>/dev/null # Rensa temporära filer rm -rf "$BACKUP_DIR/$BACKUP_NAME" echo "Backup klar! Filerna sparades i $BACKUP_DIR/ som $BACKUP_NAME-part*.tar.gz"