Initial commit
Dieser Commit ist enthalten in:
118
create_full_backup.sh
Normale Datei
118
create_full_backup.sh
Normale Datei
@ -0,0 +1,118 @@
|
||||
#!/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}"
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren