118 Zeilen
4.1 KiB
Bash
118 Zeilen
4.1 KiB
Bash
#!/bin/bash
|
|
# Full Server Backup Script for V2-Docker
|
|
# Creates comprehensive backup including configs, database, volumes, and git status
|
|
|
|
set -e # Exit on error
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
BACKUP_BASE_DIR="/opt/v2-Docker/server-backups"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_DIR="$BACKUP_BASE_DIR/server_backup_$TIMESTAMP"
|
|
PROJECT_ROOT="/opt/v2-Docker"
|
|
|
|
# GitHub configuration
|
|
GITHUB_REMOTE="backup"
|
|
GITHUB_BRANCH="main"
|
|
GIT_PATH="/home/root/.local/bin"
|
|
|
|
echo -e "${GREEN}Starting V2-Docker Full Server Backup...${NC}"
|
|
echo "Backup directory: $BACKUP_DIR"
|
|
|
|
# Create backup directory structure
|
|
mkdir -p "$BACKUP_DIR"/{configs,volumes}
|
|
|
|
# 1. Backup configuration files
|
|
echo -e "${YELLOW}Backing up configuration files...${NC}"
|
|
cp "$PROJECT_ROOT/v2/docker-compose.yaml" "$BACKUP_DIR/configs/" 2>/dev/null || echo "docker-compose.yaml not found"
|
|
cp "$PROJECT_ROOT/v2/.env" "$BACKUP_DIR/configs/" 2>/dev/null || echo ".env not found"
|
|
cp "$PROJECT_ROOT/v2_nginx/nginx.conf" "$BACKUP_DIR/configs/" 2>/dev/null || echo "nginx.conf not found"
|
|
|
|
# Backup SSL certificates
|
|
if [ -d "$PROJECT_ROOT/v2_nginx/ssl" ]; then
|
|
mkdir -p "$BACKUP_DIR/configs/ssl"
|
|
cp -r "$PROJECT_ROOT/v2_nginx/ssl/"* "$BACKUP_DIR/configs/ssl/" 2>/dev/null || echo "SSL files not found"
|
|
fi
|
|
|
|
# 2. Capture Git status and recent commits
|
|
echo -e "${YELLOW}Capturing Git information...${NC}"
|
|
cd "$PROJECT_ROOT"
|
|
git status > "$BACKUP_DIR/git_status.txt" 2>&1
|
|
git log --oneline -50 > "$BACKUP_DIR/git_recent_commits.txt" 2>&1
|
|
|
|
# 3. Capture Docker status
|
|
echo -e "${YELLOW}Capturing Docker status...${NC}"
|
|
docker ps -a > "$BACKUP_DIR/docker_containers.txt" 2>&1
|
|
cd "$PROJECT_ROOT/v2" && docker-compose ps > "$BACKUP_DIR/docker_compose_status.txt" 2>&1 && cd "$PROJECT_ROOT"
|
|
|
|
# 4. Backup PostgreSQL database
|
|
echo -e "${YELLOW}Backing up PostgreSQL database...${NC}"
|
|
DB_CONTAINER="db" # Korrigierter Container-Name
|
|
DB_NAME="meinedatenbank" # Korrigierter DB-Name
|
|
DB_USER="adminuser" # Korrigierter User
|
|
|
|
# Get DB password from .env or environment
|
|
if [ -f "$PROJECT_ROOT/v2/.env" ]; then
|
|
source "$PROJECT_ROOT/v2/.env"
|
|
fi
|
|
DB_PASS="${POSTGRES_PASSWORD:-supergeheimespasswort}"
|
|
|
|
# Create database dump
|
|
docker exec "$DB_CONTAINER" pg_dump -U "$DB_USER" -d "$DB_NAME" | gzip > "$BACKUP_DIR/database_backup.sql.gz"
|
|
|
|
# 5. Backup Docker volumes
|
|
echo -e "${YELLOW}Backing up Docker volumes...${NC}"
|
|
# PostgreSQL data volume
|
|
docker run --rm -v postgres_data:/data -v "$BACKUP_DIR/volumes":/backup alpine tar czf /backup/postgres_data.tar.gz -C /data .
|
|
|
|
# Create backup info file
|
|
cat > "$BACKUP_DIR/backup_info.txt" << EOF
|
|
V2-Docker Server Backup
|
|
Created: $(date)
|
|
Timestamp: $TIMESTAMP
|
|
Type: Full Server Backup
|
|
Contents:
|
|
- Configuration files (docker-compose, nginx, SSL)
|
|
- PostgreSQL database dump
|
|
- Docker volumes
|
|
- Git status and history
|
|
- Docker container status
|
|
EOF
|
|
|
|
# Calculate backup size
|
|
BACKUP_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)
|
|
echo -e "${GREEN}Backup created successfully!${NC}"
|
|
echo "Size: $BACKUP_SIZE"
|
|
|
|
# Push to GitHub if requested (default: yes)
|
|
if [ "${SKIP_GITHUB:-no}" != "yes" ]; then
|
|
echo -e "${YELLOW}Pushing backup to GitHub...${NC}"
|
|
|
|
# Create tar archive for GitHub
|
|
cd "$BACKUP_BASE_DIR"
|
|
TAR_FILE="server_backup_$TIMESTAMP.tar.gz"
|
|
tar czf "$TAR_FILE" "server_backup_$TIMESTAMP"
|
|
|
|
# Push to GitHub
|
|
cd "$PROJECT_ROOT"
|
|
PATH="$GIT_PATH:$PATH" git pull "$GITHUB_REMOTE" "$GITHUB_BRANCH" --rebase 2>/dev/null || true
|
|
PATH="$GIT_PATH:$PATH" git add "server-backups/$TAR_FILE"
|
|
PATH="$GIT_PATH:$PATH" git commit -m "Server backup $TIMESTAMP - Full system backup before changes"
|
|
PATH="$GIT_PATH:$PATH" git push "$GITHUB_REMOTE" "$GITHUB_BRANCH"
|
|
|
|
echo -e "${GREEN}Backup pushed to GitHub successfully!${NC}"
|
|
|
|
# Keep local copy for manual backups (for quick rollback)
|
|
# Automated backups will delete this later
|
|
echo -e "${YELLOW}Local backup kept at: $BACKUP_DIR${NC}"
|
|
else
|
|
echo -e "${YELLOW}Skipped GitHub push (SKIP_GITHUB=yes)${NC}"
|
|
fi
|
|
|
|
echo "Backup file: $BACKUP_DIR"
|
|
echo -e "${GREEN}Backup completed successfully!${NC}" |