Manual:Viki çiftliği
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:
- 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.
- Ensure your future wikis can reach the same web server and MediaWiki install. When using (sub)domains, have your web server accept connections for all virtual hosts (e.g. in Apache or nginx). If you use Quickstart and localhost, this requires no changes. When using subdirectories, you could use rewrite rules, aliases, or symlinks.
- Geçerli vikiyi algılamak için kodu
LocalSettings.phpüstüne ekleyin. Note that MediaWiki automatically parses the--wikiargument to support an optional hyphen, where the first half is assigned toMW_DBand an optional second half toMW_PREFIX. Example for when you use domain names:// Wiki family // https://www.mediawiki.org/wiki/Manual:Wiki_family $wikis = [ 'central.localhost:4000' => 'centralwiki', 'foo.localhost:4000' => 'foowiki', 'bar.localhost:4000' => 'barwiki', ]; $wgLocalDatabases = $wgConf->wikis = array_values( $wikis ); if ( defined( 'MW_DB' ) ) { // --wiki seçeneğinden bakım betiklerine otomatik olarak ayarlayın $wgDBname = MW_DB; } else { // MW_DB ortam değişkeni kullanın veya alan adını eşleyin $wgDBname = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['HTTP_HOST'] ?? '' ] ?? null; if ( !$wgDBname ) { die( 'Unknown wiki.' ); } }
- 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";
- Viki başına geçersiz kılmaları yapılandırın. This should include at least
$wgServerand$wgArticlePath.Bu, ayrı bir dosyadan yapılabilir, örneğin:$wgConf->settings = [ 'wgServer' => [ 'centralwiki' => 'http://central.localhost:4000', 'foowiki' => 'http://foo.localhost:4000', 'barwiki' => 'http://bar.localhost:4000', ], 'wgArticlePath' => [ 'default' => '/index.php/$1', // 'default' => '/wiki/$1', ], 'wgSitename' => [ 'default' => $wgDBname, // 'foowiki' => 'Foo', ], 'wgLogo' => [ // 'foowiki' => '/images/foowiki/Logo.png', ], 'wgLanguageCode' => [ // 'foowiki' => 'pt', ], ]; extract( $wgConf->getAll( $wgDBname ) );
# LocalSettings.php $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php'; # LocalSettings_overrides.php <?php return [ 'wgServer' => .., .., ];
To add a new wiki to the family:
- Create an empty database for the wiki, and then configure the wiki in LocalSettings.php (at least the
$wikismap and a key underwgServerin$wgConf). Then use the web installer to install the database. Settings you specify here will not be saved and you can discard the LocalSettings.php file it generates. Avoid usinginstall.phpfrom the command line to install the database, because that either refuses to start or overwrites your LocalSettings.php file. - Run
php maintenance/run.php update --wiki=mywiki
Ayrı ayar dosyaları
Bu, aynı kaynak kodunu kullanarak tek bir sunucuya birden fazla viki kurmanıza izin verecektir.
- İlk vikiyi web veya veritabanınızı ayarlayan ve LocalSettings.php dosyası oluşturan CLI yükleyici aracılığıyla normal şekilde yükleyin.
- Kurulumdan sonra, oluşturulan
LocalSettings.phpdosyasını,LocalSettings_mywiki.phpgibi viki kimliğini (ör. veritabanı adı) içerecek şekilde yeniden adlandırın. - Oluşturmak istediğiniz her wiki için yukarıdaki birinci ve ikinci adımı tekrarlayın.
- Doğru olanı yükleyecek yeni bir
LocalSettings.phpdosyası oluşturun. As with the above wiki farm example, a--wikiargument containing a hyphen will be split on the hyphen into two values assigned toMW_DBandMW_PREFIX, respectively.Vikileriniz aynı etki alanında ancak farklı yollar altındaysa (ör.<?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 // -------
example.org/wiki1,example.org/wiki2vb.), şö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 { $wikiID = $_SERVER['MW_DB'] ?? $wikis[ explode( '/', $_SERVER['REQUEST_URI'], 3 )[1] ] ?? null; } if ( $wikiID ) { require_once "LocalSettings_$wikiID.php"; } else { die( 'Unknown wiki.' ); }
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.
- Tüm MediaWiki dosyalarınızı ör.
mkdir /home/web/mediawikiiçerecek şekilde bir temel dizin oluşturun. - 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). - 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 - Resimlerimizi ve ayarlarımızı içerecek bir sites dizini oluşturun:
mkdir /home/web/mediawiki/sites - Vikiyi /code dizininden normal şekilde kurun.
- Başarılı kurulumdan sonra,
LocalSettings.phpdosyası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'ınsettings.phpdosyasına bakın. - 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. - Drupal-stil
LocalSettings.phpdosyasını ana dizininize yerleştirin:cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php - Doğru yerleri işaret etmek için her alt sitenin
LocalSettings.phpdosyasını değiştirin:- İlk önce
$IPile ilgili kodu yorumlayın, (1.15.3'te 16-20 satırlar) çünkü bu,index.phptarafından code dizinine ayarlanmıştır. - 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ınDefaultSettings.php(1.15.3'te satır 25) çağrısından sonra bir yere konulması gerekir. - Gerektiğinde daha fazla değişiklik yapın.
- İlk önce
- Apache 2 kurulumunuzu hazırlayın. Örnek site: wiki.example.com
- Gerekirse code dizinine bir bağlantı oluşturun, örn.
ln -s /home/web/mediawiki/code /home/web/wiki.example.com - 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>
- Gerekirse code dizinine bir bağlantı oluşturun, örn.
- 11. Siteleri yerel olarak kuruyorsanız,
hostsdosyanı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 |
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ı.
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:
- Extension:MediaWikiFarm - beta.
- Extension:SkinCustomiser: sidebar yerelleştirme sayıları ve sırasıyla
MediaWiki:Cologneblue.css,MediaWiki:Modern.css,MediaWiki:Monobook.css,MediaWiki:Vector.css,MediaWiki:Mobile.css,MediaWiki:Common.cssdosyalarıyla ilgili Görünümler özelleştirmesi için.
Ayrıca bakınız
- Extension:CentralAuth
- Manual:initialiseSettings.php
- Manual:CommonSettings.php
- Manual:$wgConf and Manual:SiteConfiguration.php
- Manual:Merkez kimliği — the kullanıcı hesaplarının fazladan bir 'merkezi' tanımlayıcıya sahip olabileceği mekanizma.
- MediaWiki-Docker/Configuration recipes/Wiki farm - config recipe for a Docker container of MediaWiki