WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 19.12.2019 09:26:03

florian
Administrator

Backup-Modul

Ich bringe noch einmal das Thema Backup aufs Tapet.
Die derzeitige verfügbaren Lösungen sind suboptimal.
- Das Backup-Admintool ist zwar brauchbar, um die Datenbank zu sichern, aber je mehr resp. je größere Dateien im /media-Verzeichnis liegen, desto höher ist die Wahrscheinlichkeit, dass das Modul beim Versuch, ein Dateisystem-Backup anzulegen, in einen Timeout läuft (=> "weiße Seite").
- Das cronjob-Backup-Script ist aufwändig einzurichten, funktioniert nur bei bestimmten Hostern (wenn ich das richtig sehe) und sichert auch nur die Datenbank, nicht jedoch das Dateisystem.

Bei Wordpress gibt es ein Backup-Plugin, das selbst gigabytegroße Seiten speichert, da es nicht versucht, wie das WBCE-Backup-Modul alles in einem Rutsch in ein Zip zu schreiben, sondern dies portionsweise macht. So etwas bräuchten wir auch, d.h.
1) Backup-Tool macht erstmal eine Bestandsaufnahme (nur Datei-/Verzeichnisliste)
2) Backup-Tool arbeitet diese Liste nach und nach ab, um Timeouts/Speicher-Limits zu umgehen,  "merkt" sich also irgendwie, wie weit es gekommen ist, dann die nächste Daten-Portion speichert usw. was (nehme ich an) theoretisch per Javascript und/oder meta-refresh erfolgen könnte
3) Backup-Tool fügt Teile zu einem ganzen zusammen
4) Fertiges Backup kann heruntergeladen werden.

Siehe auch Issue 466

Ich bin bereit, die Entwicklung eines solchen Moduls finanziell zu unterstützen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

Liked by:

screamindan

#2 27.12.2019 15:05:18

webbird
Administrator

Re: Backup-Modul

Ich weiß dass das alte Ding von Ralf mit WBCE nicht funktioniert, aber mal angenommen, man könnte es funktionierend machen - wäre das eine Option? Die letzte Version hatte auch eine Autosync-Funktion, mit der man "Clients" mit einem "Server" synchronisieren konnte. Also z.B. eine lokale Portable, mit der man seine Änderungen baut, mit der eigentlichen Live-Version. Dazu gibt's im BC-Wiki auch eine Anleitung. Das wäre also mehr als nur Datensicherung.

Da SyncData auf viel Zeug aus Silex basiert (groß und inzwichen total veraltet), hatte ich auch schon mal überlegt, ein SyncData3 zu bauen, das das nicht mehr braucht, das ist aber ein größerer Aufwand. Dabei geht es mir nicht darum, dass mir das einer bezahlt, sondern darum, dass das (sehr) lange dauern kann. Ich könnte es dann aber so bauen, dass es mit WBCE und BC2 funktioniert.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#3 27.12.2019 15:11:16

webbird
Administrator

Re: Backup-Modul

florian schrieb:

Bei Wordpress gibt es ein Backup-Plugin, das selbst gigabytegroße Seiten speichert, da es nicht versucht, wie das WBCE-Backup-Modul alles in einem Rutsch in ein Zip zu schreiben, sondern dies portionsweise macht. So etwas bräuchten wir auch...

Nein, sowas braucht Ihr nicht. Der Trick ist ein anderer. Man startet das Backup über Ajax - da gibt es keine Timeouts. Das heißt selbst wenn das Backup dann 3 Stunden dauert, es läuft einfach ohne Timeout weiter. (Es sei denn, der Provider hat Mechanismen, sowas zu überwachen und abzuschießen.)

Wenn man es dann "hübsch" machen will, baut man eine Seite, die alle 30 Sekunden oder so den Status abfragt. Im einfachsten Fall "läuft noch" bzw. "ist fertig, Ergebnis ok/nicht ok".

Alles abzugucken bei SyncData2, abgesehen davon, dass das wie gesagt mit WBCE derzeit nicht funktioniert und veraltet ist. Das Prinzip ändert sich dadurch aber nicht. wink


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#4 27.12.2019 15:47:17

webbird
Administrator

Re: Backup-Modul

Also syncData2 beißt sich schon bei der Installation mit dem Twig Autoloader in WBCE. Zu korrigieren in \include\Sensio\Twig\TwigConnect.php

if(!class_exists('Twig_Autoloader')) {
    require __DIR__ . '/lib/Twig/Autoloader.php';
    Twig_Autoloader::register();
}

Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#5 27.12.2019 15:55:07

webbird
Administrator

Re: Backup-Modul

...und wenn man dann noch in der initialize.php vor das

$database = new database();

ein

global $database;

setzt, läuft zumindest schon mal die Installation. Mit einer kleinen Änderung im syncData selbst, wo crypt() durch password_hash() ersetzt werden muss.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#6 27.12.2019 17:41:24

berny
Mitglied

Re: Backup-Modul

webbird schrieb:

Nein, sowas braucht Ihr nicht. Der Trick ist ein anderer. Man startet das Backup über Ajax - da gibt es keine Timeouts. Das heißt selbst wenn das Backup dann 3 Stunden dauert, es läuft einfach ohne Timeout weiter. (Es sei denn, der Provider hat Mechanismen, sowas zu überwachen und abzuschießen.)

Wenn man es dann "hübsch" machen will, baut man eine Seite, die alle 30 Sekunden oder so den Status abfragt. Im einfachsten Fall "läuft noch" bzw. "ist fertig, Ergebnis ok/nicht ok".

Alles abzugucken bei SyncData2, abgesehen davon, dass das wie gesagt mit WBCE derzeit nicht funktioniert und veraltet ist. Das Prinzip ändert sich dadurch aber nicht. wink

Ist das nicht wie bei joomla?
da werden einfach verschiedene Statusbalken angezeigt, ich vermute auch hier, wie du beschrieben hast, eine direkte Kommunikation mit dem script und damit Umgehung des Timeouts....

Offline

#7 27.12.2019 17:51:12

webbird
Administrator

Re: Backup-Modul

Keine Ahnung, als ich mir das letzte Mal Joomla angeguckt habe, kannte ich WB noch nicht... big_smile


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#8 27.12.2019 19:10:42

florian
Administrator

Re: Backup-Modul

Also, beim Backup-Modul hatte ich wirklich an etwas DAU-sicheres gedacht. So wie jetzt bereits die Datenbanksicherung: Man klickt auf einen Button und zack, gibt's ein Zip zum Download. (Komfortfunktionen wie die automatische Ausführung des Backups per Cronjob und/oder Backup-Historie wären natürlich auch schick, sind aber kein Muss).

Bei allen mir bekannten Shared-Hosting-Anbietern hat man keine Möglichkeit, die max_execution_time über den vom Provider vorgesehenen Wert zu erhöhen. Im alten Backup-Script steht bereits jetzt die Anweisung

set_time_limit(120);

was völlig wirkungslos ist, wenn der Hoster nur 30 Sekunden zulässt, dann bleibt es auch bei 30 Sekunden.
Das ist das Grundproblem, das irgendwie gelöst werden müsste.

Ein anderer Ansatz könnte sein, manuell auswählen zu können, welche Verzeichnisse gespeichert werden sollen. D.h. dass man dann eben /media deselektiert, wenn man ein WBCE-Update machen will (wovon das /media-Verzeichnis ja i.d.R. nicht betroffen ist), oder zuerst nur alle kleinen, innerhalb eines Timeouts speicherbaren Verzeichnisse auswählt und im nächsten Schritt dann /modules/ckeditor und /media einzeln.

Wenn sich mittelfristig mit SyncData3 eine Möglichkeit bietet, eine echte Staging-Umgebung für BC / WBCE anbieten zu können, wäre das natürlich ein Wahnsinnsfortschritt und überaus begrüßenswert. Eine kurzfristige Lösung für das Backup-Problem wäre mir aber schon wichtig.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#9 27.12.2019 19:35:15

boeseroeser
Gast

Re: Backup-Modul

Nur weil ich kurz mal da bin - und ohne was genaueres zu wissen:

Bei gefühlten 99% aller WBCE-SItes macht das Backup-Modul kein Problem und funktioniert wie erwartet.
Einen Timeout hab ich nur, wenn das Modul 404Plus überläuft, diese Tabelle kann das vielfache der der restlichen DB ausmachen. (Ja, sollte ich mal fixen..)
Kann man aber leicht leeren, dieses Tabelle.

Warum also nicht einfach:
Backup-Script gleich zu Beginn einen DB Eintrag (oder ins Session Cookie) mit Timestamp und "Start" machen.
Ganz am Ende des Scripts: Eintrag wieder löschen (oder Timestamp + "Stop" dazu)

Mit irgendeinem Trigger ein Script aufrufen, das in der DB nachsieht, obs geklappt hat. (Ob noch ein verwaister "Start" EIntrag steht)


Oder zur Not partiell: Zuerst Alle Tabellen vom Core, dann die restlichen Module.

Beitrag geändert von boeseroeser (27.12.2019 19:36:14)

#10 27.12.2019 19:36:44

florian
Administrator

Re: Backup-Modul

Es geht nicht um die Datenbanksicherung, sondern um die Sicherung der Dateien auf dem Server. Dass die Datenbanksicherung durchläuft, bestreite ich doch gar nicht!
attachment.php?item=2117&download=1


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#11 27.12.2019 20:04:22

boeseroeser
Gast

Re: Backup-Modul

Ah, sorry. Zu schnell geschaut.

#12 28.12.2019 09:04:24

berny
Mitglied

Re: Backup-Modul

ihr habt ja eine ähnliche Funktion beim Backend nachgerüstet, damit es beim Schreiben von content keinen timeout gibt, oder irre ich mich da jetzt?
ist ja ähnlich vom Prinzip, denke ich mal...

Offline

#13 28.12.2019 09:08:30

florian
Administrator

Re: Backup-Modul

Nein, Du irrst, das ist was anderes. Beim Backend war das Problem die Session-Lifetime. Beim Backup-Modul ist das Problem die Zeit, die PHP für die Ausführung eines einzigen Befehls gewährt.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

Liked by:

berny

#14 28.12.2019 20:49:26

berny
Mitglied

Re: Backup-Modul

etwas dirty, aber folgender Denkansatz:
man kann ja einem bestehenden zipfile einzelne Ordner hinzufügen.

1) ordnerstruktur in array erzeugen oder Text file oder db erzeugen.
2) zipfile erzeugen
3) Oerster ordner anhand pkt1 dem zip hinzufügen, nächsten Ordner zurückmelden
4) neuer Aufruf des Scripts mit nächstem Ordner
usw usw
bis Schleife durch
dann download des files.

somit wären innerhalb des Scripts immer wieder neue Aufrufe und deshalb das timeout umgangen.

realisierbar? ?
oder verrückt ?

Beitrag geändert von berny (28.12.2019 20:50:08)

Offline

#15 28.12.2019 22:57:57

florian
Administrator

Re: Backup-Modul

Das ist genau das, was ich oben be- bzw. geschrieben hatte.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

Liked by:

berny

#16 29.12.2019 07:05:24

berny
Mitglied

Re: Backup-Modul

akkurat, habe ich überlesen  smile

Offline

#17 30.12.2019 09:33:56

webbird
Administrator

Re: Backup-Modul

ini_set('max_execution_time',30000);

Hat bei mir bisher überall funktioniert.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#18 30.12.2019 11:05:46

webbird
Administrator

Re: Backup-Modul

Irgendwo hab ich das auch schon mal gemacht, dass beim Erstellen des ZIPs häppchenweise vorgegangen wird. Das Script beendet sich dann selbst kurz vor Ablauf des Timeouts und die Webseite aktualisiert sich selbst alle X Sekunden, womit dann der nächste Abschnitt gesichert wird. Hat aber diverse Haken und Ösen, so kann man z.B. den Timeout nicht wirklich voll ausnutzen, weil man nie weiß, wie lange das Hinzufügen der nächsten Datei dauern würde. Eine einzige große Datei kann den ganzen Prozeß aushebeln, selbst wenn man von den 30 Sekunden nur 20 ausnutzt.

Edit: Achja, unser Packetyzer macht das so. Das ist das Teil, mit dem man sich bei uns seinen personalisierten BC-Download zusammenstellen kann. Das sind da aber nur eine Handvoll ZIPs und keine ganzen Verzeichnisstrukturen.

Sicherer ist das Entkoppeln (forken), was PHP nach meiner Kenntnis nicht unterstützt, oder eben der Aufruf via AJAX.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#19 30.12.2019 11:10:56

webbird
Administrator

Re: Backup-Modul

Vorweg, der Weg ist prinzipiell genau richtig. Nur eine Anmerkung:

berny schrieb:

1) ordnerstruktur in array erzeugen oder Text file oder db erzeugen.

Bei komplexen Verzeichnisstrukturen mit vielen Dateien kann auch dieser Teil schon länger dauern als der Script-Timeout.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#20 30.12.2019 19:05:59

berny
Mitglied

Re: Backup-Modul

Meinst nicht, dass dann die ganze Installation ein Problem hätte?

Offline

#21 02.01.2020 09:33:34

webbird
Administrator

Re: Backup-Modul

Nein, wieso?


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#22 02.01.2020 11:33:49

berny
Mitglied

Re: Backup-Modul

naja, weil es ja auch beim CMS diverse Vorgänge gibt, die die Daten durchforsten, da würde es ja auch zum Timeout kommen...
Oder irre ich da?

Offline

#23 02.01.2020 14:08:49

webbird
Administrator

Re: Backup-Modul

Hm, ich bin mir nicht ganz sicher, was WBCE angeht, aber ich glaube, da werden immer nur Teilbereiche gescannt. Also z.B. nicht das gesamte media-Verzeichnis, sondern nur der Teil, der zu einem bestimmten Modul gehört. Und der Seitenbaum wird m.W. aus der Datenbank generiert, da sind extrem komplexe Strukturen aber IMHO auch eher unüblich. So ein Backup-Modul hingegen müßte ja wirklich alles von vorn bis hinten durchlaufen. Es ist jetzt nicht der wahrscheinlichste Timeout-Grund, das gebe ich zu, aber bedenken sollte man es trotzdem.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

#24 02.01.2020 14:18:11

florian
Administrator

Re: Backup-Modul

Das derzeitige Backup-Modul versucht alles zu sichern, was an Dateien und Verzeichnissen im WBCE-Verzeichnis liegt.
Und wenn man parallel zu WBCE z.B. noch eine Online-Bildergalerie oder Owncloud/Nextcloud installiert hat, und/oder Serverlogfiles in einem Verzeichnis unterhalb des WBCE-Roots liegen, kann das ggf. bereits beim Einlesen Probleme bereiten.
Insofern wäre also eine Möglichkeit, bestimmte Verzeichnisse von vornherein auszuschließen, sinnvoll.
Bei Croncheck kann man direkt im Script eine Variable setzen, um Verzeichnisse auszuschließen, so etwas würde im Grunde genommen ja schon reichen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#25 03.01.2020 15:25:02

webbird
Administrator

Re: Backup-Modul

Also nicht dass da schon irgendwas "sinnvolles" passieren würde, aber so könnte es in etwa aussehen.

attachment.php?item=2120&download=1

Bisheriges Vorgehen:

  • Man klickt an, was man sichern möchte, und klickt auf den Button

  • Es wird ein entsprechender Job erzeugt, aber noch nicht gestartet

  • Durch Anklicken des Icons wird der Job dann per AJAX gestartet und das Ergebnis zurückgeliefert

Bei obigem Screenshot wurde auf das "run"-Icon geklickt, obwohl bereits ein Job läuft, daher die Meldung. Ob es sinnvoll ist, dass man überhaupt einen Job anlegen kann, so lange noch einer läuft, sei mal dahingestellt, das sind Details, die man sich später noch überlegen kann.


Ich habe eine Amazon-Wishlist. wink Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal

Offline

Liked by:

florian

Fußzeile des Forums

up