Dieser Commit ist enthalten in:
Claude Project Manager
2025-07-05 01:07:30 +02:00
Commit 76ce1929a9
29 geänderte Dateien mit 622 neuen und 0 gelöschten Zeilen

1
.gitattributes vendored Normale Datei
Datei anzeigen

@ -0,0 +1 @@
server-backups/*.tar.gz filter=lfs diff=lfs merge=lfs -text

62
CLAUDE_PROJECT_README.md Normale Datei
Datei anzeigen

@ -0,0 +1,62 @@
# Hetzner-Backup
*This README was automatically generated by Claude Project Manager*
## Project Overview
- **Path**: `A:/GiTea/Hetzner-Backup`
- **Files**: 27 files
- **Size**: 501.1 KB
- **Last Modified**: 2025-07-02 11:17
## Technology Stack
### Languages
- PowerShell
- Shell
## Project Structure
```
create_full_backup.sh
restore_full_backup.sh
setup_backup_cron.sh
scripts/
│ ├── reset-to-dhcp.ps1
│ ├── set-static-ip.ps1
│ └── setup-firewall.ps1
server-backups/
│ ├── server_backup_20250628_203904.tar.gz
│ ├── server_backup_20250628_224534.tar.gz
│ ├── server_backup_20250628_225351.tar.gz
│ ├── server_backup_20250628_230701.tar.gz
│ ├── server_backup_20250628_232101.tar.gz
│ ├── server_backup_20250630_171826.tar.gz
│ ├── server_backup_20250701_213925.tar.gz
│ ├── server_backup_20250701_215728.tar.gz
│ ├── server_backup_20250701_222336.tar.gz
│ └── server_backup_20250701_230231.tar.gz
SSL/
├── cert.pem
├── chain.pem
├── fullchain.pem
└── privkey.pem
```
## Claude Integration
This project is managed with Claude Project Manager. To work with this project:
1. Open Claude Project Manager
2. Click on this project's tile
3. Claude will open in the project directory
## Notes
*Add your project-specific notes here*
---
## Development Log
- README generated on 2025-07-05 00:57:32

23
SSL/cert.pem Normale Datei
Datei anzeigen

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID3TCCA2OgAwIBAgISBimcX2wwj3Z1U/Qlfu5y5keoMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTA2MjYxNjAwMjBaFw0yNTA5MjQxNjAwMTlaMBgxFjAUBgNVBAMTDWlu
dGVsc2lnaHQuZGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATEQD6vfDoXM7Yz
iT75OmB/kvxoEebMFRBCzpTOdUZpThlFmLijjCsYnxc8DeWDn8/eLltrBWhuM4Yx
gX8tseO0o4ICcTCCAm0wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUF
BwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSM5CYyn//CSmLp
JADwjccRtsnZFDAfBgNVHSMEGDAWgBSTJ0aYA6lRaI6Y1sRCSNsjv1iU0jAyBggr
BgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5pLmxlbmNyLm9yZy8w
bgYDVR0RBGcwZYIfYWRtaW4tcGFuZWwtdW5kc28uaW50ZWxzaWdodC5kZYIgYXBp
LXNvZnR3YXJlLXVuZHNvLmludGVsc2lnaHQuZGWCDWludGVsc2lnaHQuZGWCEXd3
dy5pbnRlbHNpZ2h0LmRlMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQw
IqAgoB6GHGh0dHA6Ly9lNi5jLmxlbmNyLm9yZy80MS5jcmwwggEEBgorBgEEAdZ5
AgQCBIH1BIHyAPAAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2XjbapflTA/kwNsAAA
AZetLYOmAAAEAwBHMEUCIB8bQYn7h64sSmHZavNbIM6ScHDBxmMWN6WqjyaTz75I
AiEArz5mC+TaVMsofIIFkEj+dOMD1/oj6w10zgVunTPb01wAdgCkQsUGSWBhVI8P
1Oqc+3otJkVNh6l/L99FWfYnTzqEVAAAAZetLYRWAAAEAwBHMEUCIFVulS2bEmSQ
HYcE2UbsHhn7WJl8MeWZJSKGG1LbtnvyAiEAsLHL/VyIfXVhOmcMf1gmPL/eu7xj
W/2JuPHVWgjUDhQwCgYIKoZIzj0EAwMDaAAwZQIxANaSy/SOYXq9+oQJNhpXIlMJ
i0HBvwebvhNVkNGJN2QodV5gE2yi4s4q19XkpFO+fQIwCCqLSQvaC+AcOTFT9XL5
6hk8bFapLf/b2EFv3DE06qKIrDVPWhtYwyEYBRT4Ii4p
-----END CERTIFICATE-----

26
SSL/chain.pem Normale Datei
Datei anzeigen

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

49
SSL/fullchain.pem Normale Datei
Datei anzeigen

@ -0,0 +1,49 @@
-----BEGIN CERTIFICATE-----
MIID3TCCA2OgAwIBAgISBimcX2wwj3Z1U/Qlfu5y5keoMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNTA2MjYxNjAwMjBaFw0yNTA5MjQxNjAwMTlaMBgxFjAUBgNVBAMTDWlu
dGVsc2lnaHQuZGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATEQD6vfDoXM7Yz
iT75OmB/kvxoEebMFRBCzpTOdUZpThlFmLijjCsYnxc8DeWDn8/eLltrBWhuM4Yx
gX8tseO0o4ICcTCCAm0wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUF
BwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSM5CYyn//CSmLp
JADwjccRtsnZFDAfBgNVHSMEGDAWgBSTJ0aYA6lRaI6Y1sRCSNsjv1iU0jAyBggr
BgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5pLmxlbmNyLm9yZy8w
bgYDVR0RBGcwZYIfYWRtaW4tcGFuZWwtdW5kc28uaW50ZWxzaWdodC5kZYIgYXBp
LXNvZnR3YXJlLXVuZHNvLmludGVsc2lnaHQuZGWCDWludGVsc2lnaHQuZGWCEXd3
dy5pbnRlbHNpZ2h0LmRlMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQw
IqAgoB6GHGh0dHA6Ly9lNi5jLmxlbmNyLm9yZy80MS5jcmwwggEEBgorBgEEAdZ5
AgQCBIH1BIHyAPAAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2XjbapflTA/kwNsAAA
AZetLYOmAAAEAwBHMEUCIB8bQYn7h64sSmHZavNbIM6ScHDBxmMWN6WqjyaTz75I
AiEArz5mC+TaVMsofIIFkEj+dOMD1/oj6w10zgVunTPb01wAdgCkQsUGSWBhVI8P
1Oqc+3otJkVNh6l/L99FWfYnTzqEVAAAAZetLYRWAAAEAwBHMEUCIFVulS2bEmSQ
HYcE2UbsHhn7WJl8MeWZJSKGG1LbtnvyAiEAsLHL/VyIfXVhOmcMf1gmPL/eu7xj
W/2JuPHVWgjUDhQwCgYIKoZIzj0EAwMDaAAwZQIxANaSy/SOYXq9+oQJNhpXIlMJ
i0HBvwebvhNVkNGJN2QodV5gE2yi4s4q19XkpFO+fQIwCCqLSQvaC+AcOTFT9XL5
6hk8bFapLf/b2EFv3DE06qKIrDVPWhtYwyEYBRT4Ii4p
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
Ig46v9mFmBvyH04=
-----END CERTIFICATE-----

5
SSL/privkey.pem Normale Datei
Datei anzeigen

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi8/a6iwFCHSbBe/I
2Zo6exFpcLL4icRgotOF605ZrY6hRANCAATEQD6vfDoXM7YziT75OmB/kvxoEebM
FRBCzpTOdUZpThlFmLijjCsYnxc8DeWDn8/eLltrBWhuM4YxgX8tseO0
-----END PRIVATE KEY-----

118
create_full_backup.sh Normale Datei
Datei anzeigen

@ -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}"

158
restore_full_backup.sh Normale Datei
Datei anzeigen

@ -0,0 +1,158 @@
#!/bin/bash
# Full Server Restore Script for V2-Docker
# Restores server from a backup created by create_full_backup.sh
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
# Check if backup path is provided
if [ $# -eq 0 ]; then
echo -e "${RED}Error: No backup specified${NC}"
echo "Usage: $0 <backup_path_or_name>"
echo ""
echo "Examples:"
echo " $0 server_backup_20250628_171705"
echo " $0 /opt/v2-Docker/server-backups/server_backup_20250628_171705"
echo " $0 server_backup_20250628_171705.tar.gz"
exit 1
fi
BACKUP_INPUT="$1"
PROJECT_ROOT="/opt/v2-Docker"
BACKUP_BASE_DIR="$PROJECT_ROOT/server-backups"
# Determine backup directory
if [ -d "$BACKUP_INPUT" ]; then
# Full path provided
BACKUP_DIR="$BACKUP_INPUT"
elif [ -d "$BACKUP_BASE_DIR/$BACKUP_INPUT" ]; then
# Backup name provided
BACKUP_DIR="$BACKUP_BASE_DIR/$BACKUP_INPUT"
elif [ -f "$BACKUP_BASE_DIR/$BACKUP_INPUT" ] && [[ "$BACKUP_INPUT" == *.tar.gz ]]; then
# Tar file provided - extract first
echo -e "${YELLOW}Extracting backup archive...${NC}"
TEMP_DIR=$(mktemp -d)
tar xzf "$BACKUP_BASE_DIR/$BACKUP_INPUT" -C "$TEMP_DIR"
BACKUP_DIR=$(find "$TEMP_DIR" -maxdepth 1 -type d -name "server_backup_*" | head -1)
if [ -z "$BACKUP_DIR" ]; then
echo -e "${RED}Error: Could not find backup directory in archive${NC}"
rm -rf "$TEMP_DIR"
exit 1
fi
else
echo -e "${RED}Error: Backup not found: $BACKUP_INPUT${NC}"
exit 1
fi
echo -e "${GREEN}Starting V2-Docker Full Server Restore...${NC}"
echo "Restoring from: $BACKUP_DIR"
# Verify backup directory structure
if [ ! -f "$BACKUP_DIR/database_backup.sql.gz" ]; then
echo -e "${RED}Error: Invalid backup - database_backup.sql.gz not found${NC}"
exit 1
fi
# Warning prompt
echo -e "${YELLOW}WARNING: This will restore the entire server state!${NC}"
echo "This includes:"
echo " - Configuration files"
echo " - SSL certificates"
echo " - Database (all data will be replaced)"
echo " - Docker volumes"
echo ""
read -p "Are you sure you want to continue? (yes/no): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "Restore cancelled."
exit 0
fi
# 1. Stop all services
echo -e "${YELLOW}Stopping Docker services...${NC}"
cd "$PROJECT_ROOT"
docker-compose down
# 2. Restore configuration files
echo -e "${YELLOW}Restoring configuration files...${NC}"
if [ -f "$BACKUP_DIR/configs/docker-compose.yaml" ]; then
cp "$BACKUP_DIR/configs/docker-compose.yaml" "$PROJECT_ROOT/"
fi
if [ -f "$BACKUP_DIR/configs/.env" ]; then
cp "$BACKUP_DIR/configs/.env" "$PROJECT_ROOT/"
fi
if [ -f "$BACKUP_DIR/configs/nginx.conf" ]; then
mkdir -p "$PROJECT_ROOT/v2_nginx"
cp "$BACKUP_DIR/configs/nginx.conf" "$PROJECT_ROOT/v2_nginx/"
fi
# Restore SSL certificates
if [ -d "$BACKUP_DIR/configs/ssl" ]; then
mkdir -p "$PROJECT_ROOT/v2_nginx/ssl"
cp -r "$BACKUP_DIR/configs/ssl/"* "$PROJECT_ROOT/v2_nginx/ssl/"
fi
# 3. Restore Docker volumes
echo -e "${YELLOW}Restoring Docker volumes...${NC}"
# Remove old volume
docker volume rm v2_postgres_data 2>/dev/null || true
# Create new volume
docker volume create v2_postgres_data
# Restore volume data
docker run --rm -v v2_postgres_data:/data -v "$BACKUP_DIR/volumes":/backup alpine tar xzf /backup/v2_postgres_data.tar.gz -C /data
# 4. Start database service only
echo -e "${YELLOW}Starting database service...${NC}"
docker-compose up -d db
# Wait for database to be ready
echo "Waiting for database to be ready..."
sleep 10
# 5. Restore database
echo -e "${YELLOW}Restoring database...${NC}"
DB_CONTAINER="v2_postgres"
DB_NAME="v2_license_db"
DB_USER="v2_user"
# Get DB password from restored .env
if [ -f "$PROJECT_ROOT/.env" ]; then
source "$PROJECT_ROOT/.env"
fi
DB_PASS="${POSTGRES_PASSWORD:-${DB_PASS:-v2_password}}"
# Drop and recreate database
docker exec "$DB_CONTAINER" psql -U "$DB_USER" -c "DROP DATABASE IF EXISTS $DB_NAME;"
docker exec "$DB_CONTAINER" psql -U "$DB_USER" -c "CREATE DATABASE $DB_NAME;"
# Restore database from backup
gunzip -c "$BACKUP_DIR/database_backup.sql.gz" | docker exec -i "$DB_CONTAINER" psql -U "$DB_USER" -d "$DB_NAME"
# 6. Start all services
echo -e "${YELLOW}Starting all services...${NC}"
docker-compose up -d
# Wait for services to be ready
echo "Waiting for services to start..."
sleep 15
# 7. Verify services are running
echo -e "${YELLOW}Verifying services...${NC}"
docker-compose ps
# Clean up temporary directory if used
if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then
rm -rf "$TEMP_DIR"
fi
echo -e "${GREEN}Restore completed successfully!${NC}"
echo ""
echo "Next steps:"
echo "1. Verify the application is working at https://admin-panel-undso.intelsight.de"
echo "2. Check logs: docker-compose logs -f"
echo "3. If there are issues, check the backup info: cat $BACKUP_DIR/backup_info.txt"

38
scripts/reset-to-dhcp.ps1 Normale Datei
Datei anzeigen

@ -0,0 +1,38 @@
# PowerShell Script zum Zurücksetzen auf DHCP
# MUSS ALS ADMINISTRATOR AUSGEFÜHRT WERDEN!
Write-Host "=== Zurücksetzen auf DHCP (automatische IP) ===" -ForegroundColor Green
# Aktive WLAN-Adapter finden
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq 'Up' -and ($_.Name -like '*WLAN*' -or $_.Name -like '*Wi-Fi*')}
if ($adapters.Count -eq 0) {
Write-Host "Kein aktiver WLAN-Adapter gefunden!" -ForegroundColor Red
exit
}
# Den ersten aktiven WLAN-Adapter nehmen
$adapter = $adapters[0]
Write-Host "`nSetze Adapter zurück auf DHCP: $($adapter.Name)" -ForegroundColor Cyan
# Statische IP entfernen
Write-Host "`nEntferne statische IP-Konfiguration..." -ForegroundColor Yellow
Remove-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
Remove-NetRoute -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
# DHCP aktivieren
Write-Host "`nAktiviere DHCP..." -ForegroundColor Green
Set-NetIPInterface -InterfaceIndex $adapter.InterfaceIndex -Dhcp Enabled
# DNS auf automatisch setzen
Write-Host "`nSetze DNS auf automatisch..." -ForegroundColor Green
Set-DnsClientServerAddress -InterfaceIndex $adapter.InterfaceIndex -ResetServerAddresses
Write-Host "`n✅ Fertig! Der Adapter nutzt jetzt wieder DHCP (automatische IP-Vergabe)" -ForegroundColor Green
# Kurz warten
Start-Sleep -Seconds 3
# Neue IP anzeigen
Write-Host "`nNeue IP-Adresse:" -ForegroundColor Yellow
Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 | Format-Table IPAddress, PrefixLength

54
scripts/set-static-ip.ps1 Normale Datei
Datei anzeigen

@ -0,0 +1,54 @@
# PowerShell Script für statische IP-Konfiguration
# MUSS ALS ADMINISTRATOR AUSGEFÜHRT WERDEN!
Write-Host "=== Statische IP 192.168.178.88 einrichten ===" -ForegroundColor Green
# Aktive WLAN-Adapter finden
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq 'Up' -and ($_.Name -like '*WLAN*' -or $_.Name -like '*Wi-Fi*')}
if ($adapters.Count -eq 0) {
Write-Host "Kein aktiver WLAN-Adapter gefunden!" -ForegroundColor Red
exit
}
Write-Host "`nGefundene WLAN-Adapter:" -ForegroundColor Yellow
$adapters | Format-Table Name, Status, InterfaceIndex
# Den ersten aktiven WLAN-Adapter nehmen
$adapter = $adapters[0]
Write-Host "`nKonfiguriere Adapter: $($adapter.Name)" -ForegroundColor Cyan
# Aktuelle Konfiguration anzeigen
Write-Host "`nAktuelle IP-Konfiguration:" -ForegroundColor Yellow
Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 | Format-Table IPAddress, PrefixLength
# Alte IP-Konfiguration entfernen
Write-Host "`nEntferne alte IP-Konfiguration..." -ForegroundColor Yellow
Remove-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
Remove-NetRoute -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
# Neue statische IP setzen
Write-Host "`nSetze neue statische IP: 192.168.178.88" -ForegroundColor Green
New-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -IPAddress "192.168.178.88" -PrefixLength 24 -DefaultGateway "192.168.178.1" -AddressFamily IPv4
# DNS-Server setzen (FRITZ!Box und Google)
Write-Host "`nSetze DNS-Server..." -ForegroundColor Green
Set-DnsClientServerAddress -InterfaceIndex $adapter.InterfaceIndex -ServerAddresses "192.168.178.1", "8.8.8.8"
# Neue Konfiguration anzeigen
Write-Host "`nNeue IP-Konfiguration:" -ForegroundColor Green
Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 | Format-Table IPAddress, PrefixLength
Get-NetRoute -InterfaceIndex $adapter.InterfaceIndex -DestinationPrefix "0.0.0.0/0" | Format-Table DestinationPrefix, NextHop
Write-Host "`n✅ Fertig! Ihre IP ist jetzt: 192.168.178.88" -ForegroundColor Green
Write-Host "Die FRITZ!Box Port-Weiterleitung sollte jetzt funktionieren!" -ForegroundColor Green
# Test
Write-Host "`nTeste Internetverbindung..." -ForegroundColor Yellow
Test-NetConnection google.com -Port 80 -InformationLevel Quiet
if ($?) {
Write-Host "✅ Internetverbindung funktioniert!" -ForegroundColor Green
} else {
Write-Host "❌ Keine Internetverbindung - prüfen Sie die Einstellungen!" -ForegroundColor Red
}

16
scripts/setup-firewall.ps1 Normale Datei
Datei anzeigen

@ -0,0 +1,16 @@
# PowerShell-Script für Windows Firewall Konfiguration
# Als Administrator ausführen!
Write-Host "Konfiguriere Windows Firewall für Docker..." -ForegroundColor Green
# Firewall-Regeln für HTTP und HTTPS
New-NetFirewallRule -DisplayName "Docker HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow -ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName "Docker HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow -ErrorAction SilentlyContinue
Write-Host "Firewall-Regeln erstellt." -ForegroundColor Green
# Docker-Service neustarten (optional)
Write-Host "Starte Docker-Service neu..." -ForegroundColor Yellow
Restart-Service docker
Write-Host "Fertig! Ports 80 und 443 sind jetzt offen." -ForegroundColor Green

BIN
server-backups/server_backup_20250628_203904.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250628_224534.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250628_225351.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250628_230701.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250628_232101.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250630_171826.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_213925.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_215728.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_222336.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_230231.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_232409.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_233321.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250701_234343.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250702_000750.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250702_001604.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250702_002743.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

BIN
server-backups/server_backup_20250702_002930.tar.gz (Gespeichert mit Git LFS) Normale Datei

Binäre Datei nicht angezeigt.

21
setup_backup_cron.sh Normale Datei
Datei anzeigen

@ -0,0 +1,21 @@
#!/bin/bash
# Setup daily backup cron job at 3:00 AM
CRON_JOB="0 3 * * * cd /opt/v2-Docker && /usr/bin/python3 /opt/v2-Docker/v2_adminpanel/scheduled_backup.py >> /opt/v2-Docker/logs/cron_backup.log 2>&1"
# Check if cron job already exists
if crontab -l 2>/dev/null | grep -q "scheduled_backup.py"; then
echo "Backup cron job already exists"
else
# Add the cron job
(crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
echo "Backup cron job added successfully"
fi
# Create logs directory if it doesn't exist
mkdir -p /opt/v2-Docker/logs
# Show current crontab
echo "Current crontab:"
crontab -l