Manual:विकि परिवार

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

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 .

नीचे मीडियाविकि की मदद से एक से ज़्यादा विकियाँ होस्ट करने की विधि दी गई है।

तरीके

विकि फ़ार्म

ये चरण, मीडियाविकि के एक ही संस्करण पर चल रहे कई विकियों के लिए हैं:

  1. पहला विकि साधारण तरीके से स्थापित करें। विस्तार के लिए Manual:Installation guide देखें।
  2. अपनी मीडियाविकि स्थापना को सभी विकियों के साथ बाँटने के लिए अपना वेब सर्वर सक्षम करें। कई (सब)डोमेन्स के लिए आप कई सर्वर के नामों पर listen का इस्तेमाल कर सकते हैं। कई सबडिरेक्ट्रियों के लिए आप नियमों, उपनामों या चिह्न-कड़ियों को फिर से लिख सकते हैं। For multiple (sub)domains, have your web server accept connections from all the relevant domains. For multiple subdirectories, you could use rewrite rules, aliases, or symlinks.
  3. वर्तमान विकि का पता लगाने के लिए कोड को LocalSettings.php के ऊपर जोड़ें। Note that if the argument to --wiki contains a hyphen, the argument will be split on the hyphen and the resulting two values assigned to MW_DB and MW_PREFIX, respectively. डोमेन के नाम के अनुसार विकियों के लिए:
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // अनुरक्षण स्क्रिप्ट्स के लिए --wiki विकल्प से अपने आप सेट किया जाता है
        $wikiID = MW_DB;
    } else {
        // MW_DB पर्यावरण वेरिएबल का इस्तेमाल करता है या डोमेन के नाम का मानचित्रण करता है
        $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. उन सेटिंग्स को कॉन्फ़िगर करें जो सभी विकियों के लिए अलग होंगे। जैसे:
    $wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname";
    $wgUploadDirectory = "$IP/images/$wgDBname";
    $wgUploadPath = "/w/images/$wgDBname";
    
  5. हर विकि के अनुसार ओवर्राइड्स कॉन्फ़िगर करें। इसमें कम-से-कम एक $1 और $2 होना चाहिए। 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  ) );
    
    इसे एक दूसरे फ़ाइल से किया जा सकता है, जैसे:
    # LocalSettings.php
    $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php';
    
    # LocalSettings_overrides.php
    <?php
    return [
        'wgServer' => ..,
        ..,
    ];
    

एक नया विकि बनाने के लिए इसका डेटाबेस बनाएँ और पहले इसकी सेटिंग्स जोड़ें, फिर php maintenance/update.php --wiki=mywiki चलाएँ।

अलग सेटिंग्स फ़ाइलें

यह विधि बिलकुल ही स्वतंत्र विकियों के लिए है, जो एक ही वेब सर्वर और मीडियाविकि स्रोत कोड का इस्तेमाल करते हैं।

  1. पहला विकि साधारण तरीके से स्थापित करें, वेब या फिर CLI इंस्टॉलर की मदद से, जो आपका डेटाबेस सेट अप करके एक LocalSettings.php फ़ाइल बनाता है।
  2. स्थापना के बाद बनाए गए LocalSettings.php फ़ाइल का नाम बदलकर विकि का ID (जैसे डेटाबेस का नाम) जोड़ें, LocalSettings_mywiki.php की तरह।
  3. हर विकि के लिए पहले और दूसरे चरण को दोहराएँ।
  4. एक नया LocalSettings.php फ़ाइल बनाएँ जो सही फ़ाइल को लोड करेगा। As with the above wiki farm example, a --wiki argument containing a hyphen will be split on the hyphen into two values assigned to MW_DB and MW_PREFIX, respectively.
    <?php
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // अनुरक्षण स्क्रिप्ट्स के लिए --wiki विकल्प से अपने आप सेट किया जाता है
        $wikiID = MW_DB;
    } else {
        // MW_DB पर्यावरण वेरिएबल का इस्तेमाल करता है या डोमेन के नाम का मानचित्रण करता है
        $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
    }
    
    if ( $wikiID ) {
        require_once "LocalSettings_$wikiID.php";
    } else {
        die( 'Unknown wiki.' );
    }
    
    // इस पंक्ति के नीचे वो सारी सेटिंग्स जोड़ें जो सभी विकियों पर लागू होनी चाहिए
    // -------
    
    अगर आपके विकियाँ एक ही डोमेन पर हैं मगर अलग-अलग पथों पर (जैसे example.org/wiki1, example.org/wiki2, आदि), आप कुछ ऐसा इंतज़ाम कर सकते हैं:
    <?php
    $wikis = [
        '/example' => 'examplewiki',
        '/w_example' => 'examplewiki',
        '/one' => 'onewiki',
        '/w_one' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // अनुरक्षण स्क्रिप्ट्स के लिए --wiki विकल्प से अपने आप सेट किया जाता है
        $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.' );
    }
    
अगर आप छोटे URL का इस्तेमाल करते हैं, आपको अपने $wgArticlePath और $wgScriptPath, दोनों जोड़ने होंगे।

Drupal जैसे साइट्स

इस सेटअप का फ़ायदा यह है कि यह सदस्यों से पूरी तरह से पारदर्शी है, और साथ में चित्र के डिरेक्ट्री को सुरक्षित भी रखता है।

  1. अपने सभी मीडियाविकि फ़ाइलों को रखने के लिए एक जड़ डिरेक्ट्री बनाएँ, जैसे mkdir /home/web/mediawiki
  2. एक संस्करण-घोषक सबडिरेक्ट्री (जैसे /home/web/mediawiki/mediawiki-1.10.0) में मीडियाविकि और अतिरिक्त उपकरण स्थापित करें।
  3. संस्करण-घोषक डिरेक्ट्री को एक कोड डिरेक्ट्री से जोड़ें। जैसे ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  4. अपने चित्रों और सेटिंग्स के लिए एक sites डिरेक्ट्री बनाएँ: mkdir /home/web/mediawiki/sites
  5. /code डिरेक्ट्री से साधारण तरीके से विकि को स्थापित करें
  6. स्थापित कर लेने के बाद LocalSettings.php को एक sites डिरेक्ट्री में लेकर जाएँ जो साइट को चेक करने पर मेल खाएगा। उदाहरणस्वरूप, http://example.com/mywiki को कैप्चर करने के लिए डिरेक्ट्री का नाम example.com.mywiki रखना पड़ेगा। जैसे mkdir /home/web/mediawiki/sites/example.com.mywiki। इस बारे में अधिक जानकारी के लिए Drupal का settings.php फ़ाइल देखें।
  7. अगर आप मीडिया फ़ाइलों का इस्तेमाल करना चाहते हैं, अपने साइट के डिरेक्ट्री में एक images डिरेक्ट्री बनाएँ। जैसे mkdir /home/web/mediawiki/sites/example.com.wiki/images। इसे आवश्यकतानुसार लेखनीय बनाएँ।
  8. Drupal जैसा LocalSettings.php फ़ाइल अपने मुख्य डिरेक्ट्री में जोड़ें: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. हर सबसाइटों का LocalSettings.php बदलकर सही स्थानों की ओर इशारा करें:
    1. पहले $IP से संबंधित कोड को टिप्पणी में बदलें (1.15.3 में पंक्ति 16 से 20) क्योंकि इसे index.php द्वारा code पर सेट किया जाता है।
    2. फिर इन दोनों पंक्तियों को बदलें और सुनिश्चित करें कि फ़ाइलों तक पहुँचा जा सकता है, जैसे $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; और $wgUploadPath = "/images";। इन्हें DefaultSettings.php के कॉल के बाद कहीं जोड़ना होगा (1.15.3 में पंक्ति 25 पर), वरना वेरिएबलों को रीसेट कर दिया जाएगा।
    3. आवश्यकतानुसार अधिक बदलाव करें।
  10. अपनी Apache 2 स्थापना को तैयार करें। उदाहरण साइट: wiki.example.com
    1. code डिरेक्ट्री की एक कड़ी बनाएँ, अगर ज़रूरत पड़े। जैसे ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. उचित VHost कॉन्फ़िगरेशन बनाएँ:
      <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 /mediawiki/code /home/web/mediawiki/code
          # विकि के लिए उपनाम ताकि चित्र काम करे
            Alias /images /home/web/mediawiki/sites/wiki.example.com/images
          # अगर आप अपने साइट को पासवर्ड से सुरक्षित करना चाहते हैं
          #  <Directory /home/web/wiki.example.com>
          #    AuthType Basic
          #    AuthName "Mera surakshit wiki"
          #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
          #   require valid-user
          #  </Directory>
      </VirtualHost>
      
11. अगर आप साइटों को लोकल रूप से सेटअप कर रहे हैं, अपने hosts फ़ाइल को साइटों के नामों के साथ अपडेट करें। साइट अब काम करने लगेगा।

मेरे मामले में, मैंने उस कोड की एक प्रतिलिपि बना ली थी जिससे स्थापित करना है, और मेरे LocalSettings.php और डेटाबेसों को अपडेट कर लिया था। ध्यान रखें कि साथी Drupal कोड में $_SERVER['HTTP_HOST'], कमांड पंक्ति से अनुरक्षण स्क्रिप्ट्स चलाते समय अपरिभाषित होता है, तो इस समाधान से बिना किसी बदलाव किए अनुरक्षण स्क्रिप्ट्स को चलाना संभव नहीं हो जाता है।

Ubuntu के लिए परिवर्तित Drupal जैसा तरीका

Ubuntu/Kubuntu पर कई विकियों और कई (या नेस्टेड) उपविकियों के लिए एक सरलीकृत तरीका जो ऊपर की विधि पर आधारित है, यहाँ पर पाया जा सकता है:

How wiki farms are handled in maintenance scripts

मीडियाविकि के अनुरक्षण स्क्रिप्ट्स (जैसे update.php) एक --wiki तर्क स्वीकार करते हैं जो आपके LocalSettings.php फ़ाइल में स्थिर वैल्यू MW_DB, MW_PREFIX और MW_WIKI_NAME के रूप में दिए जाते हैं। --wiki तर्क का पूरा वैल्यू, MW_WIKI_NAME का वैल्यू है।

अगर --wiki तर्क में कोई डैश है, डैश से पहले का हिस्सा MW_DB को दिया जाता है और बाद का हिस्सा MW_PREFIX को।

इस टेबल में दिखाया गया है कि यह काम कैसे करता है:

--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

Since there is no --wiki argument for web requests, they must be handled differently. आम तौर पर डोमेन के नाम और/या URL के पथ की मदद से विकि को चुना जाता है।

विकियों के बीच बाँटने में टिप्पणियाँ

आप विकियों के बीच अपलोड की गई मीडिया को बाँटने के लिए $wgForeignFileRepos का इस्तेमाल कर सकते हैं। यह विकिपीडिया के लिए विकिमीडिया कॉमन्स सेवा की तरह है।

उदाहरणस्वरूप:

  • en.example.org - अंग्रेज़ी
  • fr.example.org - फ़्रेंच
  • de.example.org - जर्मन
  • pool.example.org - सभी विकियों के लिए साँझित मीडिया फ़ाइलें।
ऊपर के उदाहरण में "pool" नाम का इस्तेमाल किया गया है। "commons" नाम का इस्तेमाल न करें, क्योंकि इससे विकिमीडिया कॉमन्स की commons नामक इंटरविकि कड़ी से संघर्ष पैदा हो सकती है। और "media" नाम का भी इस्तेमाल न करें (जैसे media.example.org) क्योंकि इससे आपकी इंटरविकि कड़ी और लोकल मीडिया फ़ाइलों के आंतरिक नामस्थान Media: के बीच संघर्ष हो सकती है, जैसे [[media:File.png]]।

साँझित डेटाबेस टेबल्स

सदस्य खातों के लिए एक साँझित डेटाबेस का इस्तेमाल करें। साँझित डेटाबेस टेबल्स को सेटअप करने के अनुदेशों के लिए Manual:Shared database देखें।

इंटरविकि

आप Extension:Interwiki की मदद से सभी विकियों के बीच इंटरविकि कड़ियाँ बना सकते हैं। अगर आपके विकियाँ भाषाओं के संस्करण हैं, इंटरविकि उपसर्ग का नाम विशिष्ट भाषा कोड पर रखें। जैसे, आपके परिवार के जर्मन विकि के लिए "de"। इस तरह से आप भाषा कड़ियों की मदद से समान विषय पर पृष्ठों को जोड़ सकते हैं।

आपके हिन्दी "मुखपृष्ठ" पर [[de:Hauptseite]] जोड़ देने पर भाषा साइडबार में एक "Deutsch" नामक कड़ी बना दी जाएगी। अधिक जानकारी के लिए Help:Interwiki linking देखें

अगर आपके पास फ़ाइलों के लिए एक केंद्रीय विकि है, उसके लिए भी एक उपसर्ग बनाएँ। जैसे pool → https://pool.example.org/wiki/$1, और "फ़ॉरवर्ड" चेकबॉक्स को सक्षम करें ताकि इसे उसी परिवार में एक लोकल विकि माना जाए।

अपलोड

सुनिश्चित करें कि pool-wiki का "images" फ़ोल्डर लेखनीय है।

आप भाषा-विकियों की "फ़ाइल अपलोड करें" वाली कड़ियों के लक्ष्यों को poolwiki के अपलोड-साइट में बदल सकते हैं। हर भाषा-विकि का "LocalSettings.php" खोलें और जोड़ें:

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

1.17 में आपको लाल कड़ियों को pool-wiki पर अनुप्रेषित करने के लिए $wgUploadMissingFileUrl सेट करना होगा।

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

अगर आप सिर्फ अपने पूल विकि लिए अपलोड्स सक्षम करना चाहते हैं, आप सेटिंग कुछ ऐसा कर सकते हैं:

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

साँझित फ़ाइलों का इस्तेमाल करें

भाषा-विकियों में poolwiki की फ़ाइलों का इस्तेमाल करने के लिए हर भाषा-विकि पर "LocalSettings.php" खोलें और जोड़ें:

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

अब आप पूल की फ़ाइलों को भाषा-विकियों में [[File:MyLogo.png]] के साथ एकीकृत कर सकते हैं।

चित्र विवरण

हर भाषा-विकि पर (प्रबंधक के रूप में) MediaWiki:Sharedupload-desc-here संदेश खोलें।

टेक्स्ट को कुछ ऐसा बना दें:

यह फ़ाइल हमारे डेटा-पूल में रखी जाती है।
जानकारी और विवरण के लिए कृपया [[:pool:File:{{PAGENAME}}|वहाँ पर विवरण]] देखें।

(पंक्ति की शुरुआत में ':' पर गौर करें, जो 'pool' को पृष्ठ के बाएँ तरफ की इंटरविकि सूची में जुड़ने से रोकता है।)

अगर आप PoolWiki पर रखी मीडिया-विवरण को आउटपुट करना चाहते हैं, भाषा-विकियों के "LocalSettings.php" पर यह जोड़ें:

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

विकि फ़ार्म के लिए एक्सटेंशन्स

कई मीडियाविकि एक्सटेंशन्स हैं जो एक कोड-आधार से कई विकियों को होस्ट करना आसान बनाते हैं, मगर सिर्फ एक ही थोड़ा-बहुत प्रसिद्ध है:

ये भी देखें