Příručka:Rodina wiki

This page is a translated version of the page Manual:Wiki family and the translation is 92% complete.

A wiki family is a collection of two or more wikis that run on the same server and share a common set of resources from the parent installation, while each wiki remains otherwise independent. This setup is an alternative to running fully separate installations of MediaWiki. It may be the preferred choice if the site admin wants to reduce the amount of work involved in managing multiple wikis, or cut down on inode usage. For this reason, some wiki hosting services opt for the wiki family model.

The best known implementation of a wiki family is the wiki farm, although other approaches are possible. A list of known wiki farms is available on WikiApiary .

Níže jsou uvedeny pokyny, jak nastavit MediaWiki, aby hostovala více než jednu wiki.

Metody

Wiki farma

Následující kroky jsou pro spuštění více wikin na stejné verzi MediaWiki:

  1. Nainstalujte první wiki jako obvykle. Další podrobnosti najdete na Příručka:Instalační příručka .
  2. Povolte svému webovému serveru sdílení vaší instalace MediaWiki se všemi wikinami. For multiple (sub)domains, have your web server accept connections from all the relevant domains. Pro více podadresářů můžete použít pravidla přepisu, aliasy nebo symbolické odkazy.
  3. Přidejte kód do horní části LocalSettings.php, abyste zjistili aktuální wiki. Všimněte si, že pokud argument --wiki obsahuje pomlčku, bude argument rozdělen na pomlčku a výsledné dvě hodnoty přiřazené MW_DB a MW_PREFIX, v tomto pořadí. Pro wikiny podle názvu domény:
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // Automaticky nastaveno z možnosti --wiki na skripty údržby
        $wikiID = MW_DB;
    } else {
        // Použijte proměnnou prostředí MW_DB nebo namapujte název domény
        $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. Nakonfigurujte nastavení, která se musí lišit pro všechny wikiny. Například:
    $wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname";
    $wgUploadDirectory = "$IP/images/$wgDBname";
    $wgUploadPath = "/w/images/$wgDBname";
    
  5. Nakonfigurujte přepsání podle wiki. To by mělo zahrnovat alespoň $wgServer a $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  ) );
    
    To lze provést ze samostatného souboru, např.:
    # LocalSettings.php
    $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php';
    
    # LocalSettings_overrides.php
    <?php
    return [
        'wgServer' => ..,
        ..,
    ];
    

To add a new wiki to the family:

Samostatné soubory nastavení

Tento přístup je pro provozování zcela nezávislých wikin, ale stále sdílení stejného webového serveru a zdrojového kódu MediaWiki.

Nainstalujte první wiki jako obvykle přes web nebo instalační program CLI, který nastaví vaši databázi a vygeneruje soubor LocalSettings.php .

  1. Po instalaci přejmenujte vygenerovaný soubor LocalSettings.php tak, aby obsahoval wiki ID (např. název databáze), například LocalSettings_mywiki.php.
  2. Opakujte krok jedna a dva výše pro každou wiki, kterou chcete vytvořit.
  3. Vytvořte nový LocalSettings.php soubor, který načte ten správný. Stejně jako ve výše uvedeném příkladu wiki farmy bude argument --wiki obsahující pomlčku rozdělen na pomlčku na dvě hodnoty přiřazené k MW_DB a MW_PREFIX.
    <?php
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // Automaticky nastaveno z možnosti --wiki na skripty údržby
        $wikiID = MW_DB;
    } else {
        // Použijte proměnnou prostředí MW_DB nebo namapujte název domény
        $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
    }
    
    if ( $wikiID ) {
        require_once "LocalSettings_$wikiID.php";
    } else {
        die( 'Unknown wiki.' );
    }
    
    // Pod tento řádek přidejte všechna nastavení, která by měla platit pro všechny wikiny
    // -------
    
    Pokud jsou vaše wikiny ve stejné doméně, ale pod různými cestami (např. example.org/wiki1, example.org/wiki2 atd.), můžete použít něco takového:
    <?php
    $wikis = [
        '/example' => 'examplewiki',
        '/w_example' => 'examplewiki',
        '/one' => 'onewiki',
        '/w_one' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // Automaticky nastaveno z možnosti --wiki na skripty údržby.
        $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.' );
    }
    
Pokud používáte Short URL, musíte přidat své $wgArticlePath i $wgScriptPath.

Stránky ve stylu Drupal

Toto nastavení má tu výhodu, že je pro uživatele zcela transparentní a přiměřeně bezpečné z hlediska adresáře obrázků.

  1. Vytvořte základní adresář, který bude obsahovat všechny vaše soubory MediaWiki např. mkdir /home/web/mediawiki.
  2. Nainstalujte MediaWiki a další nástroje jako obvykle do podadresáře deklarujícího verzi (např., /home/web/mediawiki/mediawiki-1.10.0).
  3. Propojte adresář deklarující verzi s adresářem kódu. např., ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  4. Vytvořte adresář sites, který bude obsahovat naše obrázky a nastavení: mkdir /home/web/mediawiki/sites
  5. Nastavte wiki jako obvykle z adresáře /code.
  6. Po úspěšné instalaci přesuňte LocalSettings.php do adresáře webů, který bude při kontrole webu odpovídat. Například pro zachycení http://example.com/mywiki by se vytvořil adresář example.com.mywiki. např., mkdir /home/web/mediawiki/sites/example.com.mywiki. Další informace o tom najdete v souboru Drupal settings.php.
  7. Pokud máte v úmyslu používat mediální soubory, vytvořte v adresáři webu adresář images. např., mkdir /home/web/mediawiki/sites/example.com.wiki/images. Udělejte jej podle potřeby zapisovatelným.
  8. Umístěte soubor Drupal-style LocalSettings.php do svého hlavního adresáře: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. Upravte LocalSettings.php každé podstránky tak, aby ukazoval na správná místa:
    1. Nejprve zakomentujte kód týkající se $IP (řádky 16-20 v 1.15.3), protože je index.php nastaven na adresář code.
    2. Poté vložte následující dva řádky, abyste zajistili, že soubory obrázků jsou přístupné, např.: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; a $wgUploadPath = "/images";. Ty je třeba někam umístit po volání na DefaultSettings.php (řádek 25 v 1.15.3), protože jinak se proměnné vynulují.
    3. Podle potřeby proveďte další úpravy.
  10. Připravte si instalaci Apache 2. Příklad webu: wiki.example.com
    1. Vytvořte odkaz na adresář code, je-li to požadováno např. ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. Vytvořte vhodnou konfiguraci virtuálního hostitele:
      <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 webu, aby byl přístupný
            Alias /mediawiki/code /home/web/mediawiki/code
          # Alias pro wiki, takže obrázky fungují
            Alias /images /home/web/mediawiki/sites/wiki.example.com/images
          # Pokud chcete své stránky chránit heslem
          #  <Directory /home/web/wiki.example.com>
          #    AuthType Basic
          #    AuthName "Moje chráněná wiki"
          #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
          #   require valid-user
          #  </Directory>
      </VirtualHost>
      
11. Pokud nastavujete weby lokálně, aktualizujte svůj soubor hosts názvy webů. Stránka by nyní měla fungovat.

V mém případě jsem vytvořil další kopii kódu, ze kterého jsem mohl nainstalovat a aktualizovat svůj LocalSettings.php a databáze. Všimněte si, že $_SERVER['HTTP_HOST'] v doprovodném kódu Drupalu není definován při spouštění skriptů údržby z příkazového řádku, takže toto řešení neumožňuje použití skriptů údržby bez určitých úprav.

Upravená metoda ve stylu Drupalu pro Ubuntu

Zjednodušenou metodu pro více wikin a více (nebo vnořených) podwikin na Ubuntu/Kubuntu, která je volně založena na výše uvedené metodě, lze nalézt na:

Jak se zachází s wiki farmami ve skriptech údržby

Udržovací skripty MediaWiki (např. update.php) přijímají argument --wiki, který je předán do vašeho souboru LocalSettings.php jako konstanty MW_DB, MW_PREFIX a MW_WIKI_NAME. Celá hodnota argumentu --wiki je hodnota MW_WIKI_NAME.

Pokud je v argumentu --wiki pomlčka, pak je část před pomlčkou přiřazena k MW_DB a část za pomlčkou je přiřazena k MW_PREFIX.

Tato tabulka ukazuje, jak to funguje:

Jak je analyzován argument --wiki.
--wiki MW_WIKI_NAME MW_DB MW_PREFIX
enwiki enwiki enwiki empty
enwiki-one enwiki-one enwiki one
enwiki-one-two enwiki-one-two enwiki one-two

Protože pro webové požadavky neexistuje argument --wiki, musí se s nimi zacházet jinak. K výběru wiki se obvykle používá název domény a/nebo cesta URL.

Tipy pro sdílení mezi wikinami

Můžete použít $wgForeignFileRepos ke sdílení nahraných mediálních souborů napříč wikinami. Je to podobné jako Wikimedia Commons pro Wikipedii.

Například:

  • en.example.org - angličtina
  • fr.example.org - francouzština
  • de.example.org - němčina
  • pool.example.org - Sdílené mediální soubory pro všechny wikiny.
Výše uvedený příklad používá název "pool". Nepoužívejte název "commons", protože to může být v rozporu s interwiki odkazem také pojmenovaným commons pro Wikimedia Commons. Vyhněte se také používání názvu "media" (např. media.example.org), protože to může způsobit konflikt mezi interwiki a interním jmenným prostorem Media: pro přístup k místním mediálním souborům, např. [[media:File.png]].

Tabulky sdílené databáze

Zvažte použití sdílené databáze pro uživatelské účty. Pokyny k nastavení sdílených databázových tabulek naleznete v části Příručka:Sdílení databáze .

Interwiki

Můžete vytvořit interwiki odkazy mezi všemi wikinami pomocí Extension:Interwiki . Pokud jsou wikiny jazykovými verzemi, doporučuje se pojmenovat předponu interwiki po přesném kódu jazyka. Například "cs" pro českou wiki ve vaší rodině. Tímto způsobem můžete propojit stránky o stejném tématu pomocí jazykových odkazů.

Přidáním [[de:Hauptseite]] na vaši anglickou "hlavní stránku" vytvoříte na postranním panelu jazyků odkaz "Deutsch". Pro další informace navštivte Help:Interwiki linking

Pokud máte centrální wiki pro soubory, vytvořte předponu i pro tuto. Např. pool až https://pool.example.org/wiki/$1 a zaškrtněte políčko "Přeposlat", aby bylo rozpoznána jako místní wiki ve stejné rodině.

Nahrávání

Ujistěte se, že do složky "images" pool-wiki lze zapisovat.

Je užitečné změnit odkaz "Nahrát soubor" na jazyk-wiki tak, aby odkazoval na stránku pro nahrávání poolwiki. Otevřete "LocalSettings.php" každé jazykové wiki a přidejte:

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

Ve verzi 1.17 budete také muset nastavit $wgUploadMissingFileUrl, abyste byli přesměrováni na pool-wiki na červených odkazech.

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

Pokud chcete povolit nahrávání pouze pro vaši slučující wiki, můžete použít něco takového:

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

Používání sdílených souborů

Chcete-li použít soubory poolwiki v languagewiki, otevřete "LocalSettings.php" pro každou languagewiki a přidejte:

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

Nyní můžete integrovat soubory fondu s (např. [[File:MyLogo.png]]) v languagewikis.

Popis obrázku

V každém languagewiki otevřete (jako správce) zprávu MediaWiki:Sharedupload-desc-here.

Změňte text na něco jako:

Tento soubor je uložen v našem datovém fondu.
Pro informace a popis prosím navštivte [[:pool:File:{{PAGENAME}}|tyto informace]].

(A všimněte si ':' na začátku řádku, které zabrání 'pool' v zařazení do seznamu interwiki v levé části stránky.)

Pokud chcete vydat popis média, uložený také v PoolWiki, přidejte do "LocalSettings.php" jazykových wikin:

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

Rozšíření Wiki Farm

Existuje několik rozšíření MediaWiki, která se pokoušejí zjednodušit hostování několika wikin pomocí pouze jedné kódové základny, avšak pouze jedno je v současné době pozoruhodné:

Související odkazy