mirror of
https://github.com/acedanger/shell.git
synced 2025-12-06 05:40:11 -08:00
- backup-env-files.sh: Main backup script with Gitea integration - validate-env-backups.sh: Validation and integrity checking - env-backup-integration.sh: Integration with existing backup system - completions/env-backup-completion.bash: Tab completion support - docs/env-backup-system.md: Documentation for the backup system These scripts provide secure backup of .env files to private Gitea repository.
182 lines
6.2 KiB
Bash
Executable File
182 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# env-backup-integration.sh - Integration script for adding .env backup to existing backup system
|
|
# Author: Shell Repository
|
|
# Description: Add .env backup functionality to existing backup scripts
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[0;33m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
echo -e "${BLUE}=== Environment Files Backup Integration ===${NC}"
|
|
|
|
# Function to add .env backup to a script
|
|
integrate_env_backup() {
|
|
local target_script="$1"
|
|
local integration_point="$2"
|
|
|
|
if [ ! -f "$target_script" ]; then
|
|
echo -e "${YELLOW}Target script not found: $target_script${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# Check if already integrated
|
|
if grep -q "backup-env-files.sh" "$target_script"; then
|
|
echo -e "${GREEN}✓ Already integrated with $target_script${NC}"
|
|
return 0
|
|
fi
|
|
|
|
echo -e "${YELLOW}Integrating with $target_script...${NC}"
|
|
|
|
# Create backup of original script
|
|
cp "$target_script" "$target_script.backup"
|
|
|
|
# Integration code
|
|
local integration_code="
|
|
# === Environment Files Backup Integration ===
|
|
echo -e \"\${YELLOW}Backing up environment files...\${NC}\"
|
|
if [ -f \"\$SCRIPT_DIR/backup-env-files.sh\" ]; then
|
|
if \"\$SCRIPT_DIR/backup-env-files.sh\"; then
|
|
echo -e \"\${GREEN}✓ Environment files backed up successfully\${NC}\"
|
|
else
|
|
echo -e \"\${YELLOW}Warning: Environment files backup had issues\${NC}\"
|
|
fi
|
|
else
|
|
echo -e \"\${YELLOW}Warning: backup-env-files.sh not found\${NC}\"
|
|
fi
|
|
|
|
# Validate the backup
|
|
if [ -f \"\$SCRIPT_DIR/validate-env-backups.sh\" ]; then
|
|
if \"\$SCRIPT_DIR/validate-env-backups.sh\" --summary-only; then
|
|
echo -e \"\${GREEN}✓ Environment backup validation passed\${NC}\"
|
|
else
|
|
echo -e \"\${YELLOW}Warning: Environment backup validation failed\${NC}\"
|
|
fi
|
|
fi
|
|
echo \"\"
|
|
# === End Environment Files Backup Integration ===
|
|
"
|
|
|
|
# Add integration based on integration point
|
|
case "$integration_point" in
|
|
"after_docker")
|
|
# Add after Docker backup section
|
|
if grep -q "docker" "$target_script" || grep -q "backup.*docker" "$target_script"; then
|
|
# Find a good insertion point after docker backup
|
|
local line_num=$(grep -n -i "docker.*backup\|backup.*docker" "$target_script" | tail -1 | cut -d: -f1)
|
|
if [ -n "$line_num" ]; then
|
|
sed -i "${line_num}a\\${integration_code}" "$target_script"
|
|
echo -e "${GREEN}✓ Integrated after Docker backup section${NC}"
|
|
else
|
|
echo -e "${YELLOW}Could not find Docker backup section, adding at end${NC}"
|
|
echo "$integration_code" >> "$target_script"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}No Docker backup section found, adding at end${NC}"
|
|
echo "$integration_code" >> "$target_script"
|
|
fi
|
|
;;
|
|
"before_end")
|
|
# Add before the end of the script
|
|
local last_line=$(wc -l < "$target_script")
|
|
sed -i "${last_line}i\\${integration_code}" "$target_script"
|
|
echo -e "${GREEN}✓ Integrated before end of script${NC}"
|
|
;;
|
|
"manual")
|
|
echo -e "${BLUE}Manual integration code:${NC}"
|
|
echo "$integration_code"
|
|
echo -e "${YELLOW}Please add this code manually to your script at the appropriate location${NC}"
|
|
;;
|
|
*)
|
|
echo -e "${YELLOW}Unknown integration point, adding at end${NC}"
|
|
echo "$integration_code" >> "$target_script"
|
|
;;
|
|
esac
|
|
|
|
echo -e "${GREEN}Integration completed. Backup saved as $target_script.backup${NC}"
|
|
}
|
|
|
|
# Find and integrate with existing backup scripts
|
|
echo -e "${YELLOW}Scanning for backup scripts to integrate with...${NC}"
|
|
|
|
# Common backup script patterns
|
|
declare -a backup_scripts=(
|
|
"$SCRIPT_DIR/backup-docker.sh"
|
|
"$SCRIPT_DIR/backup-media.sh"
|
|
"$SCRIPT_DIR/update.sh"
|
|
"$SCRIPT_DIR/backup.sh"
|
|
"$SCRIPT_DIR/daily-backup.sh"
|
|
)
|
|
|
|
found_scripts=()
|
|
|
|
for script in "${backup_scripts[@]}"; do
|
|
if [ -f "$script" ]; then
|
|
found_scripts+=("$script")
|
|
echo -e "${GREEN}Found: $(basename "$script")${NC}"
|
|
fi
|
|
done
|
|
|
|
if [ ${#found_scripts[@]} -eq 0 ]; then
|
|
echo -e "${YELLOW}No backup scripts found to integrate with${NC}"
|
|
echo -e "${BLUE}You can manually add the .env backup to your backup routine:${NC}"
|
|
echo ""
|
|
echo "# Add to your backup script:"
|
|
echo "$SCRIPT_DIR/backup-env-files.sh"
|
|
echo "$SCRIPT_DIR/validate-env-backups.sh --summary-only"
|
|
echo ""
|
|
else
|
|
echo -e "${BLUE}Select scripts to integrate with (or 'all' for all, 'none' to skip):${NC}"
|
|
for i in "${!found_scripts[@]}"; do
|
|
echo "$((i+1)). $(basename "${found_scripts[$i]}")"
|
|
done
|
|
echo ""
|
|
|
|
read -p "Enter your choice: " choice
|
|
|
|
case "$choice" in
|
|
"all")
|
|
for script in "${found_scripts[@]}"; do
|
|
integrate_env_backup "$script" "after_docker"
|
|
done
|
|
;;
|
|
"none")
|
|
echo -e "${YELLOW}Skipping integration${NC}"
|
|
;;
|
|
[0-9]*)
|
|
if [ "$choice" -ge 1 ] && [ "$choice" -le ${#found_scripts[@]} ]; then
|
|
script_index=$((choice-1))
|
|
integrate_env_backup "${found_scripts[$script_index]}" "after_docker"
|
|
else
|
|
echo -e "${RED}Invalid choice${NC}"
|
|
fi
|
|
;;
|
|
*)
|
|
echo -e "${RED}Invalid choice${NC}"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Create a simple cron entry suggestion
|
|
echo -e "${BLUE}=== Automation Suggestions ===${NC}"
|
|
echo "Add to crontab for automated backups:"
|
|
echo ""
|
|
echo "# Daily .env backup at 2 AM"
|
|
echo "0 2 * * * $SCRIPT_DIR/backup-env-files.sh >/dev/null 2>&1"
|
|
echo ""
|
|
echo "# Weekly validation on Sundays at 3 AM"
|
|
echo "0 3 * * 0 $SCRIPT_DIR/validate-env-backups.sh --summary-only"
|
|
echo ""
|
|
|
|
echo -e "${GREEN}Integration setup completed!${NC}"
|
|
echo -e "${BLUE}Next steps:${NC}"
|
|
echo "1. Run: $SCRIPT_DIR/backup-env-files.sh --init"
|
|
echo "2. Create private repository in Gitea"
|
|
echo "3. Run first backup: $SCRIPT_DIR/backup-env-files.sh"
|
|
echo "4. Test restoration: $SCRIPT_DIR/backup-env-files.sh --restore"
|