Files
recipe-app/backup_recipe_app.sh
T
2026-04-09 09:14:39 +02:00

67 lines
2.7 KiB
Bash
Executable File

#!/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"