Auto-Backup zu Amazon S3
I bin in letzter Zeit sehr kritisch worn, wos die Sicherheit von meine Backups angeht. Grod a, weil i mit meim V-Server (auf dem unter Ondrem a de Webseitn ghostet wird) relativ vül experimentier und gegebenenfalls amoi a Konfiguration vahaue. Noch dazu liab i des guate Gfühl, des ma hot, auf am frischen, sauberen System zu orbeitn, und bin entsprechend sehr "Reinstall-freudig". Dabei kann's teilweise sehr nervig sei, bestehende Konfigurationen, Dateien und sonstiges, wos ma si so eingrichtet hot, imma manuell zu backupen. Wos liegt also näher, ois si automatisch Backups von seine Dateien zu ziagn? Dazu hob i ma vor kurzem a klans Skript gschriebn, des i jetzt auf meim Git veröffentlicht hob.
Zum Findn is des Ganze do: github.com/devdavede/s3backup
De Installation / Ausführung is recht einfach.
Schritt 1: S3 Bucket erstöin
I geh amoi davon aus, dass du da scho an Amazon-Web-Services-Account eingrichtet host. Wenn ned, kannst des do nochholn: aws.amazon.com
Danach gehst in den Bereich S3, indem du oben in die Suche S3 eintippst, klickst auf Bucket erstellen und gibst an Nama und a Region für den Bucket ein.
Du soitast ACLs deaktiviern und den gesamten öffentlichen Zugriff ebenfalls deaktiviern (wos passiert, wennst den Schritt übersiehst, kannst do nochlesn: rudrasarkar.medium.com - how-i-hacked-92k-users).
Versionierung hob i bei mir deaktiviert (es liegt an dir, ob du a Dateiversionierung wüst. I hob mi dagegn entschieden, weil i imma nur die neueste Version von meine Dateien abrufn wü) und die Verschlüsselung a (a do liegt's an dir, ob du mit oda ohne Verschlüsselung orbeiten wüst).
Im nächsten Schritt muasst an Nutzernama wähln, und ois Zugriffstyp wähist Zugriffsschlüssel - Programmgesteuerter Zugriff.
Im Schritt Berechtigungen wähist "Vorhandene Richtlinien direkt anfügen" und do "AmazonS3FullAccess". Klick auf Weiter: Tags, do muasst nix tun.
Geh zum nächsten Schritt und kopier da do die Werte unter Zugriffsschlüssel-ID und Geheimer Zugriffsschlüssel. Diese Schlüssel sand gheim und du soitast sie definitiv ned weitergebn - jeder, der im Besitz dera Schlüsselkombination is, kann sonst auf deine Dateien zugreifn.
Voilà, Schritt oans is erledigt. Du host jetzt an Amazon-S3-Bucket, auf den du via API zugreifn kannst.
Schritt 2: Zugangsdaten einrichtn
Es gibt jetzt zwoa Möglichkeiten, di gegnüber S3 zu authentifiziern.
Möglichkeit oans besteht drin, a Credentials-Datei anzulegn. Dazu erstöst a Datei unter ~/.aws/credentials mit folgendem Inhalt:
[default]
aws_access_key_id = <zugriffsschlüsselid>
aws_secret_access_key = <geheimerzugrifsschlüssel>
und a Datei unter ~/.aws/config mit folgendem Inhalt:
[default]
region = <region>
(soitast da ned gmerkt hom, in wöcher Region du den Bucket erzeugt host, kannst des über die Webmanagementkonsole nochschaun)
Des woar's a scho, des Python-Skript kann si jetzt gegnüber S3 mit dene Daten authentifiziern.
Möglichkeit zwoa besteht drin, die Zugangsdaten im Skript direkt einzutrogn (siehe die Variablen aws_access_key_id, aws_secret_access_key und region_name). Dieses Vorgehen is aber ned zum Empfehln, weil die Zugangsdaten in dem Foi ungeschützt für jeden sichtbar sand, der Zugriff aufs Skript hot).
Schritt 3: Erstöin vo da my.cnf
Wennst die Möglichkeit nutzn wüst, deine Datenbank a zu backupen, muasst die Zugangsdaten zur Datenbank hinterlegn. Am besten machst des (wenn ned scho gschehn) via my.cnf.
Tipp dazu folgende Befehle in die Shell:
m=`which mysqld`
$m --verbose --help | grep -A 1 "Default options"
und du kriagst den Pfad (idR /etc/my.cnf) zu deiner my.cnf
Öffne die jetzt und füg folgenden Teil ans End von da Datei
[client]
user=<deinmysqlrootusername>
password=<deinmysqlrootpasswort>
That's it. Danach kann si dein Nutzer ohne Angabe von Nutzername/Passwort in die MySQL-Shell einloggn.
Alternativ a do wieda: Du kannst die Zugangsdaten direkt im Skript eingebn. De Nachteile davon hob i ja scho oben erwähnt :-)
Schritt 4: Konfigurieren vom Skript
Lad des Skript jetzt auf dein Server hoch und bearbeit's a bissl. Folgende Variablen miassn bearbeitet wern:
- entities = A Array von Ordnern oda Dateien, de (inkl. Unterordner!) gebackupt wern soin
- bucketname = Da Nama von deim S3 Bucket
- db_path = Da Pfad zur Datenbank, in der de Prüfsummen von de Dateien gspeichert wern
- aws_access_key_id = Dein AWS Access Key. Auf None lossn, wennst die config-Datei aus Schritt 2 valwendst
- aws_secret_access_key = Dein AWS Secret Key. Auf None lossn, wennst die config-Datei aus Schritt 2 valwendst
- region_name = Da Nama von deiner Bucket-Region. Auf None lossn, wennst die config-Datei aus Schritt 2 valwendst
- backup_databases = True, wenn Backups von olle Datenbanken erstöt wern soin, sonst False
- mysql_username = Dein MySQL-Nutzernama. Auf None lossn, wennst die config-Datei aus Schritt 3 valwendst
- mysql_password = Dein MySQL-Passwort. Auf None lossn, wennst die config-Datei aus Schritt 2 valwendst
- mysql_tmp_dump_file = Dorthin wird a temporärer Datenbankdump erzeugt. Da Ordner muass beschreibbar sei.
- s3_mysql_dump_path = Da Pfad von deim Datenbankdump in deim S3 Bucket
Schritt 5: Dependencies lodn
Für den Upload zu S3 valwendet des Skript Boto
Außerdem wird TinyDB valwendet, um die Prüfsummen von de Dateien in ana klanen Datenbank zu speichern (da Pfad in da Variable db_path)
Um olle Dependencies zu installiern, führ einfach folgenden Befehl in da Shell aus:
pip3 install -r requirements.txt
damit wern olle benötigten Pakete installiert.
Schritt 6: Run it!
Starte an Testlauf durch Eingabe vom Befehl
python3 s3backup.py
und schau, wenn des Skript fertig durchglaufn is, in deinen S3 Bucket. Do soitast jetzt in da gleichen Hierarchie wia auf deim Server a 1:1-Kopie von olle Dateien/Ordner/Unterordner sehn, de in da Variable entities angebn wurden.
Schritt 7 (Extra): Automatisiern via Cronjob
Des Ganze lasst si a einfach via Cronjob automatisiern.
Dazu finden mia zuerst amoi raus, wo si unsere Python3-Installation befindet:
which python3
des spuckt uns so wos wia /usr/bin/python3 aus.
Danach gebn mia
crontab -e
ein und do folgendes
0 0 */5 * * <Pfad-zu-Python3> <Pfad-zum-backup-skript.py>
Mit Strg+X (schließen) und Y (Ja, speichern!) quittiern. Damit wird olle 5 Tag um 24:00 automatisch des Backup ausgführt.