Tolle Idee und Skript von laub-home.de. Damit spiegel ich mir jetzt mein Wiki auf einen zweiten Server.
Das MediaWiki Verzeichnis wird mit rsync auf einen anderen Server kopiert und dort ein aktueller Dump der Datenbank wieder eingespielt.
Dient mir nicht als Backup (ist es natürlich auch), sondern eher als Hochverfügbarkeit meines Wiki. (Backup wird ja eh täglich gemacht.)
MediaWiki Server
Beide werden im selben LAN auf unterschiedlichen Servern betrieben.
- wiki.bachmann.lan (Debian 11, Nginx, MariaDB, PHP 7.4)
- wiki-mirror.bachmann.lan (Debian 11, Nginx, MariaDB, PHP 7.4)
Vorbereitungen
SSH Zugang ohne Passwort von wiki zum wiki-mirror.
Den ~/.ssh/id_rsa.pub key von wiki in die ~/.ssh/authorized_keys von wiki-mirror einfügen. # SSH Zugang testen root@wiki:~# ssh root@wiki-mirror.bachmann.lan uname -a Linux wiki-mirror 5.15.35-1-pve #1 SMP PVE 5.15.35-3 (Wed, 11 May 2022 07:57:51 +0200) x86_64 GNU/Linux
Leere Wiki Datenbank auf dem wiki-mirror anlegen. Beide Datenbanken müssen/sollten den gleichen Namen, Benutzer und Passwort haben.
root@wiki-mirror:~# mysql MariaDB [(none)]> create database mediawiki: MariaDB [(none)]> grant all on mediawiki.* to 'mediawiki-user'@'localhost' identified by 'mediawiki-passwort'; MariaDB [(none)]> flush privileges;
Ein neues abgeändertes Logo in den Skinsordner von wiki kopieren. Für eine kleine optische Unterscheidung. (optional)
/var/www/html/skins/logo-mirror.png
Diese Zeilen in der LocalSettings.php von wiki, um den Mirror später in den ReadOnly Mode zu versetzten.
# ReadOnly Mode #$wgReadOnly = "<h1><b>Ist nur der Mirror, bitte unter wiki.bachmann.lan editieren.</b></h1><br>";
Diese Zeilen in der LocalSettings.php von wiki, um später das nicht laden von Thumbnails zu verhindern.
# ReadOnly Mode Thumbnails #$wgIgnoreImageErrors = true;
mediawiki-mirror-site.sh
Das Mirror Skript.
#!/bin/bash # Dieses Skript erstellt eine 1zu1 Kopie eines Mediawikis auf einem anderen System. # by A.laub andreas[-at-]laub-home.de # modified by Michael Bachmann MYSQLDUMPUSER="mediawiki-user" # Datenbank Benutzer MYSQLDUMPPASSWORD="mediawiki-passwort" # Datenbank Passwort DUMPDATABASE="mediawiki" # Name der Datenbank DUMPFILE="/tmp/$DUMPDATABASE.sql.gz" # Datei des MySQL dumps auf dem lokalen Server TARGETHOST="wiki-mirror.bachmann.lan" # Name oder IP des Zielhost DUMPTARGET="/tmp/$DUMPDATABASE.sql.gz" # Datei des MySQL dumps auf dem Zielhost SSHPORT="22" # ssh port WIKIFILES="/var/www/html/*" # Verzeichnis des MediaWiki auf dem lokalen Server TARGETWIKIFILES="/var/www/html/" # Verzeichnis des MediaWiki auf dem Zielhost LSETTINGS="${TARGETWIKIFILES}LocalSettings.php" # Pfad zur LocalSettings.php auf dem Zielhost DEJSON="${TARGETWIKIFILES}/languages/i18n/de.json" # Pfad zur de.json auf dem Zielhost # MySQL dump erstellen mysqldump --databases $DUMPDATABASE -u$MYSQLDUMPUSER -p$MYSQLDUMPPASSWORD | gzip > $DUMPFILE # MySQL dump auf den Zielhost kopieren scp -q -P $SSHPORT $DUMPFILE $TARGETHOST:$DUMPTARGET # MySQL dump auf dem Zielhost einspielen ssh -p $SSHPORT $TARGETHOST "gunzip < $DUMPTARGET | mysql -u$MYSQLDUMPUSER -p$MYSQLDUMPPASSWORD" # MediaWiki Dateien syncen rsync --rsh="ssh -p$SSHPORT" --progress --stats --delete -azq --partial --inplace $WIKIFILES $TARGETHOST:$TARGETWIKIFILES # MediaWiki Sitename und Server anpassen ssh -p $SSHPORT $TARGETHOST "sed -i '/\$wgSitename/s/wiki/wiki-mirror/g' $LSETTINGS" ssh -p $SSHPORT $TARGETHOST "sed -i '/\$wgServer/s/wiki/wiki-mirror/g' $LSETTINGS" # MediaWiki Logo ändern ssh -p $SSHPORT $TARGETHOST "sed -i 's/blan-circle.png/blan-circle-mirror.png/g' $LSETTINGS" # MediaWiki auf ReadOnly setzen ssh -p $SSHPORT $TARGETHOST "sed -i -e s/'^#\$wgReadOnly'/'\$wgReadOnly'/g $LSETTINGS" # MediaWiki Anzeigeproblem von Thumbnails beheben ssh -p $SSHPORT $TARGETHOST "sed -i -e s/'^#\$wgIgnoreImageErrors'/'\$wgIgnoreImageErrors'/g $LSETTINGS" # MediaWiki Fehlermeldung beim Anmelden patchen ssh -p $SSHPORT $TARGETHOST "sed -i 's/Es gab ein Problem bei der.*/READONLY wiki-mirror.bachmann.lan\",/g' $DEJSON" # aufräumen rm -f $DUMPFILE
cronjob
Das Skript wird jede Nacht automatisch ausgeführt.
MAILTO="hostmaster@bachmann.lan" # 3:11 Uhr - spiegelt wiki auf wiki-mirror 11 3 * * * /opt/scripts/mediawiki-mirror-site.sh > /dev/null
ReadOnly Probleme
Ein aktives $wgReadOnly führte leider zu einigen Fehlermeldungen und Problemen. (konnten aber alle behoben werden)
Login
Beim Versuch sich Anmelden, erscheint diese verwirrende Fehlermedung.
Es gab ein Problem bei der Übertragung deiner Benutzerdaten. Diese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern. Bitte sende das Formular erneut ab.
In der /var/www/html/languages/i18n/de.json kann man den Text einfach ändern.
"sessionfailure": "READONLY wiki-mirror.bachmann.lan",
Thumbnails
Müssen im schreibgeschützten Modus Bilder transformiert oder skaliert werden, kommt es zu dieser Fehlermeldung und es werden keine Thumbnails angezeigt.
Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden.
Mit diesem Eintrag in der LocalSettings.php werden auch die Thumbnails wieder ohne Fehlermeldung angezeigt.
$wgIgnoreImageErrors = true;