Mediawiki

Aus Mikiwiki
Version vom 11. Februar 2009, 01:12 Uhr von Michi (Diskussion | Beiträge) (Dynamische Navigationsboxen)

Wechseln zu: Navigation, Suche

Die Wiki-Software Mediawiki (auch: MediaWiki) wurdefür die freie Online-Enzyklopädie Wikipedia entwickelt. Inzwischen laufen auch die Wikipedia-Ableger Wikisource (freie Quellen zur Wikipedia), Wiktionary (Wörterbuch), Wikiquote (Zitatensammlung) und Wikibooks (Sachbücher) sowie eine Vielzahl anderer Projekte im Internet oder in Intranets mit dieser Software. Sie ist unter der GPL lizenziert und in der Programmiersprache PHP geschrieben. Zum Speichern der Inhalte nutzt Mediawiki die relationale Datenbank Mysql. Wahlweise kann seit Version 1.5 auch Postgresql als Datenbankserver verwendet werden.

Zur Installation dient ein kleines PHP-Skript. Im Verzeichnis "maintenance/archives" finden sich SQL-Skripte zum Anlegen der Tabellen, Indizes und Benutzer. Nach Anpassung der Datei "LocalSettings.php" müssen alle PHP-Dateien (auch die in den Unterverzeichnissen) in das gewünschte Serververzeichnis kopiert werden. Der Aufruf der Datei "wiki.phtml" im Browser startet das Wiki, wobei "phtml" als PHP-Endung in der Apache-Konfiguration eingetragen sein muss.

Produkte

Ich liste hier nur die von mir selber verwendeten Versionen.

Konzepte

Installation

Das Installationsskript legt drei MySQL-Benutzer an und setzt deren Rechte in der Datenbank.

  • Der Benutzer "$wgDBuser" führt alle normalen Datenbankoperationen durch
  • Der SQL-Benutzer "$wgDBsqluser" hat nur Lesezugriff und wird für die Spezialseite verwendet, auf welcher der Systemverwalter SQL-Abfragen ausführen kann. Dammit können z. B. neue Benutzer gefunden und begrüsst werden.
  • Der Benutzer "$wgDBadminuser" und sein Passwort werden zusätzlich in der Datei "AdminSettings.php" eingetragen. Dieser Benutzer mit Schreibrecht auf die Wiki-Datenbank wird bei der Installation und von den Wartungsskripten verwendet.

Das Installationsskript (früher "install.php") fragt u. a. nach dem MySQL-Root-Passwort und legt die Datenbank, Tabellen und MySQL-Benutzer an. Zuletzt wird angeboten, zwei Wiki-Benutzerkonten (Sysop, Developer) anzulegen. Die Konfiguration des Webservers beschränkt sich darauf, die Dateiendung ".phtml" als PHP-Erweiterung einzutragen.

AddType application/x-httpd-php .php .phtml

Im bei der Installation erzeugten Verzeichnis "upload", in dem Mediawiki hochgeladene Dateien speichert, sollte die Ausführung von PHP und die Darstellung von HTML verboten sein:

<Directory "/path/to/upload/directory">
  AllowOverride None
  AddType text/plain .html .htm .shtml
  php_admin_flag engine off
</Directory>

Konfiguration

Die Konfiguration von Mediawiki findet in der Datei "LocalSettings.php" statt.

Grundkonfiguration
$IP Lokaler Pfad, auf dem Rechner, in den das Wiki kopiert werden soll, z. B. "/srv/www/htdocs"
$wgServer Teil der Rechneradresse vor dem ersten Schrägstrich, z. B. "http://www.meinwiki.ch/"
$wgScriptPath Unterverzeichnis mit den PHP-Dateien, z. B. "wiki"; diese Variable wird leergelassen (""), wenn diese im Hauptverzeichnis liegen.
$wgEmergencyContact E-Mail-Adresse des Systemverwalters, die bei Problemen angezeigt wird.
$wgDBserver Name der Mysql-Datenbank.
$wgDBuser
$wgDBpassword
Mysql-Benutzer für den normalen Datenbankzugriff.
$wgDBsqluser
$wgDBsqlpassword
Mysql-Benutzer für SQL-Abfragen über den Webbrowser, hat nur Leserechte.
$wgLanguageCode Zwei-Buchstaben-Code der verwendeten Sprache, z. B. "de" für Deutsch.

Für ein schnelleres Laden der Inhalte sowie weniger Bandbreitenverbrauch können häufig geladene Dateien wie "main.css" oder "wikibits.js" von überflüssigen Kommentaren und Leerzeichen befreit werden.

FAQ

Änderung des Icons im Webbrowser

Das sogenannte Favicon im Webbrowser links vom URL kann in der Datei "DefaultSettings.php" mit folgender Variable bestimmt werden. Im Beispiel befindet sich die Datei "favicon.ico" im Apache-Wurzelverzeichnis.

$wgFavicon = '/favicon.ico';

Dynamische Navigationsboxen

Ein ein- und ausklappbares Menü besteht aus folgenden Teilen.

<div class="NavFrame">
  <div class="NavHead">[... Das ist der Titel ausklappbaren Inhalts ...]</div>
  <div class="NavContent">
    [... Hier der Inhalt der versteckt werden soll ...]
  </div>
</div>

Sicherung

Eine Sicherung von Mediawiki besteht aus folgenden Teilen:

  • der Wiki-Inhalt aus der MySQL-Datenbank, der auf zwei Arten erstellt werden kann:
    • ein SQL-Datenbankdump mit "mysqldump"
    • ein XML-Datenbankdump mit dem Skript "dumpBackup.php"
  • die Bilder und sonstigen Dateien mit tar
  • Konfigurationsdateien wie "LocalSettings.php" oder "AdminSettings.php"
  • Mediawiki-Programmdateien, einschliesslich aller Skins und Erweiterungen

Ich nutze für die tägliche Sicherung folgendes Skript:

#!/bin/bash
#
# Name         MEDIAWIKIbackup-kuhn.sh
# Author       Michael Kuhn
# Date         28 December 2008
# Description  Basic backup script for a Mediawiki installation

# set -x

##### CONFIGURATION #####
 
# The database the wiki stores data in
DATABASE="$1"
#
USER=root
#
PASSWORD=
#
# The directory Mediawiki is installed in 
MEDIAWIKIPATH=$2
#
# The directory to write the backup to
BACKUPPATH=~/backup/mediawiki
#
# File system where the BACKUPPATH resides (according to "df -k")
BACKUPFILESYSTEM=/dev/hdv1
#
# An e-mail address to notify
EMAILTO=$3

##### MAIN #####

TIMESTAMP=$(date -I)
DATABASEDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-${TIMESTAMP}.sql.bz2
XMLFULLDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-full-${TIMESTAMP}.xml.bz2
XMLCURRENTDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-current-${TIMESTAMP}.xml.bz2
FILEDUMP=${BACKUPPATH}/${DATABASE}-${TIMESTAMP}.files.bz2
DISKSEIZURE=$(df -k | grep ^$BACKUPFILESYSTEM | awk '{ print $5 }' | awk 'BEGIN { FS = "" } { print $1 $2 }')

if [ $DISKSEIZURE -gt 90 ]; then
  ( printf "To: ${EMAILTO}\n" ;
    printf "Subject: ALARM!!! $(uname -n) ($1) ";
    printf "${DISKSEIZURE}%% Disk nearly full!!! "
    printf "(hosttime $(date -I))\n";
    printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
else
  echo 
  echo "Mediawiki backup"
  echo "  Database : ${DATABASE}"
  echo "  Directory: ${MEDIAWIKIPATH}"
  echo "  Backup to: ${BACKUPPATH}"
  echo
  echo "Creating database dump ${DATABASEDUMP}..."
  /usr/bin/mysqldump -u ${USER} --password=${PASSWORD} --quick ${DATABASE} |\
    bzip2 -c > ${DATABASEDUMP}          || exit $?
  if [ $? = 0 ]
    then
    ( printf "To: ${EMAILTO}\n" ;
      printf "Subject: SUCCESS: $(uname -n) ";
      printf "$(df -k | grep ${BACKUPFILESYSTEM} | awk '{print $5}')% ";
      printf "dump ${DATABASE} (hosttime $(date -I))\n";
      printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
  elif [ $? != 0 ]
    then
    ( printf "To: ${EMAILTO}\n" ;
      printf "Subject: ALARM!!! $(uname -n) ";
      printf "Creating dump ${DATABASEDUMP} NOT successful! ";
      printf "(hosttime $(date -I))\n";
      printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
  fi
  echo
  echo "Creating XML full dump ${XMLFULLDUMP}..."
  cd ${MEDIAWIKIPATH}/maintenance
  php -d error_reporting=E_ERROR dumpBackup.php --full | \
    bzip2 -c > ${XMLFULLDUMP}           || exit $?

  echo
  echo "Creating XML current dump ${XMLCURRENTDUMP}..."
  cd ${MEDIAWIKIPATH}/maintenance
  php -d error_reporting=E_ERROR dumpBackup.php --current | \
    bzip2 -c > ${XMLCURRENTDUMP}        || exit $?

  echo
  echo "Creating file archive ${FILEDUMP}..."
  cd "${MEDIAWIKIPATH}"
  tar --exclude .svn -zcf ${FILEDUMP} . || exit $?

  echo
  echo "Done!"
  echo
  echo "Files to copy to a safe place:"
  echo "- ${DATABASEDUMP}"
  echo "- ${XMLFULLDUMP}"
  echo "- ${XMLCURRENTDUMP}"
  echo "- ${FILEDUMP}"
fi

##### END #####

Die crontab ruft das Skript wie folgt auf.

30 5 * * * /home/mik/bin/MEDIAWIKIbackup-kuhn.sh database /var/www/directory emailaddress

Weblinks

Folgende Weblinks behandeln Mediawiki-Themen:

Siehe die Dokumentation zur Anpassung der Benutzeroberfläche und das Benutzerhandbuch für Hilfe zur Benutzung und Konfiguration.