Eiko Wagenknecht
Softwareentwickler, Freiberufler & Gründer

All-in-One Backup-Skript für all-inkl.com

Eiko Wagenknecht

Nach der erfolgreichen Migration meiner Webseiten zu all-inkl.com stellte ich fest, dass eine automatisierte Sicherungsoption fehlte. Die verfügbaren Lösungen im Internet erfüllten nicht meine Anforderungen, weshalb ich beschloss, ein eigenes Backup-Skript in PHP zu entwickeln - mit nützlichen Funktionen wie automatischer Ausführung, E-Mail-Benachrichtigungen und Speicherplatzverwaltung.

Inhaltsverzeichnis

Über das Skript

Das resultierende Skript sichert alle Seiten und Datenbanken, die auf all-inkl.com gehostet sind, und bietet zusätzliche Komfortfunktionen, die in anderen Skripten fehlen.

Funktionen des Skripts

Konfiguration im Skript

Das vollständige Skript steht zum Download bereit (weiter unten). Hier sind einige wichtige Einstellungsbereiche:

// ########## START EDITING HERE ##########

// script settings
// -----------------------------------------------------------------------------
// use appropriate amount of memory and execution time. allowed values depend on
// your hoster (in this case probably all-inkl.com) and package.
$config["php"]["max_execution_time"] = 600; // seconds
$config["php"]["memory_limit"] = "256M"; // megabytes

// general backup settings
// -----------------------------------------------------------------------------
// the target directory is relative to the root of the webspace and has to be
// entered without a trailing slash (e.g. "backup" results in
// /www/htdocs/w0123456/backup). make sure to store nothing else in here because
// old files will be deleted as soon as the quota is met!
$config["backup"]["enabled"] = true; // only disable for testing purposes
$config["backup"]["cleanup"] = true; // disable to never remove any backups
$config["backup"]["target_directory"] = "backup";
$config["backup"]["quota"] = 100 * 1024**3; // in bytes
$config["backup"]["compression_algorithm"] = "gz"; // "gz" = fast, "bz2" = small

// mail settings
// -----------------------------------------------------------------------------
$config["mail"]["enabled"] = true;
$config["mail"]["errors_only"] = false;
$config["mail"]["from"] = "[email protected]";
$config["mail"]["to"] = "[email protected]";
$config["mail"]["subject"] = "Backup complete";

// ftp settings
// -----------------------------------------------------------------------------
$config["ftp"]["enabled"] = false;
$config["ftp"]["unsecure_fallback"] = true; // warning! files can be sent unencrypted
$config["ftp"]["host"] = "ftp.example.com";
$config["ftp"]["port"] = "21";
$config["ftp"]["user"] = "user";
$config["ftp"]["pass"] = "password";
$config["ftp"]["dir"] = "/backups"; // must exist on the server

// locale settings
$config["locale"]["timestamp_format"] = "Y-m-d_H-i-s";
$config["locale"]["date_format"] = "Y-m-d";
$config["locale"]["filename_timestamp_format"] = "Y-m-d";

// sites settings
// -----------------------------------------------------------------------------
// a site is a set of folders and databases that should be archived together.
// to declare multiple sites just copy the settings block like this:
// $sites[] = [...data of site 1...];
// $sites[] = [...data of site 2...];
// - description: a short summary of the site (e.g. "dummy.com main page").
//   used for logging purposes.
// - backup_prefix: backup files will use this as a prefix. be sure to include
//   only characters a-z, A-Z, 0-9
//   and underscores here to be on the safe side.
// - folders: an array of all folders that belong to the site (subfolders are
//   included automatically).
//   folders are relative to the ftp root directory.
// - databases: an array of all databases that belong to the site.
//   - db: database name.
//   - user: username. for all-inkl.com this equals the database name.
//   - pass: password for the database.
$sites[] = [
	"description" => "your-domain.com WordPress",
	"backup_prefix" => "your_domain_de",
	"folders" => [
		"your-domain.de/www"
	],
	"databases" => [
		[ "db" => "d0123456", "user" => "d0123456", "pass" => "password123" ]
	]
];

// ########## STOP EDITING HERE (unless you know what you're doing) ##########

Die Optionen sind weitgehend selbsterklärend oder im Skript kommentiert. Bitte passt vor der Ausführung insbesondere die E-Mail-Adresse an.

Hinweise zur Konfiguration

Einrichtung

Die korrekt konfigurierte Datei backup.php muss nun auf all-inkl.com übertragen werden, um dort täglich ausgeführt zu werden. Die folgenden Schritte erläutern den Prozess.

  1. Subdomain erstellen: Zunächst erstellen wir eine neue Subdomain. In diesem Beispiel verwende ich „backup.phenx.de” (Hinweis: Diese Subdomain wird nicht produktiv genutzt).
  1. Backup-Verzeichnis anlegen: Im neu erstellten Verzeichnis legen wir mit einem FTP-Client ein weiteres Verzeichnis namens „backup” an. Dies ist notwendig, um die Subdomain mit SSL zu schützen, da Let’s Encrypt nicht zugreifen kann, wenn der Hauptordner geschützt ist.
  1. Verzeichnisschutz einrichten: Als nächstes schützen wir das neue Verzeichnis mit einem Benutzernamen und Passwort. Diese Anmeldedaten werden später für den Cron-Job benötigt, um das Skript aufzurufen. Auch ein manueller Aufruf über den Browser funktioniert mit diesen Anmeldedaten.
  1. Cron-Job einrichten: Je nach Bedarf legen wir einen Cron-Job an, zum Beispiel für eine tägliche Ausführung. Die URL muss auf das cron_backup.php Skript verweisen. Eine E-Mail-Adresse ist nicht erforderlich, da das Skript die Benachrichtigungen selbst verwaltet.
  1. SSL-Zertifikat aktivieren: Wir schützen die Seite nun mit einem Let’s Encrypt SSL-Zertifikat. Dazu gehen wir auf die „bearbeiten” Seite der Subdomain und dann auf „SSL-Schutz” - bearbeiten. Nach Bestätigung der AGBs ist der Schutz aktiv.
  1. HTTP auf HTTPS umleiten und HSTS aktivieren: Optional können wir die Umleitung von HTTP auf HTTPS aktivieren und HSTS einschalten, um die Sicherheit zu erhöhen.
  1. Backupskripte platzieren: Zum Abschluss legen wir die Backupskripte in das passwortgeschützte Verzeichnis (erkennbar an den Dateien .htaccess und .htpasswd).
  1. Manueller Aufruf des Skripts: Nun können wir das Skript manuell aufrufen, in meinem Beispiel unter https://backup.phenx.de/backup/backup.php. Bei der Eingabeaufforderung geben wir die zuvor festgelegten Benutzerdaten ein.

Das Ergebnis wird sowohl im Browser als auch per E-Mail angezeigt (Screenshots nach Hinzufügen weiterer Seiten).

Download

Die neueste Version des Skriptes findet ihr auf Github unter webhost_backup. Zum Herunterladen geht einfach zu „Code” und wählt „Download ZIP”.

Falls ihr zur Entwicklung beitragen möchtet, könnt ihr gerne Issues oder Pull Requests auf Github erstellen. Ich sehe das dann direkt dort.

Keine Kommentare? Kein Problem.

Dieser Blog unterstützt keine Kommentare, aber deine Gedanken und Fragen sind immer willkommen. Du erreichst mich mich über die Kontaktdaten im Footer unten.

Unterstützung

Wenn diese Seite für dich hilfreich war und du dich bei mir bedanken möchtest, dann freue ich mich ganz außerordentlich darüber, wenn du für deinen nächsten Einkauf bei amazon.de über diesen Link gehst. Ich bekomme dann eine kleine Provision, für dich kostet es keinen Cent extra. Wenn du mich lieber anders unterstützen möchtest, findest du hier weitere Möglichkeiten.