Initial commit
Dieser Commit ist enthalten in:
1
.gitattributes
vendored
Normale Datei
1
.gitattributes
vendored
Normale Datei
@ -0,0 +1 @@
|
||||
server-backups/*.tar.gz filter=lfs diff=lfs merge=lfs -text
|
||||
62
CLAUDE_PROJECT_README.md
Normale Datei
62
CLAUDE_PROJECT_README.md
Normale Datei
@ -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
23
SSL/cert.pem
Normale Datei
@ -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
26
SSL/chain.pem
Normale Datei
@ -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
49
SSL/fullchain.pem
Normale Datei
@ -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
5
SSL/privkey.pem
Normale Datei
@ -0,0 +1,5 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi8/a6iwFCHSbBe/I
|
||||
2Zo6exFpcLL4icRgotOF605ZrY6hRANCAATEQD6vfDoXM7YziT75OmB/kvxoEebM
|
||||
FRBCzpTOdUZpThlFmLijjCsYnxc8DeWDn8/eLltrBWhuM4YxgX8tseO0
|
||||
-----END PRIVATE KEY-----
|
||||
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}"
|
||||
158
restore_full_backup.sh
Normale Datei
158
restore_full_backup.sh
Normale Datei
@ -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
38
scripts/reset-to-dhcp.ps1
Normale Datei
@ -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
54
scripts/set-static-ip.ps1
Normale Datei
@ -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
16
scripts/setup-firewall.ps1
Normale Datei
@ -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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
21
setup_backup_cron.sh
Normale Datei
@ -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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren