Das safe-gem der Firma Astrails führt regelmäßige revisionierte Backups von Ordnern und Datenbanken durch. Es bietet einem dabei eine kompakte DSL und kann die Daten wahlweise verschlüsseln und auf S3-Buckets duplizieren.
Kürzlich ist der Support für PostgreSQL-Datenbanken dazugekommen und damit eignet sich die Sache vielleicht für unser Firmenwiki. Ich habe als ersten Test meinen EC2-Host mit diesem Blog aufgetakelt, den ich bisher nur mit manuellen tars und mysqldumps gesichert hatte.
die Installation
Man nimmt direkt die github-Version und erzeugt eine default-Konfiguration:
# gem install astrails-safe --source http://gems.github.com/ Successfully installed astrails-safe-0.1.9 1 gem installed Installing ri documentation for astrails-safe-0.1.9... Installing RDoc documentation for astrails-safe-0.1.9... # astrails-safe /root/my-backup.conf ERROR: Created default /root/my-backup.conf. Please edit and run again.
Konfiguration
Es folgt eine Beispielkonfiguration in Ausschnitten – das default-File ist gut kommentiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
safe do local do path "/mnt/backup/:kind" end s3 do key "my-Amazon-Key-here" secret "my-secret-Amazon-secret-here" bucket "the-bucket-name" path "backups/:kind/" # this is default end gpg do key "fw@bm.net" end keep do local 4 # keep 4 local backups s3 20 # keep 20 S3 backups end mysqldump do options "-ceKq --single-transaction --create-options" user "root" password "p4ssw0rd" socket "/var/run/mysqld/mysqld.sock" database :mephisto end tar do archive "etc-files" do files "/etc" end archive "root-files" do files "/root" end archive "mephisto" do files "/var/www/mephisto/" exclude ["/var/www/mephisto/log", "/var/www/mephisto/tmp"] end end end |
Wie man sieht, ist das Ganze recht übersichtlich. Damit die gpg-Verschlüsselung funktioniert, benötigen wir ein Schlüsselpaar:
gpg-Schlüsselpaar erzeugen
Anfangs hatte ich die symmetrische Verschlüsselung mit einem Passwort versucht, aber das hat mit der Version 1.9 des gem nicht so recht geklappt – wenn man ein Schlüsselpaar spendiert, funktioniert es aber prima. Das Paar erzeugt man am Besten auf einem anderen Rechner und kopiert nur den öffentlichen Schlüssel auf den Backup-Host.
> gpg --key-gen ... > gpg -a --export fw@bm.net > fw@bm.net.pub > scp fw@bm.net.pub root@sat.bm.net:/root/
Auf dem Backup-Host (hier sat.bm.net) wird der öffentliche Schlüssel in den Schlüsselring des Backup-Users importiert (hier root) und als vertrauenswürdig eingestuft:
# gpg --import fw@bm.net.pub gpg: key 45CA9403: public key "F.W. fw@bm.net" imported gpg: Total number processed: 1 gpg: imported: 1 # gpg --edit-key fw@bm.net ... Command> trust ... 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 ... Command> quit
Wer möchte, kann auf dem lokalen Rechner noch eine Kopie des privaten Schlüssels anfertigen – nur für den Fall:
$ gpg -a --export-secret-key fw@bm.net > fw@bm.net.key
die Automation
Das wär’s schon. Es fehlt nur noch die Automation via crond – z.B. morgens, etwa um drei Uhr:
10 3 * * * /opt/ruby-enterprise/bin/astrails-safe /root/my-backup.conf >/dev/null 2>&1