Home » Probleme und Lösungen, Skripte

HiDrive für automatische Webspace-Backups nutzen

1 Juli 2011 2 Kommentare Druckversion

Artikel-Icon

Der Online-Speicher HiDrive von Strato ist aufgrund seiner vielfältigen Schnittstellen sehr flexibel einsetzbar. In dem folgenden Artikel erkläre ich, wie ich mit etwas Perl-Code den Online-Speicher für automatische Backups meines Webspaces nutze.

Update 01.12.2011: Die WebDav-Adresse des HiDrive-Server hat sich geändert, man kann/muss jetzt nicht mehr den Benutzernamen direkt in der URL angeben. Ich hab das Skript dementsprechend angepasst.

Der Vorteil von HiDrive im Gegensatz zu anderen Online-Speichern ist zweifelsohne die Vielfalt an unterstützen Schnittstellen für den Zugriff,  vom normalen Webzugriff über https, über  SMB/CIF und WebDAV bis zuFTPS ist alles dabei. Dies hat mich dazu bewogen ein kleines Perl-Skript zu schreiben, welches mir meinen gesamten Webspace sichert und auf den HiDrive-Speicher kopiert. Das Ganze funktioniert bei meinem Hoster knallhart.de problemlos und ist schon seit einigen Zeit im Einsatz.

Vorab ein paar Erklärungen zum Skript:

Das Perl-Skript verpackt den gesamten Webspace zunächst als ZIP und schickt die Datei anschließend über eine gesicherte WebDAV-Verbindung zum HiDrive-Server.  Alle relevanten Einstellungen des Skripts werden durch die Variablen im oberen Teil gesteuert. Zum Testen kann das Skript regulär über den Webbrowser aufgerufen werden, die Ausgaben werden zusätzlich in eine Protokolldatei geschrieben, so dass man auch nach dem automatisierten Aufruf die Ausgaben später prüfen kann.

Hier nun das komplette Sicherungsskript, es steht unter der Apache License 2.0:
(den Download gibt es weiter unter)

#!/usr/bin/perl -w
# ################
# Backup-Skript V1
# ################
# Dieses Skript erstellt Datenbackups
# und lädt diese in ein WebDav-Verzechnis
#
# Author: Tom Schreiber (tom@tomhost.de)
# ################

use strict;
use warnings;

# Eigener Pfad für Module
# (eventuell bei einigen Webspace-Providern notwendig)
# -> absoluter Pfad ist notwendig
# use lib "/web/www/myspace/html/dev/perl/lib";

# Module laden
use CGI qw(:standard);
use CGI::Carp qw( fatalsToBrowser );
use Net::SMTP_auth;
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
use MIME::Lite;
use HTTP::DAV;
use DateTime;

# Sicherungseinstellungen
my $webspace = "/web/www/tomhos/html"; #absoluter Pfad zum Webspace
my $zip_temp = "/tmp"; # temporärer lokaler Speicher für ZIP

# WebDav-Einstellungen
my $url         = "https://webdav.hidrive.strato.com:443";
my $user        = "my-username";
my $passw       = "my-password";
my $path_files  = "/users/my-username/backup/webspace";

# Logfile
my $logfile = 'backup.log';

# FUNCTION: Schreibt LogEintrag
sub Log
{
  my($txt) = @_;
  if(!($txt =~ m/^Can't locate Authen/))
  {
    open (my $LOG, '>>'.$logfile);
    print $LOG DateTime->now->ymd." ".DateTime->now->hms.": ".$txt."\n";
    print DateTime->now->ymd." ".DateTime->now->hms.": ".$txt."
";
    close($LOG);
  }
}
#################################

# MAIN:
print header;
print start_html({-title => 'Backup-Skript'});
print "Backup-Skript";

#Logfile testen
open (my $LOG, '>>'.$logfile)
  or die ("ERROR: Fehler beim Öffnen der Logdatei");
close($LOG);

# Schreibe ab jetzt DIE-Meldungen in Logfile
$SIG{__DIE__} = sub {Log(@_);};

# WebDav initialisieren
my $webdav = HTTP::DAV->new();
$webdav->credentials(
  -user  => $user,
  -pass  => $passw,
  -url   => $url,
  -realm => "User Auth"
);
$webdav->open(-url => $url)
  or die("ERROR: Fehler beim Verbinden mit $url: ".$webdav->message);

# Aktuelles Datum bestimmen
my $dt = DateTime->now;

# Dateiname bestimmen
my $filename = "backup_".$dt->ymd('_').".zip";

# Backup zunächst löschen (falls noch vorhanden)
unlink("/tmp/$filename");

# Backup durchführen
Log("JOB: Daten-Backup wird erstellt");

# Neue Zip-Datei erstellen
my $zip = Archive::Zip->new();
$zip->addTree($webspace);
$zip->writeToFileNamed("$zip_temp/$filename");

 # Backup hochladen
if (!$webdav->put(
  -local => "$zip_temp/$filename",
  -url => $url.$path_files))
{
  Log("ERROR: Fehler beim Hochladen des Daten-Backups: "
    .$webdav->message);
}

# Backup nach Upload löschen
unlink("$zip_temp/$filename");

print end_html;

Download

Weiterführende Links

Weitere Netzwerke:
Reddit Digg del.icio.us StumbleUpon Xing Google Bookmarks

2 Kommentare »

  • jens schrieb:

    hallo. das per modul HTTP::DAV ist bei meinem anbieter (1und1) leider nicht installiert. was kann ich da machen? und SMTP_auth heisst nur SMTP od. ist dies ein anderes Modul?

    Gruss, Jens

  • Tom Schreiber schrieb:

    Hallo,
    die benötigen Perl-Module kann man auch auf dem Webspace hinterlegen und den Pfad mit use lib “/absoluter/pfad/zu/modulen” einbinden (gleich zu Beginn des Skriptes). Am Besten funktioniert dies wenn man eine lokale Perl-Testumgebung hat und von dort die benötigen Module dann kopiert (die meisten Module sind plattformunabhängig).

    Das Modul SMTP sollte die Authentifizierungs-Schnittstelle mitbringen.

    Grüße,
    Tom

Schreiben Sie einen Kommentar zum Artikel

Hinweise: Es wird der Gravatar-Dienst unterstützt (kurze Erklärung zu Gravatar). Weiterhin können Sie folgende Tags in den Kommentaren verwenden:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>