Automated backup solution for All-Inkl webspace to Hetzner Storage Box via WebDAV. Single-file PHP script with web interface for monitoring and manual execution.
- 🚀 Simple Setup - Single PHP file, no dependencies
- 🌐 Web Interface - Monitor backup progress in real-time
- 🔒 Secure - HTTP Basic Auth protection
- 📦 Efficient - Creates compressed tar.gz archives
- ⏰ Retention Management - Automatic cleanup of old backups (local & remote)
- 📊 Live Logging - Real-time status updates during backup
- 🔄 WebDAV Upload - Direct upload to Hetzner Storage Box
- PHP 8.0 or higher
- All-Inkl webspace (or similar Linux hosting)
- Hetzner Storage Box with WebDAV access
tarcommand available on server- cURL extension enabled
-
Clone or download this repository to your webspace
-
Copy configuration file
cp .env.example .env
-
Edit
.envfile with your credentials:BACKUP_AUTH_USER=your-webui-username BACKUP_AUTH_PASS=your-webui-password HETZNER_HOST=https://u123456.your-storagebox.de HETZNER_USER=your-storagebox-username HETZNER_PASS=your-storagebox-password LOCAL_KEEP_DAYS=3 REMOTE_KEEP_DAYS=30
-
Protect your
.envfile by creating/editing.htaccess:<Files ".env"> Require all denied </Files>
-
Access the script via your browser:
https://yourdomain.com/path/to/backup.php
| Variable | Description | Default |
|---|---|---|
BACKUP_AUTH_USER |
Username for web interface access | - |
BACKUP_AUTH_PASS |
Password for web interface access | - |
HETZNER_HOST |
Your Storage Box WebDAV URL | - |
HETZNER_USER |
Storage Box username | - |
HETZNER_PASS |
Storage Box password | - |
LOCAL_KEEP_DAYS |
Days to keep local backups | 3 |
REMOTE_KEEP_DAYS |
Days to keep remote backups | 30 |
BASE_DIR |
Webspace root directory | Auto-detected |
- Open
backup.phpin your browser - Click "Start backup"
- Monitor progress in real-time
- View full log by clicking "Open full log"
Method 1: Using Webcron (Recommended for All-Inkl)
- Log into your All-Inkl KAS (Kunden-Adminbereich)
- Navigate to Tools → Cronjobs
- Click "Neuer Cronjob" (New Cronjob)
- Configure as follows:
- URL:
https://yourdomain.com/path/to/backup.php?start=1 - HTTP Auth Username: Your
BACKUP_AUTH_USERfrom.env - HTTP Auth Password: Your
BACKUP_AUTH_PASSfrom.env - Schedule: Daily at 2:00 AM (or preferred time)
- E-Mail notification: Optional (receive execution status)
- URL:
Method 2: Using External Cron Service
If you have access to an external server with cron:
# Daily backup at 2:00 AM
0 2 * * * curl -u "your-user:your-pass" "https://yourdomain.com/path/to/backup.php?start=1" > /dev/null 2>&1- Always use HTTPS - Basic Auth credentials are transmitted in plain text
- Protect
.envfile - Use.htaccessto deny access - Strong passwords - Use generated passwords with high entropy
- Regular updates - Keep PHP and server software up to date
- Backup verification - Regularly test backup restoration
- Webcron security - Use HTTP Auth in Webcron settings to prevent unauthorized access
your-webspace/
├── backup.php # Main script
├── .env # Configuration (DO NOT COMMIT!)
├── .env.example # Example configuration
├── .htaccess # Security rules
└── backup/ # Auto-created during first run
├── work/ # Temporary backup files
├── archive/ # Local backup archives
└── backup.log # Execution log
The following directories are automatically excluded from backups:
backup/- Backup directory itselfcache/- Cache directoriestmp/- Temporary files
- Check PHP error log
- Verify
.envconfiguration - Ensure
tarcommand is available:which tar - Check file permissions on backup directory
- Verify Hetzner credentials
- Test WebDAV connection manually
- Check Storage Box available space
- Ensure cURL extension is enabled
- Increase
max_execution_timein PHP configuration - Reduce backup size by excluding more directories
- Webcron typically has better timeout limits than browser execution
- Increase
memory_limitin PHP configuration - Archive size might exceed available memory
- Verify HTTP Auth credentials in Webcron settings
- Check if URL is accessible (test manually with Basic Auth)
- Review Webcron execution log in KAS interface
- Remote cleanup (Hetzner Storage Box) is not yet implemented
- No concurrent execution protection (lock mechanism)
- Large archives may cause memory issues
- Basic Auth is not encrypted (requires HTTPS)
- Implement remote backup cleanup via WebDAV PROPFIND
- Add lock mechanism to prevent concurrent executions
- Email notifications on success/failure
- Database backup integration (MySQL/MariaDB)
- Incremental backup support
- Multi-destination backup support
MIT License - see LICENSE file
Alexander Wagner (@AlexanderWagnerDev)
Contributions are welcome! Please feel free to submit a Pull Request.
Automatisierte Backup-Lösung für All-Inkl Webspace zu Hetzner Storage Box via WebDAV. Einzelnes PHP-Skript mit Web-Interface zur Überwachung und manuellen Ausführung.
- 🚀 Einfache Installation - Einzelne PHP-Datei, keine Abhängigkeiten
- 🌐 Web-Interface - Backup-Fortschritt in Echtzeit überwachen
- 🔒 Sicher - HTTP Basic Auth Schutz
- 📦 Effizient - Erstellt komprimierte tar.gz Archive
- ⏰ Aufbewahrungsmanagement - Automatisches Löschen alter Backups (lokal & remote)
- 📊 Live-Logging - Echtzeit-Statusupdates während des Backups
- 🔄 WebDAV-Upload - Direkter Upload zur Hetzner Storage Box
- PHP 8.0 oder höher
- All-Inkl Webspace (oder ähnliches Linux-Hosting)
- Hetzner Storage Box mit WebDAV-Zugang
tarBefehl auf dem Server verfügbar- cURL Extension aktiviert
-
Repository klonen oder herunterladen auf deinen Webspace
-
Konfigurationsdatei kopieren
cp .env.example .env
-
.envDatei bearbeiten mit deinen Zugangsdaten:BACKUP_AUTH_USER=dein-webui-benutzername BACKUP_AUTH_PASS=dein-webui-passwort HETZNER_HOST=https://u123456.your-storagebox.de HETZNER_USER=dein-storagebox-benutzername HETZNER_PASS=dein-storagebox-passwort LOCAL_KEEP_DAYS=3 REMOTE_KEEP_DAYS=30
-
.envDatei schützen durch Erstellen/Bearbeiten der.htaccess:<Files ".env"> Require all denied </Files>
-
Skript aufrufen über deinen Browser:
https://deinedomain.de/pfad/zu/backup.php
| Variable | Beschreibung | Standard |
|---|---|---|
BACKUP_AUTH_USER |
Benutzername für Web-Interface-Zugang | - |
BACKUP_AUTH_PASS |
Passwort für Web-Interface-Zugang | - |
HETZNER_HOST |
Deine Storage Box WebDAV-URL | - |
HETZNER_USER |
Storage Box Benutzername | - |
HETZNER_PASS |
Storage Box Passwort | - |
LOCAL_KEEP_DAYS |
Tage zum Aufbewahren lokaler Backups | 3 |
REMOTE_KEEP_DAYS |
Tage zum Aufbewahren Remote-Backups | 30 |
BASE_DIR |
Webspace-Hauptverzeichnis | Auto-erkannt |
- Öffne
backup.phpim Browser - Klicke auf "Start backup"
- Überwache den Fortschritt in Echtzeit
- Vollständiges Log anzeigen durch Klick auf "Open full log"
Methode 1: Webcron verwenden (Empfohlen für All-Inkl)
- Melde dich im All-Inkl KAS (Kunden-Adminbereich) an
- Navigiere zu Tools → Cronjobs
- Klicke auf "Neuer Cronjob"
- Konfiguriere wie folgt:
- URL:
https://deinedomain.de/pfad/zu/backup.php?start=1 - HTTP Auth Benutzername: Dein
BACKUP_AUTH_USERaus der.env - HTTP Auth Passwort: Dein
BACKUP_AUTH_PASSaus der.env - Zeitplan: Täglich um 2:00 Uhr (oder gewünschte Zeit)
- E-Mail Benachrichtigung: Optional (Ausführungsstatus erhalten)
- URL:
Methode 2: Externer Cron-Service
Falls du Zugriff auf einen externen Server mit Cron hast:
# Tägliches Backup um 2:00 Uhr
0 2 * * * curl -u "dein-user:dein-pass" "https://deinedomain.de/pfad/zu/backup.php?start=1" > /dev/null 2>&1- Immer HTTPS verwenden - Basic Auth Zugangsdaten werden im Klartext übertragen
.envDatei schützen - Verwende.htaccessum Zugriff zu verweigern- Starke Passwörter - Nutze generierte Passwörter mit hoher Entropie
- Regelmäßige Updates - Halte PHP und Server-Software aktuell
- Backup-Verifikation - Teste regelmäßig die Wiederherstellung
- Webcron-Sicherheit - Nutze HTTP Auth in den Webcron-Einstellungen um unautorisierten Zugriff zu verhindern
dein-webspace/
├── backup.php # Hauptskript
├── .env # Konfiguration (NICHT COMMITTEN!)
├── .env.example # Beispiel-Konfiguration
├── .htaccess # Sicherheitsregeln
└── backup/ # Wird beim ersten Lauf automatisch erstellt
├── work/ # Temporäre Backup-Dateien
├── archive/ # Lokale Backup-Archive
└── backup.log # Ausführungsprotokoll
Folgende Verzeichnisse werden automatisch vom Backup ausgeschlossen:
backup/- Backup-Verzeichnis selbstcache/- Cache-Verzeichnissetmp/- Temporäre Dateien
- PHP Error Log prüfen
.envKonfiguration verifizieren- Sicherstellen dass
tarverfügbar ist:which tar - Dateiberechtigungen im Backup-Verzeichnis prüfen
- Hetzner-Zugangsdaten überprüfen
- WebDAV-Verbindung manuell testen
- Verfügbaren Speicherplatz auf Storage Box prüfen
- Sicherstellen dass cURL Extension aktiviert ist
max_execution_timein PHP-Konfiguration erhöhen- Backup-Größe durch Ausschluss weiterer Verzeichnisse reduzieren
- Webcron hat typischerweise bessere Timeout-Limits als Browser-Ausführung
memory_limitin PHP-Konfiguration erhöhen- Archiv-Größe könnte verfügbaren Speicher überschreiten
- HTTP Auth Zugangsdaten in Webcron-Einstellungen überprüfen
- Prüfen ob URL erreichbar ist (manuell mit Basic Auth testen)
- Webcron-Ausführungslog im KAS-Interface überprüfen
- Remote-Cleanup (Hetzner Storage Box) ist noch nicht implementiert
- Kein Schutz vor gleichzeitiger Ausführung (Lock-Mechanismus)
- Große Archive können Speicherprobleme verursachen
- Basic Auth ist unverschlüsselt (erfordert HTTPS)
- Remote-Backup-Cleanup via WebDAV PROPFIND implementieren
- Lock-Mechanismus zur Verhinderung gleichzeitiger Ausführungen
- E-Mail-Benachrichtigungen bei Erfolg/Fehler
- Datenbank-Backup-Integration (MySQL/MariaDB)
- Inkrementelle Backup-Unterstützung
- Multi-Ziel-Backup-Unterstützung
MIT License - siehe LICENSE Datei
Alexander Wagner (@AlexanderWagnerDev)
Beiträge sind willkommen! Bitte reiche einen Pull Request ein.
🇬🇧 If you encounter any issues or have questions, please open an issue on GitHub.
🇩🇪 Bei Problemen oder Fragen öffne bitte ein Issue auf GitHub.