Wettbewerb: Script für Backupspace

  • Für unser neues Feature, dem Backupspace für vServer, suchen wir für unsere Kunden ein Script was diesen hilft automatisiert Backups anzulegen.


    Folgende Anforderungen haben wir an das Script:



    • Backups sollen automatisiert auf dem Backupspace angelegt werden können, z.B. täglich.
    • Backups sollen inkrementell abgelegt werden, sprich nur geänderte Dateien sollen erneut gespeichert werden
    • Über Config-Files sollen die zu sichernden Datenbanken und Verzeichnisse simpel angegeben werden können


    Beispiel einer Config-Datei:

    Code
    1. #Datenbank User Passwort
    2. db1 user1 passwort1
    3. db2 user2 passwort2

    Was gibt es als Belohnung für die Arbeit?



    • Einen bei uns gebuchten vServer ein Jahr kostenlos
    • Einen passenden Backupspace ein Jahr kostenlos


    Die fertigen Scripte können hier vorgestellt werden. Anschließend können die Scripte hier bewertet werden. Die ersten drei Scripte gewinnen die oben genannte Belohnung.


    Die drei Scripte die die Ausschreibung gewonnen haben, werden wir dann im Wiki den Kunden zur Verfügung stellen.


    Die Ausschreibung endet, sobald drei brauchbare Scripte hier vorgestellt wurden.


    Wir wissen das es viele fertige Scripte dafür gibt. Es sollte aber simpel und effektiv sein. Daher ein eigenes.

  • Quote

    Wir wissen das es viele fertige Scripte dafür gibt. Es sollte aber simpel und effektiv sein. Daher ein eigenes.


    Ich hab mich lange mit der Problematik beschäftigt und habe nach unzähligem Testen duplicity als sehr einfach und effektiv als klaren Sieger gewählt.


    Gerne verfasse ich dafür auch, sofern zugelassen ein Ausführliches How to, sodass auch jemand der 0 Ahnung von Linux hat sein System ohne Probleme backuppen kann.

  • Quote

    Ein Backlink aus dem Wiki ist möglich. Die Rechte von dem Script müssten aber an uns über gehen. Dafür gibt es ja auch eine Belohnung im Wert von bis zu 347,88 Euro (je nach vServer).

    Wollte gerade sagen. Es ist ja nicht so, dass man für das Script nichts oder wenig bekäme. Da kann man ruhig mal auf die Rechte an seinem Laien*-Script verzichten.

    *) Soll jetzt nicht abwertend klingen, aber ist ja so. Machst du das professionell? Hast du studiert und/oder dicke Ausbildungen oder Zertifikate? Keine sagt, das Scripts von Laien nicht gut sein können, bitte nicht falsch auffassen.

    Mein Server:
    v(olks)Server 1. Serie: 2,5GHz, 1024MB RAM, 1024MB Swap, 2x60GB-Raid1-HDD, Traffic-Flat
    Node:
    78.46.117.9x | hos-tr2.ex3k4.rz7.hetzner.de

  • [netcup] Felix;21812 wrote:

    Die Rechte von dem Script müssten aber an uns über gehen. Dafür gibt es ja auch eine Belohnung im Wert von bis zu 347,88 Euro (je nach vServer).

    Hm ne. Dann halte ich mich da lieber raus.
    Scripte/Programme die ich privat für andere baue veröffentliche ich nur als freie Software. ;)

  • Das ist auch sehr nobel :)
    Aber netcup will das wahrscheinlich aus rechtlichen Gründen...

    Mein Server:
    v(olks)Server 1. Serie: 2,5GHz, 1024MB RAM, 1024MB Swap, 2x60GB-Raid1-HDD, Traffic-Flat
    Node:
    78.46.117.9x | hos-tr2.ex3k4.rz7.hetzner.de

  • Ja, dahinter stehen wieder komplexe Vereinbarungen mit unseren Versicherungen. Unsere Haftpflicht setzt als Bedingung voraus, dass alles auf unseren Websites (Forum ausgeschlossen), unser Eigentum ist. Auch Überwacht ein Rechtsanwalt unser geistiges Eigentum.

  • System Backup mit Duplicity


    Auf folgendem System getestet:
    Debian Lenny


    Zuerst loggen wir uns per SSH auf unserem Server ein.
    Wir updaten das System:

    Code
    1. aptitude update
    2. aptitude safe-upgrade


    Danach installieren wir uns Python sowie librsync, lftp und ncftp

    Code
    1. aptitude install python-dev
    2. aptitude install librsync-dev
    3. aptitude install ncftp
    4. aptitude install lftp


    Anschliesend laden wir uns Duplicity runter

    Code
    1. cd /tmp
    2. wget http://launchpad.net/duplicity/0.6-series/0.6.08b/+download/duplicity-0.6.08b.tar.gz

    Wenn wir das gemacht haben, entpacken und installieren wir duplicity

    Code
    1. tar xvzf duplicity-0.6.08b.tar.gz
    2. cd duplicity-0.6.08b
    3. python setup.py install


    Jetzt
    erstellen wir uns einen GPG Key

    Code
    1. gpg –-gen-key

    (beim kopieren aufpassen, lieber von Hand eingeben)


    Alle nun kommenden Fragen bestätigen wir durch das drücken unserer [ENTER] Taste.
    Bis folgende Frage auftauch:
    Is this correct? (y/N) Das bestätigen wir mit y


    Anschliesend gibst du dort die geforderten Eingaben an (Dein Name, Email Adresse etc.


    Bis folgende Frage kommt:

    Quote

    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

    Dort bestätigen wir alles mit O


    Jetzt muss eine Passphrase angegeben werden - sprich Passwort deiner wahl angeben und bestätigen. - GUT MERKEN!


    Anschliesend wird der GPG Key erstellt.
    (Das kann ein weilchen dauern, um das ganze zu beschleunigen hilft es eine 2te Konsole zu öffnen und ein paar Eingaben zu tätigen)



    Sobald der Key erstellt wurde, erhaltet ihr so eine Aussage:

    Hier müsst ihr euch den Key in folgender Zeile merken:

    Quote

    gpg: key XXXXXXX marked as ultimately trusted


    Danach installieren wir uns Duplicity Wrapper Script:

    Code
    1. cd /tmp
    2. wget http://sourceforge.net/projects/ftplicity/files/duply%20%28simple%20duplicity%29/1.5.x/duply_1.5.2.3.tgz/download
    3. tar xvzf duply_1.5.2.3.tgz
    4. cp duply_1.5.2.3/duply /usr/local/bin


    Darauf erstellen wir uns ein Backup Profil:

    Code
    1. duply ProfilName create

    (ProfilName durch den gewünschten Namen ersetzen z.B. Server1)


    Jetzt passen wir unsere Config Datei an:

    Code
    1. cd /root/.duply/ProfilName
    2. nano conf


    Und passen in der Datei folgende Zeilen an:

    Quote

    GPG_KEY='_KEY_ID_'
    GPG_PW='_GPG_PASSWORD_'

    Statt _KEY_ID_ gebt ihr euren GPG Key ein.
    Statt _GPG__ gebt ihr eure Passphrase ein, die Ihr beim erstellen des GPG Keys eingegeben habt.



    Danach ersetzen wir in der Conf folgende Zeile:

    Code
    1. TARGET='scheme://user[:password]@host[:port]/[/]path'

    Mit:

    Code
    1. TARGET='ftp://FTPBenutzer@FTPserverhostname/BackupVerzeichniss/'
    2. TARGET_PW='FTPBenutzerPasswort'

    (Natürlich alle Angaben bei euch anpassen)


    Wenn ihr das gemacht habt, passen wir noch folgende Angabe an:

    Code
    1. # base directory to backup
    2. SOURCE='/path/of/source'

    Hier geben wir an, welche Verzeichnisse wir sichern wollen.


    In unserem Beispiel sichern wir den gesamten Server geben dort also folgendes an:


    Code
    1. # base directory to backup
    2. SOURCE='/'

    Wir speichern die Datei ab.


    Der Datei geben wir jetzt die richtigen Rechte

    Code
    1. chmod 600 /root/.duply/ProfilName/conf

    Anschliesend erstellen wir uns das Backup Verzeichniss, welches wir in der Config angegeben haben auf unserem FTP Backup Space

    Code
    1. lftp ftpbenutzername:ftppasswort@ftpserverhostname.de

    (Natürlich alle Angaben bei euch anpassen)


    Wenn ihr anschliesend enter drückt müsste das ganze so aussehen:

    Quote

    lftp ftpbenutzername:ftppasswort@ftpserverhostname.de:~>


    Jetzt gebt ihr folgendes ein:

    Code
    1. mkdir BackupVerzeichniss

    (Das BackupVerzeichniss, dass ihr vorher in der Config angegeben habt).
    Nun schliesen wir die verbindund durch die Eingabe von

    Code
    1. exit



    Da wir den ganzen Server sichern wollen, müssen wir noch eine exclude Datei anlegen, die bestimmte Verzeichnisse vom Backup ausschliest, da das Backup sonst Fehlerhaft wird.

    Code
    1. nano /root/.duply/ProfilName/exclude


    Dort geben wir folgendes ein:

    Anschliesend speichern wir die Datei ab und geben Ihr die passenden Rechte:

    Code
    1. chmod 600 /root/.duply/ProfilName/exclude


    Danach legen wir erstmal ein Full Backup an:

    Code
    1. duply ProfilName backup

    (ProfilName wieder anpassen)




    Sobald das Backup durch ist, legen wir uns einen Cronjob an, der folgendes bewirkt:


    * 1 mal im Monat ein Full Backup
    * alle 12 Stunden ein inkrementelles Backup
    * Veraltete Backups werden gelöscht (älter als 1 Monat)


    also geben wir folgendes ein:

    Code
    1. crontab -e

    und fügen folgenden Inhalt ein:

    Code
    1. # run the (incremental) backup every 12 hours!
    2. 00 */12 * * * /usr/local/bin/duply ProfilName backup
    3. # do a full backup once per month & delete old backups
    4. 27 3 1 * * /usr/local/bin/duply ProfilName full && /usr/local/bin/duply ProfilName purge --force

    (ProfilName wieder anpassen)
    Und speichern das ganze wieder ab.



    Und das wars auch schon, die Backups werden anschliesend immer automatisch erstellt und gelöscht (sofern veraltet) und jeder Admin kann beruhigt schlafen ;)




    ------




    Wer vor einem Backup noch seine gesamten MYSQL Datenbanken backuppen will, muss folgendes machen:


    Code
    1. nano /root/.duply/ProfilName/pre

    (ProfilName natürlich wieder anpassen)
    Dort fügen wir folgendes ein:

    Code
    1. /usr/bin/mysqldump –-all-databases -u root -pDEINMYSQLROOTPASSWORT > /home/exampleuser/db.sql

    DEINMYSQLROOTPASSWORT dort schreibst du natürlich dein Mysql Root Passwort hin.
    Zum schluss machen wir die Datei ausführbar:

    Code
    1. chmod 700 /root/.duply/ProfilName/pre

    (ProfilName natürlich wieder anpassen)


    Das ganze bewirkt, dass jetzt immer vor dem Backup alle Mysql Datenbanken im Ordner /mysqldump/ gesichert werden.
    Beachte dabei aber, dass das Backup die Mysql Datenbank während des Backups sperrt, damit keine Inkonsistenz entsteht.
    Sprich Websites die auf die Datenbank zugreifen, werden eben jene für den Dump nicht erreichen können.
    Bei kleinen Datenbanken geht das allerdings sehr schnell, so dass das ganze nicht ganz so schlimm ist.



    -------



    Zum Schluss noch ein paar Beispiel befehle:


    Veraltete Backups anzeigen und löschen:

    Code
    1. duply purge ProfilName –force

    Komplettes Backup nach /tmp zurückspielen:

    Code
    1. duply ProfilName restore /tmp

    z.B. die Datei test.php von vor 2 Tagen in /tmp wiederherstellen:

    Code
    1. duply ProfilName fetch test.php /tmp 2D

    Zu Duply:


    Durch die Eingabe von

    Code
    1. duply usage

    erhaltet ihr eine Übersicht an Befehlen



    zusätzliche Infos:
    http://duplicity.nongnu.org/



    Viel Erfolg ;)

  • Das sich howtos für die selbe Software wohl ähneln, ist wohl nicht zu vermeiden, schlieslich müssen ja mehr oder weniger die selben befehle verwendet werden.


    Im ispCP howto ist aber unteranderem ne veraltete Version verwendet, deswegen funktionieren die meisten Befehle wie sie dort stehen auch nicht mehr.

  • Arbeitet hier noch jemand aktiv an einer Lösung?
    Hab mich, dadurch das ich auch FTP Backupspace habe, mal an eine Lösung gemacht.


    Die ist auch fast fertig. :)


    Aktuelle Features:

    • Backup auf die Minute genau Planbar
    • Backup über FTP und SSH (auch mit Keys)
    • Backup von Ordnern und MySQL Datenbanken
    • Konfigurierbar über XML Datei
    • Backups die älter als x Tage sind automatisch löschen
  • sim4000;23218 wrote:

    Die ist auch fast fertig. :)


    Ich habe zwar eine Lösung, wäre aber auch an deiner Interessiert. Wie weit bist du? :cool: