= MediaWiki =

[Mediawiki|http://www.mediawiki.org/wiki/MediaWiki] ist eine sehr erfolgreiche Wiki-Software, die unter anderem von [Wikipedia|http://de.wikipedia.org] benutzt wird. Ihre starke Verbreitung resultiert hauptsächlich daraus, das viele Menschen heutzutage über Wikipedia Ihren ersten Kontakt zu einem Wiki haben. Insbesondere haben es andere Wiki-Engines natürlich schwer, wenn sie dann noch eine andere Syntax als den "Wikipedia-Standard" benutzen (wie z.B. das JPSWiki hier in der LUG Krefeld, das wir jedoch mit einem eigenen Plugin etwas gezähmt haben).


== Installation auf einem Debian-System ==

Ich habe einen dedizierten Server im Internet, auf dem ich neben anderen Dingen, die dort bereits liefen, ein Mediawiki für mein FreiBier-Projekt aufsetzen wollte.

'''Meine Umgebung:''' Ich bevorzuge Debian-Pakete, weil diese sich normalerweise besser aktualisieren lassen als eine händische Installation. Da auf dem Server bereits andere Applikationen laufen, die eine PostgreSQL Datenbank voraussetzen, wollte ich die Option wählen, Mediawiki auf Postgres zugreifen zu lassen. Außerdem wollte ich mir die Option offenhalten, eventuell später weitere Wikis unter anderem Namen laufen zu lassen.

Auf dem Server habe ich folgendes installiert:

  aptitude install postgresql-contrib
  aptitude install mediawiki php5-pgsql
  aptitude install mediawiki-extensions

Durch die Angabe der beiden postgres-Pakete habe ich dafür gesorgt, das Mediawiki automatisch den Postgres-Server benutz hat. Das ging eigentlich danach komplett von alleine. :-) Das Extensions-Paket ist nicht dringend nötig, ich wollte es allerdings so haben - wer will, kann sich auch die einzelnen Erweiterungen Paket für PAket installieren, die für Debian vorliegen.

Da ich vorher den Apache Webserver bereits installiert hatte, wurde bei mir ''apache-mpm-worker'' deinstalliert (und durch ''apache-mpm-prefork'' ersetzt). Hierbei handelt es sich um eine andere Variante des Apache Binaries, die ihre Threads anders organisiert. Das liegt am phpmod-Modul, das nicht threadsafe ist und sollte im praktischen Betrieb keinen grossen Unterschied machen, wenn man nicht wirklich grosse Mengen an Web-Anfragen bedienen möchte.

Um zu sehen, wie ich am besten vorgehe, habe ich mir http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Debian_GNU/Linux durchgelesen. 

Danach war dann noch http://www.mediawiki.org/wiki/Manual:Short_URL wichtig. Ich habe das Problem der "Short URLs" von Anfang an richtig lösen wollen, um nicht später wieder alles umbauen zu müssen. "Short URL" bedeutet, das man auf eine Wikiseite "Blablabla" mit der URL http://www.meinserver.net/wiki/Blablabla zugreifen kann. Da intern ein PHP-Skript mit Parametern aufgerufen wird, das unter einem ganz anderen Pfad liegt, muss das extra eingerichtet werden. Dieses URL-Schema hat aber den Vorteil, das die URLs für einen außenstehenden Anwender gut und logisch aussehen. Sollte man später aus irgendeinem Grunde die Domain oder die Wiki-Software wechseln, so können die einfachen URLs leicht auf das neue System gemappt werden.


In /etc/mediawiki/apache.conf habe ich nun eingefügt:

  Alias /wiki /var/lib/mediawiki/index.php

Hierdurch wird die vorne angegebene URL auf den hinten angegebenen Dateipfad gemappt.

Hat man das gemacht, kann auch schon auf die URL http://www.meinserver.org/wiki zugegriffen werden. Die eigentliche Konfiguration geschieht dort per Weboberfläche und erzeugt eine Datei namens ~LocalSettings.php. Diese kopiere ich wie in der [Anleitung|http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Debian_GNU/Linux] beschrieben nach /etc/mediawiki/

Damit funktioniert das Wiki erstmal, hat aber keine hübschen Short URLs. Um das umzusetzen, bin ich nach http://www.mediawiki.org/wiki/Manual:Short_URL vorgegangen:

Im www-Verzeichnis dieses Hosts wird ein Symlink "w" eingerichtet:

cd /var/www
ln -s /var/lib/mediawiki/ w

Dann habe ich folgende Einstellungen in ~LocalSettings.php gemacht.

$wgScriptPath       = "/w";   
$wgScriptExtension  = ".php";
## -TB-
$wgArticlePath      = "/wiki/$1";
$wgUsePathInfo      = true;


== Wiki mit eigenem Benutzer und virtuellem Host ==

Da ich später vielleicht verschiedene Wikis haben möchte (und da die vorhandenen Dateien einen eigenen Benutzer haben sollten), habe ich einen neuen Benutzer "freibier" angelegt. In dessen Home-Verzeichnis habe ich nun ein Unterverzeichnis "public_html" angelegt und dort sowohl eine Datei '''index.php''' als auch einen Symlink '''w''' (nach ''/usr/share/mediawiki'') angelegt.

'''index.php''' enthält einen HTTP-Redirect wie in http://www.mywebsolution.de/tipps/13/show_PHP-redirect.html erklärt (In [SelfHTML|http://de.selfhtml.org/html/kopfdaten/meta.htm] steht, warum ein HTTP-Redirect besser ist als ein HTML-Redirect und das das nur als CGI möglich ist - also in diesem Falle als PHP-Skript).

Ein virtueller Server wird im Apache durch eine Datei ''/etc/apache2/sites-available/www_frei-bier_org'' konfiguriert, die bei mir so aussieht:

<pre>
  <VirtualHost *:80>
        ServerName www.frei-bier.org
        ServerAdmin webmaster@localhost

        DocumentRoot /home/freibier/public_html/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/freibier/public_html/>
                Options Indexes FollowSymLinks MultiViews ExecCGI
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined

  </VirtualHost>
</pre>

Dieser virtuelle Server wird dann mittels 

  a2ensite www_frei-bier_org

und einem folgenden Apache-reload (wie angegeben) aktiviert.


== Mehrere Wikis auf einem Server ==

Hierzu gibt es verschiedene Möglichkeiten. Man kann in der Apache-Konfiguration mehrere virtuelle Domains anlegen und dann eine einzelne Mediawiki-Instanz starten. Dabei geht es dann darum, dem Wiki beim Starten eine jeweils andere ~LocalSettings.php unterzuschieben. Dort stehen dann entsprechend Einstellungen für ein anderes Upload-Verzeichnis und andere Datenbank-Zugangsdaten. Hierzu liest man am besten:

* http://www.mediawiki.org/wiki/Manual:Wiki_family
* http://www.steverumberg.com/wiki/index.php/WikiHelp

Es ist übrigens auch möglich, das Upload-Verzeichnis zwischen mehreren Wikis zu teilen.

=== mehrere Wikis in einer Domain ===

Will ich mehrere Wikis in einer gemeinsamen Domain haben, so muss ich etwas anders vorgehen. Die Wikis sollen später jeweils unter einer eigenen URL zugänglich sein, also z.B. wiki.meinprojekt.org/de und wiki.meinprojekt.org/en um zwei Wikis zum gleichen Thema in unterschiedlichen Sprachen anzubieten.

Als erstes muss ich verstehen, was es mit den oben erwähnten "Short URLs" auf sich hat. Es ist nämlich so, das ich für jedes Wiki zwei Pfade benötige: Den echten und den für die Short-URL benutzten.

Ich lege ein ganz normales Webverzeichnis an. Dieses muss nun jeweils ein Unterverzeichnis für jede Wiki-Installation bekommen. Ich habe also später auch keine gemeinsame ~LocalSettings.php, sondern für jedes Wiki eine eigene. Das sieht auf den ersten Blick umständlich aus, erlaubt aber später auch eine einfachere Wartung, weil jedes Wiki erst mal für sich alleine steht. Das Verzeichnis fülle ich nun nicht mit einer Kopie des Mediawike-Programms, sondern nur mit Links. Der verwendete Verzeichnisname ist der kanonische Pfad (d.h. ohne die Verwendung von Short-URLs), der für Sonderfunktionen des Wikis z.B. für Image-Pfade oder beim editieren verwendet wird. Der zweite URL-Name, der für externe Links bevorzugt wird, wird später per Alias eingerichtet. Jedes dieser Unterverzeichnisse enthält eine Kopie der mediawiki-Installation bzw. symlinks auf selbige.

  cd
  wget download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.1.tar.gz
  tar xzf mediawiki-1.19.1.tar.gz
  ln -s mediawiki-1.19.1 mediawiki
  cd wiki
  mkdir w-de
  cd w-de
  for file in `ls ~/mediawiki` ; do ln -s ~/mediawiki/$file $file ; done ;
  rm images
  mkdir images
  chmod 777 images

Nun kann man auf das Wiki zugreifen, indem man den Browser auf die URL wiki.meinprojekt.org/w-de/index.php lenkt. Mit Hilfe des erscheinenden Konfigurators wird das Wiki fast von selbst eingerichtet. Wir achten lediglich darauf, das wir in der Postgres-Datenbank (die ich hier benutze) einen vernünftigen Namen für ein Datenbank-Schema vergeben, z.B. "de". Dadurch erhält jedes Wiki in der Datenbank sein eigenes Schema (Ein SChema unter Postgres ist sowas ähnliches wie eine "Datenbank" unter ~MySQL). Die am Ende erzeugte "~LocalSettings.php" Datei kopiert man dann in das Wiki-Verzeichnis und fertig!

In die site-available/... Datei, die die Domain für den Apache-Server einrichtet, kann man nun einen Eintrag aufnehmen, der eine ShortURL verwendet:

  Alias /de /home/idempiere/wiki/w-de/index.php

Gleichzeitig ergänzt man folgenden Eintrag in der "~LocalSettings.php":

  $wgArticlePath = "/de/$1";

Nun kann man auch mit der verkürzten URL auf Wikiseiten zugreifen.

Als nächstes wollen wir ein [Single-Sign-On|http://www.mediawiki.org/wiki/Manual:Shared_database] erreichen, d.h. eine gemeinsame User-Datenbank für alle Wikis. Das geht folgendermassen: Wir erzeugen per PGAdmin3 ein neues Schema "shared", in das wir die Sequenz "user_useR_id_seq" (von Hand) und die Tabellen "mwuser" und "user_properties" sowie "interwiki" (per SQL-Export und find/replace des Schemanamens) kopieren. In der ~LocalSettings.php ergänzt man:

  $wgSharedDB = "shared";
  $wgSharedTables[] = array( 'user', 'user_properties', 'interwiki' );

Leider gibt es einen [Bug mit PostgreSQL|https://bugzilla.wikimedia.org/show_bug.cgi?id=16794], den man aber beseitigen kann, wenn man die [vorgestellte Lösung|http://bug-attachment.wikimedia.org/attachment.cgi?id=9959] einbaut und am Ende noch um eine Zeile am Ende ergänzt:

  return $this->realTableName( $table, $format );

Nun haben wir gemeinsame Benutzer. Wer in einem Wiki eingeloggt ist, ist das gleichzeitig auch in allen anderen. :-)

Als nächstes möchte ich Sprach-Links haben. Dazu folge ich der [Dekumentation|http://www.mediawiki.org/wiki/Interwiki_link#Interwiki_links_to_other_languages], indem ich einfach einen Interwiki-Link mit dem Namen "de", "en", etc. erzeuge:

  insert into shared.interwiki (iw_prefix, iw_url, iw_local, iw_trans) VALUES ('en', 'http://wiki.meinprojekt.org/en/$1', 1, 0);

Später kann man dann noch Erweiterungen wie z.B. die [WikiFarm|http://www.mediawiki.org/wiki/Extension:WikiFarm] in Betracht ziehen. Diese läuft allerdings leider (noch) nicht mit PostgreSQL. Mal sehen, was da noch kommt...


== Welche Daten machen das Wiki aus? ==

Um meine Datensicherung zu planen stellt sich nun die Frage: Was macht diese Wiki-Installation denn nun aus? Hier ist zu nennen:

* Die Apache-Konfiguration, ohne die das Wiki nicht zu erreichen ist (das könnte man von Hand wiederherstellen)
* Die Datei ~LocalSettings.php, die alle Grundeinstellungen des Wiki enthält (auch das könnte man von Hand wieder herstellen)
* Das Images-Verzeichnis (in der Standard-Installation ''/var/lib/mediawiki/images''), das alle Uploads (also insbesondere Bilder) enthält.
* Die Datenbank (das ist der wichtigste Teil)

== Alternative ==

Wer (wie ich, PeterHormanns) so komplexe PHP-Anwendungen nicht mag, aber seinen Nutzern ein MediaWiki-kompatibles Wiki anbieten möchte, sollte sich [JAMWiki|http://jamwiki.org/] ansehen. 

[JAMWiki|http://jamwiki.org/] ist ein in Java programmierter Clone des MediaWiki unter LGPL.

Lines of Code
||~MediaWiki| 850.000 Zeilen| PHP
||JAMWiki| 35.000 Zeilen| Java
||JSPWiki| 85.000 Zeilen| Java
Zahlen lt. [Ohloh|http://www.ohloh.net/p/compare?project_0=JSPWiki&project_1=Jamwiki&project_2=MediaWiki] (abgerufen am 10.5.2012)


\\
[{Tag Wiki}]