From 76ce1929a9475a18fcff7db6ac2ec9a76f18c7d5 Mon Sep 17 00:00:00 2001 From: Claude Project Manager Date: Sat, 5 Jul 2025 01:07:30 +0200 Subject: [PATCH] Initial commit --- .gitattributes | 1 + CLAUDE_PROJECT_README.md | 62 +++++++ SSL/cert.pem | 23 +++ SSL/chain.pem | 26 +++ SSL/fullchain.pem | 49 ++++++ SSL/privkey.pem | 5 + create_full_backup.sh | 118 +++++++++++++ restore_full_backup.sh | 158 ++++++++++++++++++ scripts/reset-to-dhcp.ps1 | 38 +++++ scripts/set-static-ip.ps1 | 54 ++++++ scripts/setup-firewall.ps1 | 16 ++ .../server_backup_20250628_203904.tar.gz | 3 + .../server_backup_20250628_224534.tar.gz | 3 + .../server_backup_20250628_225351.tar.gz | 3 + .../server_backup_20250628_230701.tar.gz | 3 + .../server_backup_20250628_232101.tar.gz | 3 + .../server_backup_20250630_171826.tar.gz | 3 + .../server_backup_20250701_213925.tar.gz | 3 + .../server_backup_20250701_215728.tar.gz | 3 + .../server_backup_20250701_222336.tar.gz | 3 + .../server_backup_20250701_230231.tar.gz | 3 + .../server_backup_20250701_232409.tar.gz | 3 + .../server_backup_20250701_233321.tar.gz | 3 + .../server_backup_20250701_234343.tar.gz | 3 + .../server_backup_20250702_000750.tar.gz | 3 + .../server_backup_20250702_001604.tar.gz | 3 + .../server_backup_20250702_002743.tar.gz | 3 + .../server_backup_20250702_002930.tar.gz | 3 + setup_backup_cron.sh | 21 +++ 29 files changed, 622 insertions(+) create mode 100644 .gitattributes create mode 100644 CLAUDE_PROJECT_README.md create mode 100644 SSL/cert.pem create mode 100644 SSL/chain.pem create mode 100644 SSL/fullchain.pem create mode 100644 SSL/privkey.pem create mode 100644 create_full_backup.sh create mode 100644 restore_full_backup.sh create mode 100644 scripts/reset-to-dhcp.ps1 create mode 100644 scripts/set-static-ip.ps1 create mode 100644 scripts/setup-firewall.ps1 create mode 100644 server-backups/server_backup_20250628_203904.tar.gz create mode 100644 server-backups/server_backup_20250628_224534.tar.gz create mode 100644 server-backups/server_backup_20250628_225351.tar.gz create mode 100644 server-backups/server_backup_20250628_230701.tar.gz create mode 100644 server-backups/server_backup_20250628_232101.tar.gz create mode 100644 server-backups/server_backup_20250630_171826.tar.gz create mode 100644 server-backups/server_backup_20250701_213925.tar.gz create mode 100644 server-backups/server_backup_20250701_215728.tar.gz create mode 100644 server-backups/server_backup_20250701_222336.tar.gz create mode 100644 server-backups/server_backup_20250701_230231.tar.gz create mode 100644 server-backups/server_backup_20250701_232409.tar.gz create mode 100644 server-backups/server_backup_20250701_233321.tar.gz create mode 100644 server-backups/server_backup_20250701_234343.tar.gz create mode 100644 server-backups/server_backup_20250702_000750.tar.gz create mode 100644 server-backups/server_backup_20250702_001604.tar.gz create mode 100644 server-backups/server_backup_20250702_002743.tar.gz create mode 100644 server-backups/server_backup_20250702_002930.tar.gz create mode 100644 setup_backup_cron.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..137a171 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +server-backups/*.tar.gz filter=lfs diff=lfs merge=lfs -text diff --git a/CLAUDE_PROJECT_README.md b/CLAUDE_PROJECT_README.md new file mode 100644 index 0000000..78a795d --- /dev/null +++ b/CLAUDE_PROJECT_README.md @@ -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 diff --git a/SSL/cert.pem b/SSL/cert.pem new file mode 100644 index 0000000..bfb08d2 --- /dev/null +++ b/SSL/cert.pem @@ -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----- diff --git a/SSL/chain.pem b/SSL/chain.pem new file mode 100644 index 0000000..65797c8 --- /dev/null +++ b/SSL/chain.pem @@ -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----- diff --git a/SSL/fullchain.pem b/SSL/fullchain.pem new file mode 100644 index 0000000..0317cae --- /dev/null +++ b/SSL/fullchain.pem @@ -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----- diff --git a/SSL/privkey.pem b/SSL/privkey.pem new file mode 100644 index 0000000..a31c25b --- /dev/null +++ b/SSL/privkey.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi8/a6iwFCHSbBe/I +2Zo6exFpcLL4icRgotOF605ZrY6hRANCAATEQD6vfDoXM7YziT75OmB/kvxoEebM +FRBCzpTOdUZpThlFmLijjCsYnxc8DeWDn8/eLltrBWhuM4YxgX8tseO0 +-----END PRIVATE KEY----- diff --git a/create_full_backup.sh b/create_full_backup.sh new file mode 100644 index 0000000..6d75c84 --- /dev/null +++ b/create_full_backup.sh @@ -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}" \ No newline at end of file diff --git a/restore_full_backup.sh b/restore_full_backup.sh new file mode 100644 index 0000000..f611a8d --- /dev/null +++ b/restore_full_backup.sh @@ -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 " + 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" \ No newline at end of file diff --git a/scripts/reset-to-dhcp.ps1 b/scripts/reset-to-dhcp.ps1 new file mode 100644 index 0000000..4b67ddc --- /dev/null +++ b/scripts/reset-to-dhcp.ps1 @@ -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 \ No newline at end of file diff --git a/scripts/set-static-ip.ps1 b/scripts/set-static-ip.ps1 new file mode 100644 index 0000000..a8c2758 --- /dev/null +++ b/scripts/set-static-ip.ps1 @@ -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 +} \ No newline at end of file diff --git a/scripts/setup-firewall.ps1 b/scripts/setup-firewall.ps1 new file mode 100644 index 0000000..1b0e9f6 --- /dev/null +++ b/scripts/setup-firewall.ps1 @@ -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 \ No newline at end of file diff --git a/server-backups/server_backup_20250628_203904.tar.gz b/server-backups/server_backup_20250628_203904.tar.gz new file mode 100644 index 0000000..73cf83c --- /dev/null +++ b/server-backups/server_backup_20250628_203904.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adcd6d8ad51d135e84b6bd9eb6d8d47d30cf97646b725a1e1ac9266a691c7de6 +size 24617 diff --git a/server-backups/server_backup_20250628_224534.tar.gz b/server-backups/server_backup_20250628_224534.tar.gz new file mode 100644 index 0000000..a74f725 --- /dev/null +++ b/server-backups/server_backup_20250628_224534.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb1d1772923eb956a5ffee3514120154701153b510f598d3d02ab74a43bc844 +size 27473 diff --git a/server-backups/server_backup_20250628_225351.tar.gz b/server-backups/server_backup_20250628_225351.tar.gz new file mode 100644 index 0000000..ac49582 --- /dev/null +++ b/server-backups/server_backup_20250628_225351.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:947b3ee64a6bef516ec36c1e0427608958c0278587f230b16c9a576f3c242b51 +size 27461 diff --git a/server-backups/server_backup_20250628_230701.tar.gz b/server-backups/server_backup_20250628_230701.tar.gz new file mode 100644 index 0000000..11ccf58 --- /dev/null +++ b/server-backups/server_backup_20250628_230701.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da35d4b2738f390d80d1b53908602f3ccb19ddaa7199fad444dff54fe878930 +size 27681 diff --git a/server-backups/server_backup_20250628_232101.tar.gz b/server-backups/server_backup_20250628_232101.tar.gz new file mode 100644 index 0000000..da522d0 --- /dev/null +++ b/server-backups/server_backup_20250628_232101.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a3a84d07dbd4d03bdeaae0d3d23eefd4aeb7bfc44510220ad43a1019ae354e +size 27706 diff --git a/server-backups/server_backup_20250630_171826.tar.gz b/server-backups/server_backup_20250630_171826.tar.gz new file mode 100644 index 0000000..159dfa4 --- /dev/null +++ b/server-backups/server_backup_20250630_171826.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab955629086b36855573bf05d03f556e3c0ac29f022615783a903e3dc557f217 +size 28304 diff --git a/server-backups/server_backup_20250701_213925.tar.gz b/server-backups/server_backup_20250701_213925.tar.gz new file mode 100644 index 0000000..a402dd8 --- /dev/null +++ b/server-backups/server_backup_20250701_213925.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:495ad99723f0ecb0b4fb68d729dd1470a6a4c240e2c152bb48da85ecb5a0133e +size 29268 diff --git a/server-backups/server_backup_20250701_215728.tar.gz b/server-backups/server_backup_20250701_215728.tar.gz new file mode 100644 index 0000000..f279f11 --- /dev/null +++ b/server-backups/server_backup_20250701_215728.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42b82e5c703c822022cb7e2078d7b2e9e983f0fab090446280076f5faeebe43 +size 29471 diff --git a/server-backups/server_backup_20250701_222336.tar.gz b/server-backups/server_backup_20250701_222336.tar.gz new file mode 100644 index 0000000..74cb4b0 --- /dev/null +++ b/server-backups/server_backup_20250701_222336.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7fb08fd1aeb6d89781fe4a687d53f0fad7e0a6b2b299e71e6328cd1795aab4c +size 29686 diff --git a/server-backups/server_backup_20250701_230231.tar.gz b/server-backups/server_backup_20250701_230231.tar.gz new file mode 100644 index 0000000..857249f --- /dev/null +++ b/server-backups/server_backup_20250701_230231.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7480732b0e3112b504c73c2356a8f8f65e6e42ede364c286e81cc6827907f65b +size 29709 diff --git a/server-backups/server_backup_20250701_232409.tar.gz b/server-backups/server_backup_20250701_232409.tar.gz new file mode 100644 index 0000000..fb04605 --- /dev/null +++ b/server-backups/server_backup_20250701_232409.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe2885b8676a8676838989919fa081ed540cc089fe44f8d79d0d670c233c745d +size 29769 diff --git a/server-backups/server_backup_20250701_233321.tar.gz b/server-backups/server_backup_20250701_233321.tar.gz new file mode 100644 index 0000000..e4a7ba3 --- /dev/null +++ b/server-backups/server_backup_20250701_233321.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dc6e701bbccfa0a092518ffadb8c9f7e644c5a6aa3f578a2073855835cbd96c +size 29881 diff --git a/server-backups/server_backup_20250701_234343.tar.gz b/server-backups/server_backup_20250701_234343.tar.gz new file mode 100644 index 0000000..084e0df --- /dev/null +++ b/server-backups/server_backup_20250701_234343.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:722b74d96cae4b9fe0287b81ea99fe3ce63eb86a5f0ac561183685df98af6bc5 +size 29941 diff --git a/server-backups/server_backup_20250702_000750.tar.gz b/server-backups/server_backup_20250702_000750.tar.gz new file mode 100644 index 0000000..0ead490 --- /dev/null +++ b/server-backups/server_backup_20250702_000750.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4d094ba91165b015fb6da33ec95ad880817dd66d6ac7453e3cc40db6af0a58f +size 30177 diff --git a/server-backups/server_backup_20250702_001604.tar.gz b/server-backups/server_backup_20250702_001604.tar.gz new file mode 100644 index 0000000..6808eac --- /dev/null +++ b/server-backups/server_backup_20250702_001604.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64022f33922a6b95756c5bca3537d9db82a338ca0144a1d62c922ce36ca6fd7d +size 30182 diff --git a/server-backups/server_backup_20250702_002743.tar.gz b/server-backups/server_backup_20250702_002743.tar.gz new file mode 100644 index 0000000..e720445 --- /dev/null +++ b/server-backups/server_backup_20250702_002743.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba16684655670406c6bd11613a56e447d0e753bf45f3ea1863ea430a5fbc459 +size 30228 diff --git a/server-backups/server_backup_20250702_002930.tar.gz b/server-backups/server_backup_20250702_002930.tar.gz new file mode 100644 index 0000000..75b568b --- /dev/null +++ b/server-backups/server_backup_20250702_002930.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c557c442f7c898ba5cf0487eb9817da40eaf62eda7d68c4bfd661d3ac2d8d592 +size 30208 diff --git a/setup_backup_cron.sh b/setup_backup_cron.sh new file mode 100644 index 0000000..5d70ae5 --- /dev/null +++ b/setup_backup_cron.sh @@ -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 \ No newline at end of file