Manual:Wiki-Familie

From mediawiki.org
This page is a translated version of the page Manual:Wiki family and the translation is 43% complete.
Outdated translations are marked like this.

In diesem Artikel wird gezeigt, wie MediaWiki zu konfigurieren ist, damit mehrere Wikis auf demselben Server laufen können. Mehrere Wikis, die sich auf demselben Server befinden, werden als Wiki-Familie oder Wiki-Farm bezeichnet. Eine Liste bekannter Wiki-Familien ist auf WikiApiary verfügbar.

Methoden

Allgemeine Grundsätze

Bei den meisten Konfigurationen von Wiki-Familien läuft eine einzige Instanz von MediaWiki. Die folgenden allgemeinen Schritte sind in diesem Szenario nötig:

  1. Eine normale MediaWiki-Seite installieren und daraus eine Datenbankvorlage erstellen. Diese kann entweder komplett leer sein (d. h. keine Einträge in irgendwelchen Tabellen) oder beliebige Anfangsseiten, Benutzer, Interwiki-Links usw. enthalten, die in jedem neuen Mitglied der Familie gewünscht sind. Für Einzelheiten siehe Handbuch:Installationsanleitung .
  2. Richten Sie Ihren Webserver so ein, dass Datenverkehr von mehreren Orten an eine MediaWiki-Installation weitergeleitet wird. Dies kann für mehrere Domänen, Unterdomänen oder Unterverzeichnisse gelten und kann über Symlinks, Aliase, das Umschreiben von URLs oder andere Mechanismen erfolgen.
  3. Add code to the top of LocalSettings.php, to detect the current wiki. For wikis by domain name:
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // Automatically set from --wiki option to maintenance scripts
        $wikiID = MW_DB;
    } else {
        // Use MW_DB environment variable or map the domain name
        $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
        if ( !$wikiID ) {
            die( 'Unknown wiki.' );
        }
    }
    
    $wgLocalDatabases = $wgConf->wikis = array_values( $wikis );
    $wgDBname = $wikiID;
    $wgDBuser = 'mediawiki';
    
  4. Configure settings that must differ for all wikis. For example:
    $wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname";
    $wgUploadDirectory = "$IP/images/$wgDBname";
    $wgUploadPath = "/w/images/$wgDBname";
    
  5. Configure per-wiki overrides. This should include at least $wgServer and $wgArticlePath.
    $wgConf->settings = [
        'wgServer' => [
            'examplewiki' => 'https://example.org',
            'onewiki' => 'https://one.example.org',
        ],
        'wgArticlePath' => [
            'default' => '/wiki',
        ],
        'wgSitename' => [
            'default' => 'Example',
            'onewiki' => 'One',
        ],
        'wgLogo' => [
            'default' => '/images/examplewiki/Example_logo.png',
        ],
        'wgLanguageCode' => [
            'default' => 'en',
            'onewiki' => 'pt',
        ],
    ];
    extract( $wgConf->getAll( $wgDBname  ) );
    
    Dies kann auch in einer separaten Datei geschehen, z. B.:
    # LocalSettings.php
    $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php';
    
    # LocalSettings_overrides.php
    return [
        'wgServer' => ..,
        ..,
    ];
    

To create a new wiki, create its database and add its settings first, and then run php maintenance/update.php --wiki=mywiki.

Separate Konfigurationsdateien

Dies ermöglicht es, mehr als ein Wiki auf einem einzigen Server zu installieren und dabei denselben Quellcode-Checkout zu verwenden.

  1. Install the first wiki as normal, via the web or CLI installer, which sets up your database and generates a LocalSettings.php file.
  1. After installation, rename the generated LocalSettings.php file to include the wiki ID (e.g. database name), like LocalSettings_mywiki.php.
  1. Die Schritte eins und zwei sind für jedes zu erstellende Wiki zu wiederholen.
  1. Create a new LocalSettings.php file that will load the correct one.
<?php
$wikis = [
    'example.org' => 'examplewiki',
    'one.example.org' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
    // Automatically set from --wiki option to maintenance scripts
    $wikiID = MW_DB;
} else {
    // <span lang="en" dir="ltr" class="mw-content-ltr">Use MW_DB environment variable or map the domain name</span>
    $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
}

if ( $wikiID ) {
    require_once "LocalSettings_$wikiID.php";
} else {
    die( 'Unknown wiki.' );
}

// Add any settings that should apply to all wikis below this line
// -------

Befinden sich die Wikis auf der gleichen Domain, aber unter verschiedenen Pfaden (z. B. example.org/wiki1, example.org/wiki2 usw.), kann Folgendes verwendet werden:

<?php
$wikis = [
    '/example' => 'examplewiki',
    '/w_example' => 'examplewiki',
    '/one' => 'onewiki',
    '/w_one' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
    // Automatically set from --wiki option to maintenance scripts.
    $wikiID = MW_DB;
} else {
    $path = explode( '/', $_SERVER['REQUEST_URI'] ? '', 3 )[1] ?? '';
    $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $path ] ?? null;
}

if ( $wikiID ) {
    require_once "LocalSettings_$wikiID.php";
} else {
    die( 'Unknown wiki.' );
}
If you use Short URL, you need to add both your $wgArticlePath and the $wgScriptPath.

Drupal-ähnliche Webseiten

This setup has the advantage of being completely transparent to users and reasonably secure in terms of the images directory.

  1. Create a base directory to contain all your MediaWiki files e.g. mkdir /home/web/mediawiki.
  2. Install MediaWiki and additional tools as usual to a version-declaring subdirectory (e.g., /home/web/mediawiki/mediawiki-1.10.0).
  3. Link the version-declaring directory to a code directory. e.g., ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  4. Create a sites directory to contain our images and settings: mkdir /home/web/mediawiki/sites
  5. Das Wiki wie gewohnt aus dem Verzeichnis /code einrichten.
  6. After successful installation, move LocalSettings.php into a sites directory that will be a match when the site is checked. For example, to capture http://example.com/mywiki, one would create the directory example.com.mywiki. e.g., mkdir /home/web/mediawiki/sites/example.com.mywiki. See the Drupal's settings.php file for more information on this.
  7. If you intend to use media files, create an images directory in your site directory. e.g., mkdir /home/web/mediawiki/sites/example.com.wiki/images. Make it writable as necessary.
  8. Place the Drupal-style LocalSettings.php file in your main directory: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. Modify the LocalSettings.php of each subsite to point to the right places:
    1. First comment out the code relating to $IP, (lines 16-20 in 1.15.3) as this is set to the code directory by index.php.
    2. Next insert the following two lines to ensure that image files are accessible, e.g.: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; and $wgUploadPath = "/images";. These need to be put somewhere after the call to DefaultSettings.php (line 25 in 1.15.3), as the variables will otherwise be reset.
    3. Bei Bedarf sind weitere Änderungen vorzunehmen.
  10. Eine Apache 2-Installation vorbereiten. Beispiel-Seite: wiki.example.com
    1. Create a link to the code directory, if required e.g. ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. Create an appropriate VHost configuration:
<VirtualHost *:80>
    ServerAdmin me@example.com
    DocumentRoot /home/web/wiki.example.com
    ServerName wiki.example.com
    CustomLog /var/log/apache2/wiki.mysite.log common
    # Alias for the site to be accessible
      Alias /mediawiki/code /home/web/mediawiki/code
    # Alias for wiki so images work
      Alias /images /home/web/mediawiki/sites/wiki.example.com/images
    # If you want to password protect your site
    #  <Directory /home/web/wiki.example.com>
    #    AuthType Basic
    #    AuthName "My protected wiki"
    #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
    #   require valid-user
    #  </Directory>
</VirtualHost>
11. If you are setting the sites up locally, update your hosts file with the site names. Die Seite sollte nun funktionieren

In my case, I made another copy of the code from which to install and update my LocalSettings.php and databases. Note that $_SERVER['HTTP_HOST'] in the companion Drupal code is undefined when running maintenance scripts from the command line, so this solution does not permit the use of maintenance scripts without some modification.

Modified Drupal-style method for Ubuntu

A simplified method for multiple wikis and multiple (or nested) subwikis on Ubuntu/Kubuntu that is loosely based on the above method can be found at:

Mehrere Wikis teilen sich gemeinsame Ressourcen

Einigen Wikis in verschiedenen Sprachen sollen die gleichen Mediendateien in einem weiteren, gemeinsamen Wiki zur Verfügung gestellt werden.

Zum Beispiel:

  • en.example.org - Englisch
  • fr.example.org - Französisch
  • de.example.org - Deutsch
  • pool.example.org - Gemeinsam genutzte Medien-Dateien für all diese Wikis.
The above example uses the name "pool". Avoid using the name "commons" because this may conflict with the interwiki link also named commons for Wikimedia Commons.

Also avoid using the name "media" (e.g. media.example.org) as that may cause a conflict between your interwiki and the internal namespace Media: for accessing local media files, e.g. [[media:File.png]].

Gemeinsam verwendete Databank-Tabellen

Consider using a shared database for user accounts. See Manual:Gemeinsame Datenbank for instructions on setting up shared database tables.

Interwiki

Die Interwikilinks zwischen allen Wikis setzen, indem man Erweiterung:Interwiki nutzt. If the wikis are language editions, it is recommended to name the interwiki prefix after the exact language code. For example, "de" for the German wiki in your family. This way, you can connect pages about the same subject using language links.

Beispielsweise kann von der Hauptseite des deutschen Wikis per [[en:Main Page]] auf die englische Hauptseite verlinkt werden. Für weitere Informationen siehe Help:Interwiki linking

If you have a central wiki for files, create a prefix for this as well. E.g. pool to https://pool.example.org/wiki/$1 and enable the "Forward" checkbox to recognise it as a local wiki in the same family.

Hochladen

Stelle sicher, dass der "images"-Ordner des PoolWikis beschreibbar ist.

Jetzt sollten die Sprach-Wikis so eingestellt werden, dass der "Upload"-Link auf die Uploadseite des Pool-Wikis verweist. Dies macht man, indem man in den "LocalSettings.php" der Sprachwikis folgendes hinzufügt:

$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";

In 1.17, you'll also have to set $wgUploadMissingFileUrl to be redirected to the pool-wiki on red links.

$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";

Wenn Uploads nur für das Pool-Wiki zugelassen werden sollen, kann Folgendes verwendet werden:

if ( $wgDBname === 'pool' ) {
	$wgEnableUploads = true;
} else {
	$wgEnableUploads = false;
}

Gemeinsame Dateien verwenden

Damit die Sprachwikis die Dateien des PoolWikis benutzen können, muss ebenfalls in jeder "LocalSettings.php" der Sprachwikis hinzugefügt werden:

$wgUseSharedUploads = true;
$wgSharedUploadPath = 'https://pool.example.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;

Nun kann Pools mit Dateien (z.B. [[File:MyLogo.png]]) in die Sprachwikis integriert werden.

Bildbeschreibung

In jedem Sprachwiki ist (als Administrator) die Nachricht MediaWiki:Sharedupload-desc-here zu öffnen.

Der Text ist zu ändern in etwas wie:

Diese Datei wird im data-pool gespeichert.
Für Informationen und Beschreibungen siehe die [[:pool:File:{{PAGENAME}}|Beschreibung hier]].

(And note the ':' at the beginning of the line, which stops 'pool' from being included in the interwiki list at the left of the page.)

If you want to output the media-description, stored in the PoolWiki, too, add to the "LocalSettings.php" of the languagewikis:

$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool';  # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "https://pool.example.org/index.php/Image:";

Wiki-Familien-Erweiterungen

Es gibt mehrere MediaWiki-Erweiterungen, die versuchen, das Hosting mehrerer Wikis durch die Verwendung einer einzigen Code-Basis zu vereinfachen, allerdings ist derzeit nur eine davon nennenswert:

Siehe auch

  • Central ID — the mechanism by which user accounts can have an extra 'central' identifier.

Einzelnachweise