\ Es sind 6 Monate seit der ersten Veröffentlichung von Postgresus vergangen. In dieser Zeit erhielt das Projekt 247 Commits, neue Funktionen sowie ~2,8k Sterne auf GitHub und ~42k Downloads von Docker Hub. Die Projektgemeinschaft ist ebenfalls gewachsen, es gibt jetzt 13 Mitwirkende und 90 Personen in der Telegram-Gruppe.
In diesem Artikel werde ich behandeln:
\
Für diejenigen, die zum ersten Mal von dem Projekt hören: Postgresus ist ein Open-Source-PostgreSQL-Backup-Tool mit Benutzeroberfläche. Es führt geplante Backups mehrerer Datenbanken durch, speichert sie lokal oder auf externen Speichern und benachrichtigt Sie, wenn Backups abgeschlossen sind oder fehlschlagen.
Das Projekt wird mit einem einzigen Befehl in Docker bereitgestellt. Es kann über Shell-Skript, Docker-Befehl, docker-compose.yml und jetzt auch über Helm für Kubernetes installiert werden. Mehr über Installationsmethoden.
Neben der Hauptfunktion "Backups erstellen" kann das Projekt:
Website - https://postgresus.com/
GitHub - https://github.com/RostislavDugin/postgresus (würde mich über einen Stern freuen ⭐️)
Die Projektoberfläche sieht so aus:
Übersichtsvideo: https://www.youtube.com/watch?v=1qsAnijJfJE
Für diejenigen, die an der Entwicklung teilnehmen möchten, gibt es eine separate Seite in der Dokumentation. Wenn jemand dem Projekt helfen möchte, aber nicht programmieren will — erzählen Sie einfach Ihren Kollegen und Freunden von dem Projekt! Das ist auch eine große Hilfe und ein Beitrag zum Projekt.
Ich weiß, wie man entwickelt, aber selbst ein Open-Source-Projekt zu bewerben ist ziemlich schwierig. Das Projekt gewinnt Anerkennung dank derer, die Videorezensionen erstellen und in sozialen Medien über das Projekt sprechen. Vielen Dank!
In diesen sechs Monaten hat sich viel verändert. Das Projekt wurde in vier Richtungen verbessert:
Gehen wir jede einzelne durch.
Neben Backups überwacht Postgresus jetzt den Datenbankzustand: Es zeigt die Betriebszeit an und warnt Sie, wenn eine Datenbank nicht verfügbar war.
Die Zustandsprüfung kann deaktiviert und konfiguriert werden.
Wenn die Datenbank nicht verfügbar ist — sendet das System eine Benachrichtigung darüber.
Ursprünglich konnte Postgresus Backups nur lokal und in S3 speichern. Google Drive, CloudFlare R2, Azure Blob Storage und NAS wurden hinzugefügt. Pläne beinhalten das Hinzufügen von FTP und möglicherweise SFTP und NFS.
Für Benachrichtigungen hatte das Projekt ursprünglich Telegram und E-Mail (SMTP). Jetzt werden auch Slack, Discord, MS Teams und Webhooks unterstützt. Darüber hinaus können Webhooks jetzt flexibel konfiguriert werden, um eine Verbindung zu verschiedenen Plattformen herzustellen:
Zuvor hatte das System nur einen Benutzer (Administrator), und Datenbanken waren global für das gesamte System. Jetzt unterstützt Postgresus das Erstellen von Arbeitsbereichen, um Datenbanken zu trennen und Benutzer zu Arbeitsbereichen hinzuzufügen. Mit Rollentrennung:
Folglich können Sie jetzt Datenbanken trennen:
DBA-Teams und große Outsourcing-Unternehmen begannen, Postgresus zu nutzen, daher wurde dies zu einer wichtigen Funktion. Es macht das Projekt nicht nur für einzelne Entwickler, DevOps oder DBAs nützlich, sondern für ganze Teams und Unternehmen.
Audit-Logs erschienen ebenfalls:
Wenn jemand beschließt, alle Datenbanken zu löschen oder aus irgendeinem Grund alle Backups aller Datenbanken herunterlädt — wird dies sichtbar sein 🙃
In der ersten Version hatte ich ehrlich gesagt keine Zeit für Sicherheit. Ich speicherte alle Backup-Dateien lokal, niemand hatte Zugriff darauf, und meine Projekte waren nicht gerade streng geheim.
Aber als Postgresus Open Source wurde, lernte ich schnell, dass Teams oft Backups in gemeinsam genutzten S3-Buckets speichern und nicht wollen, dass andere sie lesen. Datenbankpasswörter sollten auch nicht in der eigenen DB von Postgresus gespeichert werden, da viele Personen Zugriff auf seine Server haben. ~~Und es gibt ein gewisses Misstrauen untereinander.~~ Geheimnisse einfach nicht über API preiszugeben, reicht nicht mehr aus.
Daher wurde die Verschlüsselung und Sicherheit des gesamten Projekts zur Hauptpriorität für Postgresus. Der Schutz funktioniert jetzt auf drei Ebenen, und es gibt eine eigene Dokumentationsseite dafür.
Alle Datenbankpasswörter, Slack-Tokens und S3-Anmeldedaten werden verschlüsselt in der Datenbank von Postgresus gespeichert. Sie werden nur bei Bedarf entschlüsselt. Der geheime Schlüssel wird in einer separaten Datei von der DB gespeichert, sodass selbst wenn jemand die DB von Postgresus hackt (die ohnehin nicht extern zugänglich ist) — sie immer noch nichts lesen könnten. Die Verschlüsselung verwendet AES-256-GCM.
Backup-Dateien werden jetzt auch verschlüsselt (optional, aber Verschlüsselung ist standardmäßig aktiviert). Wenn Sie eine Datei verloren haben oder in öffentlichem S3 gespeichert haben — ist es nicht mehr so beängstigend.
Die Verschlüsselung verwendet sowohl Salt als auch einen eindeutigen Initialisierungsvektor. Dies verhindert, dass Angreifer Muster finden, um den Verschlüsselungsschlüssel zu erraten, selbst wenn sie alle Ihre Backup-Dateien stehlen.
Die Verschlüsselung erfolgt im Streaming-Modus, AES-256-GCM wird auch hier verwendet.
Trotz der ersten beiden Punkte gibt es keine 100%ige Schutzmethode. Es besteht immer noch eine winzige Chance, dass:
Daher sollte Postgresus Benutzern helfen, Schäden zu minimieren. Die Wahrscheinlichkeit eines solchen Hacks mag nahe Null sein, aber das ist ein schwacher Trost, wenn Sie derjenige sind, dem es passiert.
Wenn Sie jetzt einen Datenbankbenutzer mit Schreibberechtigungen zu Postgresus hinzufügen, bietet das System an, automatisch einen schreibgeschützten Benutzer zu erstellen und Backups darüber auszuführen. Menschen erstellen viel eher eine schreibgeschützte Rolle, wenn es nur einen Klick erfordert, anstatt sie manuell in der Datenbank einzurichten.
So bietet Postgresus an:
Sehr beharrlich bietet es an:
Mit diesem Ansatz, selbst wenn Ihr Postgresus-Server gehackt wird, alles entschlüsselt wird und Angreifer Zugriff auf Ihre DB erhalten — sie werden zumindest nicht in der Lage sein, die Datenbank zu beschädigen. Zu wissen, dass nicht alles verloren ist, ist ein ziemlich guter Trost.
Die erste Version von Postgresus bot alle Komprimierungsalgorithmen an, die PostgreSQL unterstützt: gzip, lz4 und zstd, mit Komprimierungsstufen von 1 bis 9. Ehrlich gesagt, habe ich nicht wirklich verstanden, warum jemand all diese Optionen benötigen würde. Ich habe einfach gzip mit Stufe 5 als vernünftigen Mittelweg gewählt.
Aber als das Projekt Open Source wurde, musste ich das tatsächlich recherchieren. Also habe ich 21 Backups in allen möglichen Kombinationen durchgeführt und den besten Kompromiss zwischen Geschwindigkeit und Größe gefunden.
Jetzt ist standardmäßig für alle Backups zstd mit Komprimierungsstufe 5 eingestellt, wenn die PostgreSQL-Version 16 oder höher ist. Wenn niedriger — immer noch gzip (übrigens, nochmals Dank an die Mitwirkenden für die PG 12-Unterstützung). Hier ist zstd 5 im Vergleich zu gzip 5 (es ist unten):
Im Durchschnitt werden Backups etwa 8-mal im Verhältnis zur tatsächlichen Datenbankgröße komprimiert.
Dies ist schnell erklärt — wir haben native k8s-Unterstützung mit Helm-Installation hinzugefügt. Teams, die k8s in der Cloud betreiben, können Postgresus jetzt einfacher bereitstellen. Drei Mitwirkende haben bei dieser Funktion geholfen.
Ich bin eigentlich kein Fan von dunklen Themen. Aber es gab viele Anfragen, also habe ich eines hinzugefügt (~~Danke Claude für die Hilfe und das Designer-Auge~~). Überraschenderweise stellte es sich besser heraus als das helle Thema und wurde zum Standard. Ich habe sogar die Website von hell auf dunkel umgestaltet — es sah so gut aus.
Vorher:
Nachher:
Zunächst etwas Kontext:
Ich glaubte, Postgresus sollte irgendwann inkrementelle Backups unterstützen. Schließlich ist das, was ernsthafte Tools tun! Selbst ChatGPT sagt, dass ernsthafte Tools mit Präzision bis zur Sekunde und Transaktion wiederherstellen können.
Also begann ich daran zu arbeiten. Aber dann traf mich die Realität:
Für die Wiederherstellung — gibt es keine Option, keine Verbindung zur Festplatte mit der Datenbank herzustellen. Um von einem inkrementellen Backup wiederherzustellen, stellt das Backup-Tool einfach den pgdata -Ordner wieder her (genauer gesagt, einen Teil davon).
Wenn die Datenbank wirklich groß ist, zum Beispiel mehrere TB und mehr — ist eine Feinabstimmung in Konfigurationen erforderlich. Hier ist die Benutzeroberfläche eher ein Hindernis als eine Hilfe.
Wenn Postgresus also ein Backup einer verwalteten DB erstellt — reicht es aus, dies ungefähr einmal pro Woche zu tun. Nur für den Fall eines unvorhergesehenen Notfalls oder wenn die Cloud nicht erlaubt, Backups lange genug zu speichern. Andernfalls verlassen Sie sich auf die eigenen inkrementellen Backups der Cloud.
Aber wenn Sie eine Bank oder ein Entwickler einer verwalteten DB sind, benötigen Sie wirklich die feinste Backup-Konfiguration für Ihre Dutzende und Hunderte von Terabytes an Daten. Hier wird Postgresus niemals physische Backups von WAL-G oder pgBackRest in Bezug auf Konsolenkomfort und Effizienz für DBs mit einem Volumen in TB und mehr übertreffen. Aber meiner Meinung nach sind dies bereits spezialisierte Tools für solche Aufgaben, erstellt von Genies und Maintainern von PostgreSQL selbst.
Meiner Meinung nach werden inkrementelle Backups wirklich in zwei Fällen benötigt:
In Anbetracht all dessen habe ich eine bewusste Entscheidung getroffen, die Entwicklung inkrementeller Backups einzustellen. Stattdessen konzentriere ich mich darauf, logische Backups so bequem, zuverlässig und praktisch für den täglichen Gebrauch durch Entwickler, DevOps, DBAs und Unternehmen zu machen.
Die obigen Punkte sind bei weitem nicht alles. 80% der Arbeit ist normalerweise nicht sichtbar. Aus dem Stegreif hier eine kurze Liste:
pg_dump sendet, während es darauf wartet, dass S3 aufholt (das Herunterladen aus der Datenbank ist normalerweise schneller als das Hochladen in die Cloud). Die RAM-Nutzung ist jetzt auf 32 MB pro parallelem Backup begrenzt.Und vieles mehr.
Natürlich klappt nicht alles und einige Dinge müssen aufgegeben werden. Ich baue Postgresus in meiner Freizeit auf, die kaum existiert. Also kann ich mich nicht zu dünn ausbreiten oder die UX mit unnötigen Funktionen verkomplizieren. Zu viele Funktionen sind auch schlecht.
Ich wollte Postgresus auch zu einem PostgreSQL-Überwachungstool machen. Einschließlich Systemressourcen des Servers, auf dem PostgreSQL läuft:
Ich habe sogar die Basis für das Sammeln von Metriken (beliebige) und eine Vorlage für Grafiken erstellt:
Es stellt sich heraus, dass PostgreSQL nur RAM-Nutzung und IO-Metriken out of the box offenlegt.
Die Überwachung anderer Ressourcen erfordert Erweiterungen. Aber nicht jede Datenbank kann die Erweiterungen installieren, die ich benötige, also konnte ich nur teilweise Metriken sammeln. Dann entdeckte ich, dass Cloud-Datenbanken oft überhaupt nicht erlauben, Erweiterungen zu installieren.
Dann erkannte ich, dass Metriken in VictoriaMetrics oder zumindest TimescaleDB gespeichert werden sollten, nicht in Postgresus' eigenem PostgreSQL, was den Image-Build komplizieren würde.
Am Ende würde diese nicht wesentliche Funktion hinzufügen:
Also habe ich die Ressourcenüberwachung aufgegeben und mich darauf konzentriert, Postgresus zum besten Backup-Tool zu machen, das es sein kann.
Ich wollte auch eine SQL-Konsole hinzufügen. Da Postgresus bereits mit der DB verbunden ist, warum nicht direkt von dort Abfragen ausführen? Es wäre bequem — keine Notwendigkeit, jedes Mal PgAdmin, DataGrip oder DBeaver zu öffnen.
Ich habe nie Zeit gefunden, daran zu arbeiten, nur geplant. Ein Mitwirkender begann mit der Funktion und erstellte einen PR. Aber wie erwartet bei komplexen Funktionen kamen viele Anforderungen und Randfälle auf:
Das ist im Grunde ein eigenes vollständiges Projekt, nicht nur ein Tab.
Wir haben beschlossen, die Funktion aufzugeben und den Aufwand zu sparen. Dies stellte sich als der richtige Anruf heraus, da wir schreibgeschützte Rollen hinzugefügt haben, die INSERT, UPDATE und DELETE sowieso nicht erlauben.
Das ist die Reise, die Postgresus in sechs Monaten gemacht hat. Es entwickelte sich von einem Nischenprojekt zu einem Tool auf Unternehmensebene, das sowohl einzelnen Entwicklern als auch ganzen DBA-Teams hilft (ich war übrigens überrascht, dies nur ~2 Monate nach der ersten Veröffentlichung zu erfahren). Ich bin wirklich froh, dass Tausende von Projekten und Benutzern auf Postgresus vertrauen.
Das Projekt hört hier nicht auf. Mein Ziel ist es jetzt, Postgresus zum bequemsten PostgreSQL-Backup-Tool der Welt zu machen. Es gibt einen großen Rückstand an Funktionen und Verbesserungen, die nach und nach kommen.
Meine Hauptprioritäten bleiben:
Wenn Ihnen das Projekt gefällt oder Sie es nützlich finden — würde ich mich über einen Stern auf GitHub oder das Teilen mit Freunden freuen ❤️
\


