Manual:Viki çiftliği

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 .

Aşağıda, MediaWiki'yi birden fazla viki barındıracak şekilde nasıl kuracağınıza ilişkin talimatlar bulunmaktadır.

Yöntemler

Temel ilkeler

Bir viki ailesinin en yaygın yapılandırması, MediaWiki'nin tek bir sürümünü çalıştırır. Bu senaryoda aşağıdaki genel adımlar gereklidir:

  1. Normal bir MediaWiki sitesi kurun ve ondan bir veritabanı şablonu oluşturun. Bu ya tamamen boş olabilir (yani herhangi bir tabloda satır yok) ya da ailenin herhangi bir yeni üyesinde istediğiniz başlangıç ​​sayfaları, kullanıcılar, vikiarası bağlantıları vb. olabilir. Ayrıntılar için Manual:Kurulum kılavuzu sayfasına bakın.
  2. Web sunucunuzu, trafiği birden çok yerden tek bir MediaWiki kurulumuna yönlendirecek şekilde ayarlayın. Bu, birden çok etki alanı, alt etki alanı veya alt dizin için olabilir ve sembolik bağlantılar, takma adlar, URL yeniden yazma veya diğer mekanizmalarla yapılabilir. 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. Geçerli vikiyi algılamak için kodu LocalSettings.php üstüne ekleyin. 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. Alan adına göre vikiler için:
    $wikis = [
        'example.org' => 'examplewiki',
        'one.example.org' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // --wiki seçeneğinden bakım betiklerine otomatik olarak ayarlayın
        $wikiID = MW_DB;
    } else {
        // MW_DB ortam değişkeni kullanın veya alan adını eşleyin
        $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. Tüm vikiler için farklı olması gereken ayarları yapılandırın. Örneğin:
    $wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname";
    $wgUploadDirectory = "$IP/images/$wgDBname";
    $wgUploadPath = "/w/images/$wgDBname";
    
  5. Viki başına geçersiz kılmaları yapılandırın. Bu, en az $1 ve $2 içermelidir. 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  ) );
    
    Bu, ayrı bir dosyadan yapılabilir, örneğin:
    # LocalSettings.php
    $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php';
    
    # LocalSettings_overrides.php
    <?php
    return [
        'wgServer' => ..,
        ..,
    ];
    

Yeni bir viki oluşturmak için, veritabanını oluşturun ve önce ayarlarını ekleyin ve ardından php maintenance/update.php --wiki=mywiki çalıştırın.

Ayrı ayar dosyaları

Bu, aynı kaynak kodunu kullanarak tek bir sunucuya birden fazla viki kurmanıza izin verecektir.

  1. İlk vikiyi web veya veritabanınızı ayarlayan ve LocalSettings.php dosyası oluşturan CLI yükleyici aracılığıyla normal şekilde yükleyin.
  2. Kurulumdan sonra, oluşturulan LocalSettings.php dosyasını, LocalSettings_mywiki.php gibi viki kimliğini (ör. veritabanı adı) içerecek şekilde yeniden adlandırın.
  3. Oluşturmak istediğiniz her wiki için yukarıdaki birinci ve ikinci adımı tekrarlayın.
  4. Doğru olanı yükleyecek yeni bir LocalSettings.php dosyası oluşturun. 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 seçeneğinden bakım betiklerine otomatik olarak ayarlayın
        $wikiID = MW_DB;
    } else {
        // MW_DB ortam değişkeni kullanın veya alan adını eşleyin
        $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
    }
    
    if ( $wikiID ) {
        require_once "LocalSettings_$wikiID.php";
    } else {
        die( 'Unknown wiki.' );
    }
    
    // Bu satırın altındaki tüm vikilere uygulanması gereken ayarları ekleyin
    // -------
    
    Vikileriniz aynı etki alanında ancak farklı yollar altındaysa (ör. example.org/wiki1, example.org/wiki2 vb.), şöyle bir şey kullanabilirsiniz:
    <?php
    $wikis = [
        '/example' => 'examplewiki',
        '/w_example' => 'examplewiki',
        '/one' => 'onewiki',
        '/w_one' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // --wiki seçeneğinden bakım betiğine otomatik olarak ayarlayın
        $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.' );
    }
    
Kısa URL kullanıyorsanız, hem $wgArticlePath hem de $wgScriptPath eklemeniz gerekir.

Drupal-stil siteleri

Bu kurulum, kullanıcılara tamamen şeffaf olma ve images dizini açısından makul ölçüde güvenli olma avantajına sahiptir.

  1. Tüm MediaWiki dosyalarınızı ör. mkdir /home/web/mediawiki içerecek şekilde bir temel dizin oluşturun.
  2. MediaWiki'yi ve ek araçları her zamanki gibi sürüm bildiren bir alt dizine yükleyin (örn., /home/web/mediawiki/mediawiki-1.10.0).
  3. Sürüm bildiren dizini bir kod dizinine bağlayın. örn., ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  4. Resimlerimizi ve ayarlarımızı içerecek bir sites dizini oluşturun: mkdir /home/web/mediawiki/sites
  5. Vikiyi /code dizininden normal şekilde kurun.
  6. Başarılı kurulumdan sonra, LocalSettings.php dosyasını site kontrol edildiğinde eşleşecek bir siteler dizinine taşıyın. Örneğin, http://example.com/mywiki sitesini yakalamak için example.com.mywiki dizini oluşturulur. örn., mkdir /home/web/mediawiki/sites/example.com.mywiki. Bununla ilgili daha fazla bilgi için Drupal'ın settings.php dosyasına bakın.
  7. Medya dosyalarını kullanmayı düşünüyorsanız, site dizininizde bir images dizini oluşturun. örn., mkdir /home/web/mediawiki/sites/example.com.wiki/images. Gerektiğinde yazılabilir hâle getirin.
  8. Drupal-stil LocalSettings.php dosyasını ana dizininize yerleştirin: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. Doğru yerleri işaret etmek için her alt sitenin LocalSettings.php dosyasını değiştirin:
    1. İlk önce $IP ile ilgili kodu yorumlayın, (1.15.3'te 16-20 satırlar) çünkü bu, index.php tarafından code dizinine ayarlanmıştır.
    2. Ardından, resim dosyalarının erişilebilir olduğundan emin olmak için şu iki satırı ekleyin, örn.: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; ve $wgUploadPath = "/images";. Değişkenler aksi takdirde sıfırlanacağından, bunların DefaultSettings.php (1.15.3'te satır 25) çağrısından sonra bir yere konulması gerekir.
    3. Gerektiğinde daha fazla değişiklik yapın.
  10. Apache 2 kurulumunuzu hazırlayın. Örnek site: wiki.example.com
    1. Gerekirse code dizinine bir bağlantı oluşturun, örn. ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. Uygun bir VHost yapılandırması oluşturun:
      <VirtualHost *:80>
          ServerAdmin me@example.com
          DocumentRoot /home/web/wiki.example.com
          ServerName wiki.example.com
          CustomLog /var/log/apache2/wiki.mysite.log common
          # Sitenin erişilebilir olması için takma ad
            Alias /mediawiki/code /home/web/mediawiki/code
          # Resimlerin çalışması için viki takma adı
            Alias /images /home/web/mediawiki/sites/wiki.example.com/images
          # Sitenizi parola ile korumak istiyorsanız
          #  <Directory /home/web/wiki.example.com>
          #    AuthType Basic
          #    AuthName "Koruma altındaki vikim"
          #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
          #   require valid-user
          #  </Directory>
      </VirtualHost>
      
11. Siteleri yerel olarak kuruyorsanız, hosts dosyanızı site adlarıyla güncelleyin. Site şimdi çalışmalıdır.

Benim durumumda, LocalSettings.php ve veritabanlarımı yüklemek ve güncellemek için kodun başka bir kopyasını çıkardım. Yardımcı Drupal kodundaki $_SERVER['HTTP_HOST'] ögesinin, komut satırından bakım betikleri çalıştırırken tanımsız olduğunu unutmayın, bu nedenle bu çözüm, bazı değişiklikler yapılmadan bakım betiklerinin kullanılmasına izin vermez.

Ubuntu için değiştirilmiş Drupal-stil yöntemi

Ubuntu/Kubuntu'da birden çok viki ve birden çok (veya iç içe geçmiş) alt viki için yukarıdaki yöntemi temel alan basitleştirilmiş bir yöntem şu adreste bulunabilir:

How wiki farms are handled in maintenance scripts

MediaWiki bakım betikleri (örn. update.php), LocalSettings.php dosyanıza MW_DB, MW_PREFIX ve MW_WIKI_NAME sabitleri olarak geçirilen --wiki bağımsız değişkeni kabul eder. --wiki bağımsız değişkeninin tüm değeri MW_WIKI_NAME değeridir.

--wiki bağımsız değişkeninde bir tire varsa, tireden önceki kısım MW_DB ile ve tireden sonraki kısım MW_PREFIX olarak atanır.

Bu tablo bunun nasıl çalıştığını gösterir:

--wiki bağımsız değişkeni nasıl ayrıştırılır.
--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. Tipik olarak, bir viki seçmek için alan adı ve/veya URL yolu kullanılır.

Ortak kaynakları paylaşan birden fazla viki

Farklı dillerde bazı vikilere sahip olmak, aynı medya dosyalarını başka bir tek vikide paylaşmak istiyorsunuz.

Örneğin:

  • en.example.org - İngilizce
  • fr.example.org - Fransızca
  • de.example.org - Almanca
  • pool.example.org - Tüm vikiler için paylaşılan medya dosyaları.
Yukarıdaki örnek "pool" adını kullanır. "commons" adını kullanmaktan kaçının, çünkü vikiarası bağlantı için Wikimedia Commons için commons olarak da adlandırılan ile çakışabilir. Ayrıca, vikiarası bağlantı ile yerel medya dosyalarına erişim için dahili ad alanı Media: arasında bir çakışmaya neden olabileceğinden, "media" adını (örneğin media.example.org) kullanmaktan kaçının, ör. [[media:File.png]].

Paylaşılan veritabanı tabloları

Kullanıcı hesapları için paylaşılan bir veritabanı kullanmayı düşünün. Paylaşılan veritabanı tablolarının ayarlanmasıyla ilgili talimatlar için Manual:Shared database sayfasına bakın.

Vikiarası

Extension:Interwiki kullanarak tüm vikiler arasında vikiarası bağlantıları oluşturabilirsiniz. Vikiler dil sürümleriyse, vikiarası önekini tam dil kodundan sonra adlandırmanız önerilir. Örneğin, ailenizdeki Almanca viki için "de". Bu şekilde, aynı konuyla ilgili sayfaları dil bağlantılarını kullanarak bağlayabilirsiniz.

İngilizce "Main Page" sayfanıza [[de:Hauptseite]] eklemek, diller kenar çubuğunda bir "Deutsch" bağlantısı oluşturacaktır. Daha fazla bilgi için Help:Interwiki linking sayfasına ziyaret edin

Dosyalar için merkezi bir vikiniz varsa, bunun için de bir önek oluşturun. Örn. aynı ailede yerel bir wiki olarak tanımak için pool ile https://pool.example.org/wiki/$1 ve "İleri" onay kutusunu etkinleştirin.

Yükleme

Pool-viki'nin "images" klasörünün yazılabilir olduğundan emin olun.

Dil vikilerinin "Dosya yükle" bağlantısını, poolwiki'nin yükleme sitesine işaret edecek şekilde değiştirmek yararlıdır. Her dil vikisinin "LocalSettings.php" dosyasını açın ve şunu ekleyin:

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

1.17'de ayrıca $wgUploadMissingFileUrl ögesini kırmızı bağlantılarda pool-viki'ye yönlendirilecek şekilde ayarlamanız gerekir.

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

Yalnızca havuz vikiniz için yüklemelere izin vermek istiyorsanız, şöyle bir şey kullanabilirsiniz:

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

Paylaşılan dosyaları kullanın

Poolwiki'nin dosyalarını dil vikilerinde kullanmak için, her dil viki için "LocalSettings.php" dosyasını açın ve şunu ekleyin:

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

Artık deponuzun dosyalarını (örneğin, [[File:MyLogo.png]]) ile dil vikilerinde entegre edebilirsiniz.

Resim açıklaması

Her dil vikisinde (hizmetli olarak) MediaWiki:Sharedupload-desc-here mesajını açın.

Metni şöyle bir şeyle değiştirin:

Bu dosya veri depomuzda saklanır.
Bilgi ve açıklama için lütfen [[:pool:File:{{PAGENAME}}|buradaki açıklama]] sayfasını ziyaret edin.

(Ve satırın başındaki ':' işaretine dikkat edin, bu 'pool' sitesinin sayfanın solundaki vikiarası listesine eklenmesini engeller.)

PoolWiki'de de saklanan medya açıklamasının çıkışını almak istiyorsanız, dil vikilerinin "LocalSettings.php" dosyasına ekleyin:

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

Viki Çiftliği Uzantıları

Yalnızca bir kod tabanı kullanarak birkaç vikinin barındırılmasını basitleştirmeye çalışan birkaç MediaWiki uzantısı vardır, ancak şu anda yalnızca bir tanesi dikkate değerdir:

Ayrıca bakınız