67 lines
2.7 KiB
Bash
Executable File
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"
|