아래는 하나보다 많은 위키를 호스팅하기 위해 미디어위키를 설정하는 방법에 대한 안내서입니다.
같은 서버에 있는 여러 위키는 위키-가족(wiki-family) 또는 위키 농장(wiki farm)이라고 불립니다. 알려진 위키 농장의 목록은 WikiApiary에서 확인할 수 있습니다.
미디어위키 유지-관리 스크립트 (예를 들어, update.php)는 MW_DB, MW_PREFIX, 및 MW_WIKI_NAME의 상수로 LocalSettings.php 파일에 전달되는 --wiki 인수를 수용합니다. --wiki 인수의 전체 값은 MW_WIKI_NAME의 값입니다. 만약 --wiki 인수에 대시가 있으면, 대시 앞 부분은 MW_DB에 할당되고 대시 뒤 부분은 MW_PREFIX에 할당됩니다.
다음 테이블은 작동 방식을 보여줍니다:
How the --wiki argument is parsed. | |||
--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 |
위의 내용은 유지-관리 스크립트에서 위키 농장을 처리하는 방법을 다루었습니다. 웹 요청에 대해 --wiki 인수가 없으므로, 그것들은 다르게 처리되어야 합니다. 전형적으로, 도메인 이름 및/또는 URL 경로는 위키를 선택하기 위해 사용됩니다.
Methods
Wiki farm
다음 단계는 같은 버전의 미디어위키에서 여러 위키를 실행하기 위한 것입니다:
- 첫 번째 위키를 정상적으로 설치하십시오. 자세한 내용에 대해 설치 안내서를 참조하십시오.
- 웹 서버에게 미디어위키 설치를 모든 위키와 공유하도록 활성화하십시오. 여러 (하위)도메인에 대해, 여러 서버 이름에서 수신 대기를 사용할 수 있습니다. 여러 하위 디렉토리에 대해, 재작성 규칙, 별칭, 또는 심볼릭 링크를 사용할 수 있습니다.
- LocalSettings.php 꼭대기에 현재 위키를 감지하기 위해 코드를 추가하십시오. --wiki에 대한 인수에 하이픈을 포함하고 있으면, 인수는 하이픈으로 분할되고 결과적으로 각각 MW_DB와 MW_PREFIX에 두 값을 할당함에 주목하십시오. 도메인 이름에 의한 위키에 대해:
$wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Automatically set from --wiki option to maintenance scripts $wikiID = MW_DB; } else { // Use MW_DB environment variable or map the domain name $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; if ( !$wikiID ) { die( 'Unknown wiki.' ); } } $wgLocalDatabases = $wgConf->wikis = array_values( $wikis ); $wgDBname = $wikiID; $wgDBuser = 'mediawiki';
- 모든 위키에 대해 달라야 하는 설정을 구성하십시오. 예를 들어:
$wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname"; $wgUploadDirectory = "$IP/images/$wgDBname"; $wgUploadPath = "/w/images/$wgDBname";
- 위키-별 덮어쓰기를 구성하십시오. 이것은 적어도 $wgServer와 $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 return [ 'wgServer' => .., .., ];
새 위키를 만들기 위해, 그것의 데이터베이스를 생성하고 먼저 설정을 추가하시고, 그런-다음 php maintenance/update.php --wiki=mywiki를 실행하십시오.
Separate settings files
이 접근 방식은 완전히 독립적인 위키를 운영하지만, 여전히 같은 웹 서버와 미디어위키 소스 코드를 공유하기 위한 것입니다.
- 데이터베이스를 설정하고 LocalSettings.php 파일을 생성하는 웹 또는 CLI 설치 프로그램을 통해 첫 번째 위키를 정상적으로 설치하십시오.
- 설치 후, 생성된 LocalSettings.php 파일을 LocalSettings_mywiki.php와 같은 위키 ID (예를 들어, 데이터베이스 이름)를 포함하도록 이름을 변경하십시오.
- 만들려는 각 위키에 대해 위의 1단계와 2단계를 반복하십시오.
- 올바른 파일을 로드할 새로운 LocalSettings.php 파일을 만드십시오. 위의 위키 농장 예제와 마찬가지로, 하이픈이 포함된 --wiki 인수는 하이픈에서 각각 MW_DB와 MW_PREFIX에 할당된 두 값으로 분할될 것입니다.
<?php
$wikis = [
'example.org' => 'examplewiki',
'one.example.org' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
// Automatically set from --wiki option to maintenance scripts
$wikiID = MW_DB;
} else {
// Use MW_DB environment variable or map the domain name
$wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
}
if ( $wikiID ) {
require_once "LocalSettings_$wikiID.php";
} else {
die( 'Unknown wiki.' );
}
// Add any settings that should apply to all wikis below this line
// -------
만약 위키가 같은 도메인에 있지만 다른 경로 아래에 있으면 (예를 들어, example.org/wiki1, example.org/wiki2, 등), 다음과 같이 사용할 수 있습니다:
<?php
$wikis = [
'/example' => 'examplewiki',
'/w_example' => 'examplewiki',
'/one' => 'onewiki',
'/w_one' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
// Automatically set from --wiki option to maintenance scripts.
$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-style sites
이 설정은 사용자에게 완전하게 투명하고 이미지 디렉토리의 관점에서 합리적으로 안전하다는 장정을 가집니다.
- 모든 미디어위키 파일을 포함하는 디렉토리를 생성하십시오 (예를 들어 mkdir /home/web/mediawiki).
- 평소처럼 버전-선언 하위 디렉토리에 미디어위키와 추가적인 도구를 설치하십시오 (예를 들어, /home/web/mediawiki/mediawiki-1.10.0).
- 버전-선언 디렉토리를 코드 디렉토리로 심볼릭 링크를 만드십시오 (예를 들어, ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code)
- 이미지와 설정을 저장할 사이트 디렉토리를 만드십시오 (예를 들어 mkdir /home/web/mediawiki/sites)
- 평소처럼 /code 디렉토리에서 위키를 설정하십시오.
- 성공적인 설치 후에, LocalSettings.php 파일을 사이트가 점검될 때 짝이 맞을 수 있는 사이트 디렉토리로 옮기십시오. 예를 들어, http://example.com/mywiki를 얻기 위해, 디렉토리 example.com.mywiki를 생성할 수 있습니다. (예를 들어, mkdir /home/web/mediawiki/sites/example.com.mywiki). 이것에 대한 보다 자세한 정보에 대해 Drupal의 settings.php를 참조하십시오.
- 만약 미디어 파일을 사용하기를 원한다면, 사이트 디렉토리 안에 images 디렉토리를 만드십시오. (예를 들어, mkdir /home/web/mediawiki/sites/example.com.wiki/images). 디렉토리에 쓰기-가능 권한을 부여하십시오.
- 주요 디렉토리에 Drupal-style LocalSettings.php 파일을 넣으십시오: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
- 각 하위 사이트의 LocalSettings.php를 올바른 위치를 가리키도록 수정하십시오:
- 먼저 $IP와 관련된 코드, (1.15.3에서 16-20 줄)를 주석 처리해야 하는데, 왜냐하면 이것은 index.php에 의해 code 디렉토리로 설정되기 때문입니다.
- 다음으로, 이미지 파일에 접근할 수 있도록 다음 두 줄을 삽입하십시오, 예를 들어: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; 및 $wgUploadPath = "/images";. 이것들은 DefaultSettings.php를 호출한 후 어딘가에 넣어야 합니다 (1.15.3에서 25 줄), 그렇지 않으면 변수들이 재설정될 것입니다.
- 필요에 따라 추가 수정을 하십시오.
- 아파치 설치를 준비하십시오. 예제 사이트: wiki.example.com
- 만약 필요하다면, code 디렉토리에 대한 심볼릭 링크를 만듭니다. 예를 들어, ln -s /home/web/mediawiki/code /home/web/wiki.example.com
- 적절한 가상호스트 구성을 만드십시오:
<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 for the site to be accessible Alias /mediawiki/code /home/web/mediawiki/code # Alias for wiki so images work Alias /images /home/web/mediawiki/sites/wiki.example.com/images # If you want to password protect your site # <Directory /home/web/wiki.example.com> # AuthType Basic # AuthName "My protected wiki" # AuthUserFile /etc/apache2/htpasswd/users-mywiki # require valid-user # </Directory> </VirtualHost>
- 만약 사이트를 지역적으로 설정하려면, 사이트 이름을 갖는 hosts 파일을 업데이트하십시오. 이제 사이트가 작동해야 합니다.
실제 적용시에, 설치된 미디어위키로부터 코드의 또 다른 복사본을 만들고 LocalSettings.php와 데이터베이스를 업데이트했습니다. 동반하는 Drupal 코드에서 $_SERVER['HTTP_HOST']는, 명령줄에서 유지-관리 스크립트를 수행할 때, 정의되지 않았으므로, 이 해결책은 일부 수정 없이 유지관리의 사용을 허용하지 않음을 주목하십시오.
Modified Drupal-style method for Ubuntu
위의 방법을 기반으로 하는 우분투/쿠분투의 여러 위키 및 여러 (또는 중첩된) 하위위키에 대한 단순화된 방법은 다음에서 찾을 수 있습니다:
Tips for sharing between wikis
위키에 걸쳐 업로드된 미디어 파일을 공유하기 위해 $wgForeignFileRepos를 사용하십시오. 이것은 위키피디아에 대한 위키미디어 공용과 유사합니다.
예를 들어:
- en.example.org - English
- fr.example.org - français
- de.example.org - Deutsch
- pool.example.org - Shared media files for all wikis.
Shared database tables
사용자 계정에 대해 공유 데이터베이스를 사용하는 것을 고려하십시오. 공유 데이터베이스 테이블 설정에 대한 지침에 대해 Manual:Shared database를 참조하십시오.
Interwiki
모든 위키 사이에 Extension:Interwiki를 사용함으로써 인터위키 링크를 만들 수 있습니다. 만약 위키가 언어 버전이면, 정확한 언어 코드를 따서 인터위키 접두사 이름을 지정하는 것이 좋습니다. 예를 들어, 위키 가족에 있는 독일어 위키에 대해 "de"입니다. 이런 식으로, 같은 주제에 대한 페이지를 언어 링크를 사용하여 연결할 수 있습니다.
영어 "Main Page"에 [[de:Hauptseite]]를 추가하면 언어 사이드바에 "Deutsch" 링크를 생성할 것입니다. 자세한 내용에 대해 Help:Interwiki linking을 참조하십시오.
만약 파일에 대해 중앙 위키를 가지고 있으먼, 이에 대한 접두사도 만드십시오. 예를 들어, https://pool.example.org/wiki/$1에 대한 pool을 만들고 같은 가족에서 지역 위키로 인식하기 위해 "Forward" 확인란을 활성화하십시오.
Upload
pool-위키의 폴더 "images"가 쓰기 가능한지 확인하십시오.
언어-위키의 "Upload file"-링크를 poolwiki의 upload-site를 가리키도록 변경하는 것이 유용합니다. 각 언어-위키의 "LocalSettings.php"를 열고 다음을 추가하십시오:
$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";
1.17에서, 역시 $wgUploadMissingFileUrl을 빨간색 링크에 대한 pool-위키로 리다이렉션되도록 설정해야 합니다.
$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";
Pool 위키에 대해서만 업로드를 허용하기를 원하면, 다음과 같이 사용할 수 있습니다:
if ( $wgDBname === 'pool' ) {
$wgEnableUploads = true;
} else {
$wgEnableUploads = false;
}
Use shared files
언어위키에서 poolwiki의 파일을 사용하기 위해, 각 언어위키에 대해 "LocalSettings.php"를 열고 다음을 추가하십시오:
$wgUseSharedUploads = true;
$wgSharedUploadPath = 'https://pool.example.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;
이제 언어위키에서 pool의 파일 (예: [[File:MyLogo.png]])과 통합할 수 있습니다.
Image description
각 언어위키에서, (관리자로) MediaWiki:Sharedupload-desc-here 메시지를 여십시오.
텍스트를 다음과 같이 변경하십시오:
This file is stored in our data-pool.
For information and description, please visit the [[:pool:File:{{PAGENAME}}|description there]].
(그리고 줄 시작 부분에 있는 ':'에 주목하십시오. 이것은 페이지 왼쪽에서 인터위키 목록에 '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:";
Wiki Farm extensions
단 하나의 코드 기반을 사용함으로써 여러 위키의 호스팅을 단순화하려고 시도하는 여러 미디어위키 확장이 있으며, 어쨌든 현재 주목할만한 것은 하나만 있습니다:
- mw:Extension:MediaWikiFarm - beta.
- mw:Extension:SkinCustomiser: For localisation issues of the sidebar and customising the Skins regarding the files MediaWiki:Cologneblue.css, MediaWiki:Modern.css, MediaWiki:Monobook.css, MediaWiki:Vector.css, MediaWiki:Mobile.css, MediaWiki:Common.css respectively.
See also
- Configuration database
- Extension:CentralAuth
- Manual:InitialiseSettings.php
- Manual:CommonSettings.php
- MediaWiki Farmers user group
- Manual:$wgConf
- Manual:Central ID — the mechanism by which user accounts can have an extra 'central' identifier.