MediaWiki Mirror Skript

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;

Ergebnis

Schreibe einen Kommentar