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.
- 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.
- 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 toMW_DB
andMW_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';
- 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. Bu, en az $1 ve $2 içermelidir. This should include at least
$wgServer
and$wgArticlePath
.Bu, ayrı bir dosyadan yapılabilir, örneğin:$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' => .., .., ];
To add a new wiki to the family:
- Create its database and add its settings first , with
--wiki=mywiki
if you runinstall.php
from the command line. - Run
php maintenance/update.php --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.php
dosyasını,LocalSettings_mywiki.php
gibi 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.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 toMW_DB
andMW_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/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.' ); }
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/mediawiki
iç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.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'ınsettings.php
dosyası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.php
dosyası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.php
dosyasını değiştirin:- İ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. - 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,
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 |
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.css
dosyaları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
- Manual:Merkez kimliği — the kullanıcı hesaplarının fazladan bir 'merkezi' tanımlayıcıya sahip olabileceği mekanizma.