Gude liebe teamspeak-connection.de Community,
in folgendem Beitrag präsentiere ich euch eine kostengünstige Möglichkeit, ein automatisches Backup eurer TeamSpeak Server Datenbank zu generieren, es in einem S3-Bucket zu speichern und wiederherzustellen.
Vorab:
- Damit das ganze funktioniert, muss eurer TS3 Server eine externe MariaDB Datenbank nutzen, ich zeige euch auch, wie die Migration stattfindet.
- Diese Anleitung richtet sich an Admins mit fortgeschrittenen Kenntnissen von Docker, Linux und TS3-Servern.
- Bei Fragen/ Komplikationen könnt ihr mich gerne kontaktieren, mehr dazu unten.
Voraussetzungen:
- Einen V-Server/VPS etc. mit root-Rechten
- Basic Linux-, Docker- und Cloud- Kenntnisse
- Etwas Zeit
- Lokales Backup erstellen (falls Server bereits existiert)
Bei einer Migration von Datenbanken sind Probleme nie auszuschließen, daher hier meine Lieblingsoption, einmal den ganzen Server mit YaTQA zu sichern.
YaTQA ist ein vollkommen kostenloses Tool, welches eine grafische Oberfläche zur Verwaltung eures TeamSpeak Servers über eine Query Verbindung bereitstellt. Herunterladen könnt ihr es hier.- Nach der Installation von YaTQA gebt ihr eure Querydaten (IP, Port, Nutzername, Password) in die entsprechenden Felder ein und drückt auf "connect".
Screenshot_25.png - Wenn eine Verbindung erfolgreich hergestellt wurde, haben sich neue Tabs geöffnet, hier navigiert ihr zum Reiter Miscellaneous.
Dort befindet sich unter der Abteilung Snapshots" die Option "Create and save a snapshot...". Solltet Ihr mehrere virtuelle Server betreiben, klickt stattdessen auf "of multiple servers".
Das Programm öffnet nun ein weiteres Fenster um ein Verzeichnis für den Snapshot zu wählen
Screenshot_26.jpg
- Ich empfehle zusätzlich ein Datensnapshot zu machen, das inkludiert Icons, Daten im Dateibrowser etc.
Dafür nutzt Ihr die Option "Create file backup..." und wähl erneut ein Verzeichnis aus, das kann je nach Größe der Dateien und eurer Leitung mehrere Minuten dauern.
- Nach der Installation von YaTQA gebt ihr eure Querydaten (IP, Port, Nutzername, Password) in die entsprechenden Felder ein und drückt auf "connect".
- Docker, Docker-Compose und Portainer einrichten
Falls Ihr bereits TeamSpeak in einem Docker Container nutzt, könnt Ihr diesen Schritt überspringen.
Ich nutze für das Tutorial Debian 12, bitte passt die Befehle an eure Distribution an.
- Hier ist eine exzellente Anleitung von Digital Ocean, wie man Docker unter Debian installiert, welche es viel besser erklärt, als ich jemals könnte.
- Jetzt müssen wir noch die Erweiterung "Docker-Compose" installieren, welche uns die Verwaltung von Containern und Stacks (mehrere Container) erleichtert.
- sudo apt-get install docker-compose-plugin
- Portainer ist ein weiteres Tool, welches ein Webinterface zur Verwaltung von Docker zur Verfügung stellt. Es ist optional, jedoch sollte es in meinen Augen jeder, der Docker nutzt, auch nutzen.
- Hier ein Tutorial zur Installation.
- Stack mit Portainer erstellen:
- Nach der erfolgreichen Installation von Docker, Docker-Compose und Portainer können wir nun zum ersten mal unser Webinterface aufrufen, dies befindet sich unter http://<deineip>:9000.
Nach der Registrierung begeben wir uns zu unserer Docker Instanz und klicken auf "Live connect"
Screenshot_27.jpg
- Tipp: Vergisst nicht den Port 9443 in eurer Firewall zu öffnen!
- Auf der linken Seite navigieren wir nun zu "Stacks" und dann auf "Add stack" auf der Rechten, um unseren ersten Stack zu erstellen.
- Zuerst vergeben wir unserem Stack einen Namen z.B. TeamSpeak
- Danach geben wir im großen Feld folgenen Code ein: https://pastebin.com/raw/Hnn8uQLh
- Um ein persistentes Volume zu nutzen, müssen wir noch ein Verzeichnis erstellen:sudo mkdir -p /opt/teamspeak
- Einen TeamSpeak nutzer erstellen (falls noch nicht vorhanden)
sudo adduser --disabled-login teamspeak
- Uns die UID und GID notieren (die Ausgabe)
id teamspeak
- Dem Teamspeak Nutzer Berechtigungen zum Verzeichniss erteilen:
chown -R <eureUID>:<eureGID> /opt/teamspeak
- Ein Verzeichnis für unsere DB erstellen:
sudo mkdir /var/lib/mysql
- Nach der erfolgreichen Installation von Docker, Docker-Compose und Portainer können wir nun zum ersten mal unser Webinterface aufrufen, dies befindet sich unter http://<deineip>:9000.
- Nun müssen wir noch ein paar Umgebungsvariablen erstellen, das geht mit dem "add environmental variable" button. Wir brauchen folgende Umgebungsvariablen:
- DB_ROOT_PASSWORD - ein sicheres von euch ausgesuchtes Passwort für den root Nutzer in MariaDB.
- DB_PASSWORD - das Passwort für den "teamspeak" Nutzer in MariaDB.
- SERVERADMIN_PASSWORD - das Passwort welches dem "serveradmin" Query Nutzer zugeteilt wird.
Danach könnt ihr mit "Deploy the stack" euren ersten Stack zum laufen bringen.
Falls alles ohne Probleme läuft, sollten euch etwas weiter unten die 2 Container "teamspeak-server" und "teamspeak-db" als "running" angezeigt werden.
Nun können wir uns erneut mit dem TeamSpeak verbinden.
- Unser Snapshot wiederherstellen
Um unseren Server wieder auf den ursprünglichen Zustand zu bringen, müssen wir nun das vorhin erstellte Snapshot wieder auf den Server übertragen
- Tipp: Die neuen Anmeldedaten für euren TS3-Server findet Ihr im Log eures containers. Dieser lässt sich via. SSH anzeigen mit "docker logs teamspeak-server"
- Verbindet euch erneut mit YaTQA zu eurem Servern und wählt diesmal unter "Miscellaneous" "restore snapshot" und wählt die Datei, welche Ihr vorhin erstellt habt, das selbe gilt für "Restore file backup". Der Fortschritt ist auf der linken Seite einsehbar und kann erneut mehrere Minuten andauern.
Nach Wiederherstellung des Snapshots startet eurer Server neu.
- Eine Neue Identität erstellen
- Um Zugriff auf unseren Bucket zu beschränken erstellen wir zuerst noch eine weitere Identität innerhalb der AWS-Managementkonsole
- Hierzu navigieren wir zu in der Konsole zur Suchleiste und geben "IAM" ein und klicken auf das erste Ergebnis.
Screenshot_30.jpg - Die IAM Konsole verwaltet alle Nutzer und Nutzergruppe und deren Berechtigungen innerhalb eines AWS Kontos.
- Wir navigieren nun zu "Benutzer" auf der Rechten Seite. Nun klicken wir auf den "Benutzer erstellen" Button auf der Rechten Seite.
- Dort vergeben wir dem Nutzer einen Namen und klicken auf "weiter"
- Nun müssen wir dem Nutzer noch die benötigten Berechtigungen erteilen. Hierzu wählen wir "direktes Anfügen von Richtlinien" und geben im Suchfeld "AmazonS3FullAccess" ein und geben dem Feld ein Häkchen.
- Tipp: Es empfiehlt sich immer, nur die Berechtigungen zu vergeben, welche auch benötigt werden, daher könnt ihr auch gerne andere, restriktivere, Berechtigungen eurem neuen Nutzer zuweisen.
Screenshot_31.jpg - Nun müssen wir nur noch mit "Benutzer erstellen" bestätigen.
- Um mithilfe des AWS CLI Befehle von unserem VPS ausführen zu können, müssen wir noch einen Zugriffsschlüssel für unseren neuen Nutzer erstellen:
- Dafür klicken wir auf den Namen des erstellten Nutzers und anschließend auf "Zugriffsschlüssel erstellen".
Screenshot_32.jpg - Im Menü wählen wir nun "Befehlszeilenschnittstelle (CLI)" aus, setzen unten ein Haken im Kasten und Bestätigen mit "Weiter".
Einen Tag-Wert müsst Ihr nicht vergeben. - Im neu erschienenen Fenster kopieren wir nun den Zugriffs- und geheimen Zugriffsschlüssel, dieser wird nur EINMALIG angezeigt, daher notiert Ihn euch SICHER und bestätigt mit "Fertig".
- Ebenfalls notieren wir uns den ARN-Wert in der Übersicht
Screenshot_33.jpg
- Dafür klicken wir auf den Namen des erstellten Nutzers und anschließend auf "Zugriffsschlüssel erstellen".
- Hierzu navigieren wir zu in der Konsole zur Suchleiste und geben "IAM" ein und klicken auf das erste Ergebnis.
- Um Zugriff auf unseren Bucket zu beschränken erstellen wir zuerst noch eine weitere Identität innerhalb der AWS-Managementkonsole
- Einen S3-Bucket erstellen
- Für S3-Buckets gibt es viele Anbieter, ich werde jedoch für das Tutorial Amazon Web Services nutzen.
- Was ist ein S3-Bucket? Ein Simple Storage Server ist ein cloudbasierter, verwalteter Speicherserver. Ein Bucket lässt sich mit einer Festplatte oder Volume vergleichen.
- Hierfür begeben wir uns nach der Anmeldung in der AWS-Managementkonsole zur S3-Konsole.
- Hier navigieren wir zum Button "Bucket erstellen"
- Diesem Bucket teilen wir einen Namen und eine Region zu, der Rest der Einstellungen können wir auf so belassen und bestätigen mit "Bucket erstellen"
- Nun erstellen wir noch ein Unterverzeichnis in unserem Bucket, wir klicken hierfür auf unseren Bucket und dann auf "Ordner erstellen" und benennen ihn "Backup" und einen weiteren Ordner innerhalb des "backup" Ordners namens "ts3".
- Nun begeben wir uns zurück in das Stammverzeichnis des S3 Buckets, wo wir unter "Berechtigungen" noch einige Dinge einstellen müssen.
- Begebe dich hierzu zur "Bucket-Richtlinie" und klicke auf "Bearbeiten"
- Gebe dort diesen Text ein: https://pastebin.com/raw/Nr4ieZCq
- Bestätige das ganze mit "Änderungen speichern".
- Wichtig: Damit sich über Zeit keine großen Rechnungen anhäufen, empfehle ich einen Lebenszyklus zu erstellen, welcher Dateien nach x Tagen nach Erstellungsdatum automatisch löscht.
- Geht dazu in eurem Bucket auf den Tab "Verwaltung" und klickt auf "Lebenszyklus erstellen".
- Hier habt ihr viele Einstellungsmöglichkeiten, was mit euren Daten nach x Tagen geschieht: hier ist jedoch meine empfohlene Konfiguration:
- Vergebt dem Lebenszyklus einen Namen und wählt "Auf alle Objekte im Bucket anwenden" und bestätigt die Warnung.
- Im nächsten Teil wählt, "Aktuelle Objektversionen ablaufen lassen".
- Im darauf folgendem Feld wählt ihr die Anzahl der Tage aus, ab dem die Objektversion abläuft, ich nutze hierfür 8 Tage.
Dies gibt euch 8 Tage Zeit, eine Korruption in eurer Datenbank/ TeamSpeak-Server zu identifizieren und zu beheben.
Gerne kann hier auch ein höherer Wert angegeben werden, kostentechnisch steigert sich der Betrag nur um wenige ct. und kann evtl. noch in eurem kostenlosen Kontingent von 5GB kostenlosem Speicher für 12 Monate enthalten sein. - Bestätigt nun die Lebenszykluskonfiguration mit "Speichern".
- Für S3-Buckets gibt es viele Anbieter, ich werde jedoch für das Tutorial Amazon Web Services nutzen.
- Backup Skript erstellen
- Nun verbinden wir uns erneut via. SSH mit unserem VPS und erstellen ein neues Verzeichnis:
sudo mkdir /opt/mariabackup - cd /opt/mariabackup/
- Dort erstellen wir eine neue Daten mit dem Texteditor Nano:
sudo nano backup.sh - Im Skript geben wir folgenden Code ein: https://pastebin.com/HahzRf04
- Nun verbinden wir uns erneut via. SSH mit unserem VPS und erstellen ein neues Verzeichnis:
- Verlasse nun den Texteditor mit STRG + X und bestätige mit Y und ENTER
- Bevor wir das Skript ausführen können, müssen wir noch ein Paar Befehle ausführen:
- Das offizielle Package der AWS CLI:
- sudo apt install awscli
- Nun müssen wir noch das Package konfigurieren:
- sudo aws configure
- Hier geben wir zuerst den Zugriffsschüssel ein, gefolgt von den geheimen Zugriffsschlüssel, deiner AWS Region (meistens EU-Central-1) und JSON als Ausgabeformat
- Wir müssen noch 2 Verzeichniss erstellen:
- sudo mkdir usr/bin/mktemp
- sudo mkdir usr/bin/gzip
- Jetzt können wir unser Skript zum ersten Mal testen!
- sudo sh backup.sh
- Bei Erfolgreicher Ausführung sollte eine Ähnliche Ausgabe erscheinen: https://pastebin.com/3ZbN8NKt
Um zu testen ob der Upload auf unseren S3-Bucket funktioniert hat, begeben wir uns erneut in die S3-Konsole in das /backup/ts3/ Verzeichnis, wo sich nun eine neue Datei befinden sollte.
Screenshot_34.jpg
- Die Backup.sh Datei automatisch ausführen
- Wir benötigen das Paket "cron":
- sudo apt install cron
- Um unter Linux automatisch Prozesse auszuführen erstellen wir einen "Cronjob"
- sudo crontab -e
- Dort fügen wir folgende Zeile hinzu:
- 0 */6 * * * /bin/sh /opt/mariabackup/backup.sh >> /var/log/ts3_backup.log 2>&1
- Fertig! Nun wird alle 6 Stunden unser Skript automatisch ausgeführt UND eine Logdatei erstellt!.
- Um den Log einzusehen müssen wir nur die ts3_backup.log datei öffnen
nano /var/log/ts3_backup.log
Ein Backup wiederherstellen:
Falls ihr euch jemals in der unschönen Situation befindet, dass ihr eure DB wiederherstellen müsst, könnt ihr das auf folgendem Weg tun:
- TeamSpeak-Server Container anhalten
- Zuerst müssen wir beide container anhalten:
- docker stop teamspeak-server
- docker rm teamspeak-server
- Zuerst müssen wir beide container anhalten:
- Das neuste Backup identifizieren
- Für diesen Schritt müssen wir uns erneut in die AWS Console einloggen und die S3 Console aufrufen.
Begebt euch nun in euren TeamSpeak-Backup Bucket und sortiert die Dateien nach dem neusten Erstelldatum.
Jetzt könnt ihr den S3-URI kopieren.
pasted-from-clipboard.png
- Für diesen Schritt müssen wir uns erneut in die AWS Console einloggen und die S3 Console aufrufen.
- Das MariaDB Backup wiederherstellen
- Zuerst loggen wir uns in den DB Container ein:
- docker exec -it --user root teamspeak-db bash
- AWS CLI herunterladen:
- apt update
- apt install awscli
- Zuerst loggen wir uns in den DB Container ein:
- AWS CLI konfigurieren
- sudo aws configure
- Hier geben wir zuerst den Zugriffsschüssel ein, gefolgt von den geheimen Zugriffsschlüssel, deiner AWS Region (meistens EU-Central-1) und JSON als Ausgabeformat. Diesen müsst ihr zuerst in der IAM Konsole wie oben beschrieben erstellen, es sei denn ihr habt noch die Schlüssel vom vorhin erstellen Benutzer.
- Das Backup herunterladen:
- aws s3 cp *s3-uri*
- Das Backup entpacken
- gzip -d *dateiname*
- Wir müssen noch eine Zeile in der .dump Datei hinzufügen, damit die richtige Datenbank wiederhergestellt wird:
- nano *dateiname*
- In der ersten Zeile fügt ihr ein: USE teamspeak;
- Verlasst den Editor mit STRG + X, Y, ENTER-Taste
- Das Backup wiederherstellen:
- mysql -u teamspeak -p*EuerPasswort* < *Dateiname*
- Nun könnt ihr den TeamSpeak-Server erneut starten:
- docker start teamspeak-server
Ich hoffe das diese Anleitung bei euch auch funktioniert, falls nicht, könnt Ihr mich gerne Kontaktieren auf
- Twitter/X: @Badespeak
- TS: Badespeak.net