MediaWiki

오픈소스 비즈니스 컨설팅
(MediaWiki 1.11.2에서 넘어옴)
둘러보기로 가기 검색하러 가기

Mediawiki에 대한 전반적인 사항을 정리한다.
위키피디아에서 사용된 대규모 사용자를 위한 위키 서비스 이다.

CentOS에 MediaWiki 1.23.3 설치

  • 사전 준비 사항
  • 다운로드 사이트에서 mediawiki-1.23.3.tar를 다운로드 받아 압축을 풉니다.
cd /nas/install
wget http://releases.wikimedia.org/mediawiki/1.23/mediawiki-1.23.3.tar.gz

tar xvzf mediawiki-1.23.3.tar.gz
chown -R apache:apache mediawiki-1.23.3
mv mediawiki-1.23.3 wiki
mv wiki /nas/www/ossnode101/public_html
yum install ImageMagick ImageMagick-devel
  • "Fatal exception of type MWException" 오류 발생시
  • vi LocalSettings.php
### require_once( "$IP/extensions/LocalisationUpdate/LocalisationUpdate.php" );


설치 가이드

아래 설치 가이드는 Windows Server 2003을 기준으로 작성한 것 입니다. 설치 환경이 틀릴 경우에는 별도의 주석을 달아 주세요.

설치전 사전 준비 사항

Mediawiki용 DB 설정

  • MySQL에 Mediawiki에서 사용할 Schmea를 등록한다.
  • MySQL Administrator에 root 관리자로 로그인 한다.
  • 좌측 상단 창에서 "Catalogs"를 선택한다.
  • 좌측 하단의 "Schemata" 창에서 우측 마우스를 누른다.
  • "Create New Schema" 메뉴를 선택하여 Schema를 생성한다.
  • Schema 생성화면에서 "Schema name"으로 "mediawikidb"를 입력한다.
DB Schema 등록


  • MySQL에 Mediawiki에서 사용할 사용자를 등록한다.
  • 좌측 상단 창에서 "User Administration"을 선택한다.
  • 좌측 하단의 "Users Accounts" 창에서 우측 마우스를 누른다.
  • "Add new user" 메뉴를 선택하여 사용자를 생성한다.
  • "User Information" 탭에서 "MySQL User"("mediawiki"), "Password", "Confirm Password" 등을 등록한다.
DB 사용자 등록


  • MySQL에 Mediawiki에서 사용할 사용자의 권한을 설정한다.
  • "Schema Privileges" 탭에서 사용자가 사용할 Schema("mediawikidb")를 선택한다.
  • "Available Privileges"의 모든 권한을 "Assigned Privileges"로 이동한다.
  • "Apply changes" 버튼을 눌려 등록된 정보를 저장한다.
권한 부여


  • MySQL Query Browser에 접속한다.
  • 상단의 "Tools" 메뉴에서 "MySQL Query Browser" 메뉴를 선택한다.
Query Browser 접속


  • 사용자의 MySQL 데이터베이스 접속 정보를 추가한다.
  • 우측의 "Schemata" 탭에서 "mysql"을 더블 클릭하여 선택한다.
  • grant all privileges on mediawikidb.* to mediawiki@localhost identified by '암호'; (사용자에게 Schmea에 대한 권한을 추가)
  • flush privileges; (위 명령을 통해 설정한 권한을 데이터베이스에 반영)
  • select host, user, password from user order by user, host; (사용자의 접속 정보 확인)
접속 정보 추가
  • MySQL Query Browser가 아니라 DOS 창에서 접속 정보를 추가하는 방법
mysql -uroot -pxxx mysql
    grant all privileges on mediawikidb.* 
        to mediawiki@localhost identified by '암호';
    flush privileges;
    select host, user, password from user order by user, host;
    exit


Mediawiki 설치

  • %APACHE_HOME%/conf/httpd.conf 파일에 mediawiki 관련 정보를 추가하고 Apache를 재기동 한다.
  • Windows Vista의 경우 관리자로 실행하여 수정한다.
<Directory />
    Options FollowSymLinks
    AllowOverride None
#    Order deny,allow     (이 라인을 주석으로 막는다)
#    Deny from all        (이 라인을 주석으로 막는다)
</Directory>

###-----------------------------------------------
### mediawiki 설정, Document Root가 d:/www 일 경우
Alias   /mediawiki    d:/www/mediawiki
<Directory "/mediawiki">
    Order allow,deny
    Allow from all
</Directory>


  • 다운로드한 파일의 압축을 풀어 "d:/www/mediawiki1112" 로 복사합니다.
다운로드
  • 아이디와 암호를 물을 경우 아이디("Admin")과 암호를 입력한다.
환경 설정 초기 화면
  • Mediawiki의 환경 설정 화면에서 필요한 정보를 입력하여 사용자 환경을 설정 한다.
  • Wiki name : jopenbusiness
  • Contact e-mail : admin@jopenbusiness.com
  • Language : ko - 한국어
  • Copyright/license : No license metadata
  • Shared memory caching : No caching
  • Superuser accoutn : 사용하지 않음
  • Database table prefix : jopen
  • Storage Engine : InnoDB
  • Database character set : Experimental MySQL 4.1/5.0 UTF-8
환경 설정
  • 설정을 완료하면 설정 입력한 값이 %MEDIAWIKI_HOME%/config/LocalSettings.php 파일에 저장된다.
  • Mediawiki 환경 설정을 완료한다.
환경 설정 완료
  • %MEDIAWIKI_HOME%/config/LocalSettings.php 파일을 %MEDIAWIKI_HOME%로 복사하고 %MEDIAWIKI_HOME%/config 디렉토리를 삭제한다.
  • %MEDIAWIKI_HOME%/config/LocalSettings.php 파일에 TimeZone을 설정한다.
$wgLocaltimezone="Asia/Seoul";
$wgLocalTZoffset=+540;

Mediawiki에서 ImageMagick를 사용하도록 설정

#--- Ubuntu에서 설치
apt-get install imagemagick
  • %MEDIAWIKI_HOME%/LocalSettings.php 파일에 다음 사항을 반영한다.
$wgEnableUploads  = true;
$wgUseImageResize = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "d:/OpenBiz/31_application/ImageMagick639/convert"; 

$wgHashedUploadDirectory = true;
  • %MEDIAWIKI_HOME%/images 디렉토리 아래 다음 이름의 디렉토리를 추가한다.
  1. archive
  2. thumb
  3. temp
  4. deleted

CentOS에서 ImageMagick 설정

  • ImageMagick 설치
  • CentOS 5.5에서는 ImageMagick 6.2.8 가 설치됩니다.

yum install ImageMagick ImageMagick-devel

  • vi /etc/php.d/imagick.ini

extension=imagick.so

  • php -m | PHP에 설치된 모듈 목록 보기

Mediawiki에서 hMail Server를 사용하도록 설정

  • %PHP_HOME%/php.ini 파일을 수정한다.
SMTP = mail.jopenbusiness.com
smtp_port = 25
date.timezone = Asia/Seoul
  • %MEDIAWIKI_HOME%/LocalSettings.php 파일을 수정한다.
$wgEmergencyContact = "admin@jopenbusiness.com";
$wgPasswordSender = "admin@jopenbusiness.com";
$wgEmailAuthentication = true;

MediaWiki Extentions 설치

WYSIWYG-CKeditor 설치

  • 전제 사항
    • MediaWiki가 설치된 폴더 : /cloudnas/www/html/mediawiki/
    • 설치 작업용 임시 폴더 : /cloudnas/install/
    • 백업 폴더 : /cloudnas/backup/
    • WYSIWYG-CKeditor 설치
    cd /cloudnas/install
    wget [https://github.com/Mediawiki-wysiwyg/WYSIWYG-CKeditor/archive/CKeditor_v4.zip https://github.com/Mediawiki-wysiwyg/WYSIWYG-CKeditor/archive/CKeditor_v4.zip]
    mv CKeditor_v4 CKeditor_v4.zip
    unzip CKeditor_v4.zip
    chown -R apache:apache WYSIWYG-CKeditor-CKeditor_v4
    
    cd WYSIWYG-CKeditor-CKeditor_v4
    mv * /cloudnas/www/html/mediawiki/extensions
    
    
    • vi /cloudnas/www/html/mediawiki/LocalSettings.php
    require_once( "$IP/extensions/WYSIWYG/WYSIWYG.php" );
    $wgGroupPermissions['registered_users']['wysiwyg']=true;
    $wgGroupPermissions['*']['wysiwyg'] = true;          //Everyone can use (if can edit)...
    $wgDefaultUserOptions['cke_show'] = 'richeditor';    //Enable CKEditor
    $wgDefaultUserOptions['riched_use_toggle'] = false;  //Editor can toggle CKEditor/WikiText
    $wgDefaultUserOptions['riched_start_disabled'] = false; //Important!!! else bug...
    $wgDefaultUserOptions['riched_toggle_remember_state'] = true; //working/bug?
    $wgDefaultUserOptions['riched_use_popup'] = false;   //Deprecated
    
    $wgFCKEditorExcludedNamespaces[] = NS_MEDIAWIKI;
    $wgFCKEditorExcludedNamespaces[] = NS_TEMPLATE;
    
    require_once( "$IP/extensions/WikiEditor/WikiEditor.php" );
    
    $wgDefaultUserOptions['usebetatoolbar'] = 1;
    $wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;
    $wgDefaultUserOptions['wikieditor-preview'] = 0;
    $wgDefaultUserOptions['wikieditor-publish'] = 0;
    $wgLocalisationUpdateDirectory = "$IP/cache";
    
    ### enableSemantics( );
    ### include_once( "$IP/extensions/SemanticForms/SemanticForms.php" );
    
    ### $wgFCKEditorExcludedNamespaces[] = SF_NS_FORM;
    ### $wgFCKEditorExcludedNamespaces[] = SMW_NS_PROPERTY
    
    • 서비스 재기동
    service httpd restart
    
    • 참고 문서

    FCKeditor extension by Mafs

    FCKeditor를 미디어위키에서 사용할 수 있도록 한다. 단 미디어위키의 일부 문법만 지원이 되므로 이를 확인하고 사용하여야 한다.

    설치 시작
    • FCKeditor_2.6.3b.zip의 압축을 풀어 $MEDIAWIKI_HOME 디렉토리 아래 FCKeditor 디렉토리에 복사한다.
    • 첨부된 압축 파일을 풀어 다음 위치에 복사한다.
    • fck_image.html 파일을 $MEDIAWIKI_HOME/FCKeditor/editor/dialog/fck_image.html 로 복사한다.
    • fck_image.js 파일을 $MEDIAWIKI_HOME/FCKeditor/editor/dialog/fck_image/fck_image.js 로 복사한다.
    • FCKeditor.php 파일을 $MEDIAWIKI_HOME/extension/FCKeditor.php 로 복사한다.
    • 첨부된 압축 파일을 풀어 다음과 같이 파일을 수정한다.
    • fckconfig.js 파일의 내용을 $MEDIAWIKI_HOME/FCKeditor/fckconfig.js 파일의 끝에 복사한다.
    • FCKConfig.mwScriptPath 값을 $MEDIAWIKI_HOME/LocalSettings.php 파일에 있는 $wgScriptPath 값을 참고하여 수정한다.
    • LocalSettings.php 파일의 내용을 $MEDIAWIKI_HOME/LocalSettings.php 파일의 끝에 복사한다.
    • $MEDIAWIKI_HOME/LocalSettings.php에서 $wgFCKUseEditor를 true로 설정하여 Mediawiki가 FCKeditor를 디폴트 에디터로 사용하도록 한다.
    • Magic Word : USE_EDITOR

    VisualEditor

    MediaWiki의 편집 화면에서 시각화된 도구를 사용하기 위해서는 VisualEditor Extension을 사용 한다.

    다운로드 사이트로부터 원하는 버전을 다운로드 한다.

    cd  ${HOME_MEDIAWIKI}
    cd  extensions
     
    # wget https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_33-8c9c37e.tar.gz
    tar -xzf VisualEditor-REL1_33-8c9c37e.tar.gz
    
    cd  ..
    vi  LocalSettings.php
        wfLoadExtension( 'VisualEditor' );
        $wgDefaultUserOptions['visualeditor-enable'] = 1;
        $wgHiddenPrefs[] = 'visualeditor-enable';
     
        $wgVirtualRestConfig['modules']['parsoid'] = array(
            'url' => 'http://127.0.0.1:8000',
            'domain' => 'www.jopenbusiness.com',
            'prefix' => 'www.jopenbusiness.com'
        );
    

    VisualEditor 사용을 위해서 Parsoid를 구성 한다.

    #--- Default 서비스 설치 위치 : /opt/parsoid/
    git clone --recursive https://gerrit.wikimedia.org/r/mediawiki/services/parsoid/deploygit clone --recursive https://gerrit.wikimedia.org/r/mediawiki/services/parsoid/deploy
    git clone https://gerrit.wikimedia.org/r/mediawiki/services/parsoid
    cd parsoid
    npm install
    
    cp  config.example.yaml  config.yaml
    cp  localsettings.example.js  localsettings.js
    
    vi  config.yaml
        mwApis
        - # This is the only required parameter
          uri: 'http://www.jopenbusiness.com/mediawiki/api.php'
          domain: 'www.jopenbusiness.com'
    
    vi  localsettings.js
        exports.setup = function(parsoidConfig) {
            parsoidConfig.setMwApi({
                uri: 'http://www.jopenbusiness.com/mediawiki/api.php',
                prefix : 'www.jopenbusiness.com',
                domain : 'www.jopenbusiness.com',
            });
        };
    
    node bin/server.js
    # systemctl restart parsoid
    

    Upgrade 가이드

    MediaWiki 1.3.4로 업그레이드

    • MySQL에서 mediawiki Database를 백업 한다.
    • 백업 : mysqldump --user=아이디 --password=암호 DB명 > DatabaseBackup.sql
    • 복구 : mysql --user=아이디 --password=암호 -D DB명 < DatabaseBackup.sql
    • mediawiki 파일 및 설정을 백업 한다.
    • $MEDIAWIKI_HOME/images 폴더
    • $MEDIAWIKI_HOME/LocalSettings.php 파일
    • $MEDIAWIKI_HOME/AdminSettings.php 파일
    • 압축을 풀어 기존에 MediaWiki가 설치되어 있는 폴더로 복사 한다.
    • $MEDIAWIKI_HOME/AdminSettings.php 파일을 설정 한다.
    • $MEDIAWIKI_HOME/AdminSettings.php 파일이 없으면 *$MEDIAWIKI_HOME/AdminSettings.sample 파일을 복사하여 AdminSettings.php 파일을 작성 한다.
    $wgDBadminuser      = 'DB 사용자 아이디';
    $wgDBadminpassword  = 'DB 사용자 암호';
    
    • Dos 창에서 아래와 같이 upgrade 명령을 실행 한다.
    cd $MEDIAWIKI_HOME/maintenance
    php update.php --aconf ../AdminSettings.php
    
    • Upgrade가 끝난 후 $MEDIAWIKI_HOME/AdminSettings.php 파일이 필요 없으면 삭제 한다.
    • 이전 MediaWiki에서 Customize한 사항을 반영 한다.
    • 참고 문헌

    Upgrade from 1.20.5 to 1.23.3

    • 전제 사항
    • MediaWiki가 설치된 폴더 : /cloudnas/www/html/mediawiki/
    • 설치 작업용 임시 폴더 : /cloudnas/install/
    • 백업 폴더 : /cloudnas/backup/
    • MediaWiki 1.23.3 설치 요구 사항
    • MediaWiki 버전 확인
    • Mediawiki 백업
    service httpd stop
    cd /cloudnas/www/html
    tar cvf /cloudnas/backup/mediawiki_1205.tar mediawiki
    /usr/bin/mysqldump -umediawiki -pdemo1234 mediawikidb > /cloudnas/backup/mediawiki_1205.sql
    service httpd start
    
    • Mediawiki Upgrade
    service httpd stop
    cd /cloudnas/install
    wget http://releases.wikimedia.org/mediawiki/1.23/mediawiki-1.23.3.tar.gz
    tar xvfz mediawiki-1.23.3.tar.gz
    mv mediawiki-1.23.3 mediawiki
    chown -R apache:apache mediawiki
    tar cvf mediawiki.tar mediawiki
    
    cd /cloudnas/www/html
    tar xvf /cloudnas/install/mediawiki.tar
    cd mediawiki/maintenance
    php update.php
    service httpd start
    
    • MediaWiki 버전 확인
    • 참고 문헌

    사용자 가이드

    좌측 메뉴 수정

    미디어위키(mediawiki)를 사용하면서 제일 먼저 하게 되는 것이 좌측 메뉴에 자신만의 메뉴를 추가하는 것 이다. 여기에 미디어위키의 화면과 메뉴를 수정하는 방법을 정리한다. (Sidebar 등 영어의 해석이 잘 안되어 이해하기 쉽게 그냥 내가 아는 용어로 정리를 하고 있다. 정확한 용어를 아는 사람이 있다면 이를 수정해 줄 것을 바란다.)

    • 미디어위키의 화면 구성
    미디어위키는 다양한 스킨을 사용하여 화면의 형태를 바꿀 수 있다. 디폴트로 제공되는 스킨은 MonoBook으로 "오픈소스 비즈니스 컨설팅" 위키 페이지도 디폴트 스킨인 MonoBook을 사용하여 구성되어 있다. 스킨마다 화면의 구성이 틀리므로 여기서는 모노북(MonoBook)을 기준으로 설명을 한다.
    화면은 최상단에 "상단 메뉴"가 있고 좌측에 "좌측 메뉴"가 있고 우측에 페이지의 내용이 표시되는 "본문"이 있다.
    • 상단 메뉴
    로그인을 하면 "내 사용자 문서", "내 사용자 토론", "사용자 환경 설정", "주시문서 목록", "내 기여 목록", "로그아웃" 메뉴가 표시된다.
    • 좌측 메뉴
    기본적으로 박스 형태로 표시되는 좌측 메뉴와 찾기, 도구모음이 표시된다.
    • 본문
    본문은 문서의 내용이 표시되는 부분인데 각 문서마다 상단에 "문서 메뉴"가 있다. "문서 메뉴"에는 "문서", "토론", "편집", "역사", "보호", "삭제", "이동", "주시" 메뉴가 있다.


    • 미디어위키 스킨(Skin)
    • 미디어위키에서 사용자로 로그인한 후 상단의 "사용자 환경 설정" 메뉴를 선택하면 아래와 같이 스킨을 선택할 수 있는 화면이 표시된다. 다시 말하면 개인별로 다양한 스킨을 선택하여 사용할 수 있다.
    Mediawiki set skin.png
    • 스킨은 기본적으로 $MEDIAWIKI_HOME//skins 디렉토리에 MonoBook.php 파일과 같은 형태로 저장이 되므로 해당 파일을 수정하여 화면에 표시되는 형태를 변경할 수 있다.


    • 미디어위키 사이드바 (MonoBook 스킨을 기준으로 설명)
    미디어위키의 사이드바는 4개의 요소로 구성되어 있다.
    1. 미디어위키 로고
    2. 좌측 메뉴 (Heading과 Link로 구성)
    3. 찾기
    4. 도구모음


    • 미디어위키 로고
    $MEDIAWIKI_HOME/LocalSettings.php 파일에서 wgLogo 변수에 로고에 사용할 URL을 등록한다.
    $wgLogo="logo.jpg";
    
    • 좌측 메뉴 (Heading과 Link로 구성), 도움말
    자신의 미디어위키에서 http://www.jopenbusiness.com/mediawiki/index.php/MediaWiki:Sidebar 페이지를 수정하여 메뉴를 구성할 수 있다.
    여기서 mediawiki는 저의 미디어위키에서 준 이름이므로 실제 사용할 URL은 mediawiki 대신 자신이 설정한 정보를 입력하세요.
    • 좌측 메뉴 Customize 사례
    *navigation
    **mainpage|accueil
    **Special:Recentchanges|Recent changes
    *new heading
    **portal-url|Forums
    **http://www.mediawiki.org |MediaWiki home
    
    좌측 메뉴 사례
    • *Heading : 좌측 메뉴의 섹션을 구분하는 문자열(Heading)
    • **target|text : target. text를 눌렀을 때 이동할 페이지 URL, text. 화면에 표시할 문자열
    • 찾기
    • 도구모음을 수정하기 위해서는 MediaWiki:Common.js (전체 사용자에게 적용)를 수정하거나 Special:Mypage/monobook.js (특정 사용자에게 적요, pnuskgh로 로그인한 사용자의 경우 Mypage대신 pnuskgh를 사용)를 아래와 같이 수정한다.
    function ModifySidebar(action, section, name, link) {
        try {
            switch (section) {
              case "languages":
                var target = "p-lang";
                break;
              case "toolbox":
                var target = "p-tb";
                break;
              case "navigation":
                var target = "p-navigation";
                break;
              default:
                var target = "p-" + section;
                break;
            }
     
            if (action == "add") {
                var node = document.getElementById(target)
                                   .getElementsByTagName('div')[0]
                                   .getElementsByTagName('ul')[0];
     
                var aNode = document.createElement('a');
                var liNode = document.createElement('li');
     
                aNode.appendChild(document.createTextNode(name));
                aNode.setAttribute('href', link);
                liNode.appendChild(aNode);
                liNode.className='plainlinks';
                node.appendChild(liNode);
            }
     
            if (action == "remove") {
                var list = document.getElementById(target)
                                   .getElementsByTagName('div')[0]
                                   .getElementsByTagName('ul')[0];
     
                var listelements = list.getElementsByTagName('li');
     
                for (var i = 0; i < listelements.length; i++) {
                    if (listelements[i].getElementsByTagName('a')[0].innerHTML == name ||
                        listelements[i].getElementsByTagName('a')[0].href == link) {
     
                        list.removeChild(listelements[i]);
                    }
                }
            }
     
        } catch(e) {
          // lets just ignore what's happened
          return;
        }
    }
     
    function CustomizeModificationsOfSidebar() {
        //adds Special:CategoryTree to toolbox
        ModifySidebar("add", "toolbox", "CategoryTree", 
                      "http://en.wikipedia.org/wiki/Special:CategoryTree");
        //removes Special:Upload from toolbox
        ModifySidebar("remove", "toolbox", "Upload file", 
                      "http://en.wikipedia.org/wiki/Special:Upload");
    }
     
    addOnloadHook(CustomizeModificationsOfSidebar);
    
    • 도구모음에 링크의 추가 또는 삭제
    CustomizeModificationsOfSidebar() 함수에서 ModifySidebar("action", "section", "name", "link"); 함수를 사용하여 링크를 추가하거나 삭제한다.
    parameter value
    action add. 링크를 추가함, remove. 링크를 삭제함
    section 링크를 추가/삭제할 섹션 명 (navigation, toolbox, languages, 기타 사용자가 추가한 섹션명), 도구모음에 링크를 추가/삭제하기 위해서는 toolbox를 사용하세요.
    name 링크 이름
    link 링크 이름을 선택하였을 때 표시할 화면의 URL

    모노북(MonoBook) 구조

    $MEDIAWIKI_HOME/skins/MonoBook.php 가 기본 Skin 페이지 이다.

    • CSS
    1. /mediawiki/skins/common/shared.css
    2. /mediawiki/skins/monobook/main.css
    3. /mediawiki/skins/common/commonPrint.css
    4. MediaWiki:Common.css
    5. MediaWiki:Monobook.css
    • JavaScript
    1. /mediawiki/skins/common/wikibits.js
    2. MediaWiki:Common.js MediaWiki:Common.js, MediaWiki:Monobook.js MediaWiki:Monobook.js, [Special:Mypage/monobook.js Special:Mypage/monobook.js]]
    3. /mediawiki/skins/common/ajax.js
    4. /mediawiki/skins/common/ajaxwatch.js
    • 페이지
    <div id="p-cactions" class="portlet">
        <div class="pBody">
            여기에 페이지 상단의 메뉴가 표시됨
        </div>
    </div>
    
    <div id="content">
        <div id="bodyContent">
            <div id="contentSub"></div>
            <div id="jump-to-nav"></div>
            여기에 페이지 본문이 표시됨
            <div class="printfooter"></div>
            <div class="visualClear"></div>
        </div>
    </div>
    
    • 최상단의 개인 메뉴
    <div class="portlet" id="p-personal">
        <div class="pBody">
            여기에 최상단의 개인 메뉴가 표시됨
        </div>
    </div>
    
    • 좌측 사이드 바
    • 로고
    <div class="portlet" id="p-logo">
        여기에 로고가 표시됨
    </div>
    
    • 좌측 메뉴
    MediaWiki:Sidebar를 파싱하여 표시됨
    <div class='portlet' id='p-여기에 이름 지정'>
        <div class='pBody'>
            여기에 메뉴가 표시됨
        </div>
    </div>
    
    • 찾기
    <div id="p-search" class="portlet">
        <div id="searchBody" class="pBody">
            여기에 검색창이 표시됨
        </div>
    </div>
    
    • 도구모음
    <div class="portlet" id="p-tb">
        <div class="pBody">
            여기에 도구모음이 표시됨
        </div>
    </div>
    
    • 최하단 footer
    <div id="footer">
        여기에 최하단의 footer가 표시됨
    </div>
    

    기타 정보

    • 시작 화면을 Mediawiki로 변경한다.
    %APACHE_HOME%/htdocs/index.html 파일을 다음과 같이 수정한다.
    <html>
    <head>
    <meta http-equiv=content-type content="text/html; charset=UTF-8">
    <meta http-equiv="refresh" content="1;url=http://www.jopenbusiness.com/mediawiki/">
    <title>오픈소스 비즈니스 컨설팅</title>
    </head>
    
    <body>
    </body>
    </html>
    
    • Mediawiki의 사이트명을 한글로 변경한다.
    편집기의 기능을 사용하여 %MEDIAWIKI_HOME%/config/LocalSettings.php 파일을 UTF-8 형태로 변경하여 저장한다.
    LocalSettings.php에서 다음과 같이 변경하고자 하는 사이트 명으로 변경한다.
    $wgSitename = "오픈소스 비즈니스 컨설팅";
    
    • Upload 파일의 사이즈 제한을 변경한다.
    %PHP_HOME/php.ini 파일의 다음 정보를 수정한다.
    post_max_size = 50M
    upload_max_filesize = 50M
    
    • Mediawiki에서 첨부할 수 있는 파일의 확장자를 추가한다.
    Default로 허용되는 첨부파일의 확장자 : png, gif, jpg, and jpeg
    %MEDIAWIKI_HOME%/config/LocalSettings.php 파일에 다음을 추가한다.
    단 require_once( "$IP/includes/DefaultSettings.php" ); 라인 아래에 추가해야 한다.
    $wgUploadFile = true;
    $wgFileExtensions[] = "zip";
    $wgFileExtensions[] = "pdf";
    $wgFileExtensions[] = "doc";
    $wgFileExtensions[] = "ppt";
    $wgFileExtensions[] = "xls";
    $wgFileExtensions[] = "docx";
    $wgFileExtensions[] = "pptx";
    $wgFileExtensions[] = "xlsx";
    
    • Mediawiki Monobook에 적용할 CSS를 수정한다.
    http://www.jopenbusiness.com/mediawiki/index.php/MediaWiki:Monobook.css
    
    • 외부 링크를 새창에서 띄운다.
    %MEDIAWIKI_HOME%/includes/Linker.php에서 다음을 수정한다.
    function getExternalLinkAttributes( $link, $text, $class= ) {
        ......
        $r .= " target=\"_blank\"";  //---   이 라인을 추가한다.
        return $r;
    }
    
    • 미디어위키 화면 구성 및 호출 URL
    미디어위키는 기본적으로 스킨을 가지고 있는데 디폴트로 사용되는 스킨은 /skins/MonoBook.php 입니다.
    그리고 MonoBook.php를 우선 급히 살펴보니 프레임으로 나뉘어져 있지 않고 하나의 페이지로 되어 있습니다
    문서(TestDoc)의 URL을 저의 위키 URL을 기준으로 사용 예를 들어 보겠습니다.
      조회시 : http://www.jopenbusiness.com/mediawiki/index.php/TestDoc 또는
                http://www.jopenbusiness.com/mediawiki/index.php?title=TestDoc
      --> TextDoc 라는 페이지가 기존에 있을 경우에는 해당 페이지가 표시됨
      --> TextDoc 라는 페이지가 기존에 없을 경우에는 페이지가 없다고 알리고 페이지 작성 링크가 표시됨
    
      수정시 : http://www.jopenbusiness.com/mediawiki/index.php?title=TestDoc&action=edit
      --> TextDoc 라는 페이지가 기존에 있을 경우에는 해당 페이지 수정 화면이 표시됨
      --> TextDoc 라는 페이지가 기존에 없을 경우에는 해당 페이지가 없다고 알리고 페이지 작성 화면이 표시됨
    

    관리자 가이드

    한글 설정

    vi LocalSettings.php

    $wgLanguageCode = "ko";
    $wgShellLocale = "ko_KR.utf8";
    

    Email 설정

    권한 설정

    Mediawiki에서 권한을 설정하기 위해서는 다음과 같은 절차에 따라 권한을 지정한다.

    1. 사용자 지정 권한 그룹을 생성하고 권한을 할당한다.
    2. 관리자로 로그인하여 사용자에게 권한 그룹을 할당한다.


    • 권한을 설정하기 위해 $MEDIAWIKI_HOME/includes/DefaultSettings.php에서 권한 그룹을 생성한다.
    • "$wgGroupPermissions['newGroup']['right'] = boolean;"의 형식으로 선언하여 권한 그룹(newGroup)을 생성하여 권한(right)을 지정한다.
    • '*' 그룹은 모든 사용자에 적용되며 'user' 그룹은 로그인한 사용자에 적용되는 예약된 그룹명이다.
    • 참조 : http://www.mediawiki.org/wiki/Help:User_rights/ko
    $wgGroupPermissions['newGroup']['bot']    = true;
    $wgGroupPermissions['newGroup']['block']  = true;
    $wgGroupPermissions['newGroup']['delete'] = true;
    
    newGroup 라는 권한 그룹을 만들어 권한(bot, block, delete)을 지정한다.
    • 미디어위키에 관리자로 로그인하여 사용자에게 권한 그룹을 할당한다.
    1. 관리자 아이디로 로그인한다.
    2. 도구모음에서 "특수 문서 목록" (Special:SpecialPages)을 선택한다.
    3. 맨 하단에 관리자에게만 표시되는 메뉴인 "사용자 권한 관리"를 선택한다.
    4. "사용자 이름"에 권한을 변경할 사용자의 아이디를 입력하고 "사용자 그룹 편집" 버튼을 클릭한다.
    5. "현재 권한"과 "가능한 권한"이 표시되는 곳에 새로 추가한 권한 그룹(newGroup)이 표시되는 것을 확인할 수 있다.
    6. 이동을 원하는 권한을 선택한 후 "사용자 권한 저장" 버튼을 클릭하면 선택된 권한이 이동되어 저장된다.

    이상과 같이 권한 그룹을 DefaultSettings.php에 추가하고 관리자로 로그인하여 사용자에게 권한 그룹을 할당함으로써 권한을 설정할 수 있다.

    설정 정보

    /home/www/mediawiki/LocalSettings.php에 다음을 설정할 수 있다.

    • 외부 이미지를 위키에 표시 한다.
    $wgAllowExternalImages = true;
    
    • 완전한 HTML 사용 허용
    $wgRawHtml = true;
    

    버전 확인

    Mediawiki 구조

    • 서비스 호출 parameter
    • title : MediaWiki_1.11.2 (페이지명)
    • action : view, edit, ...


    • require_once( './includes/WebStart.php' ); # Initialise common code
    • require_once( './StartProfiler.php' ); # Start profiler
    • require_once( dirname(__FILE__).'/includes/ProfilerStub.php' );
    • require_once( './includes/Defines.php' ); # Load up some global defines.
    • require_once( './LocalSettings.php' );
    • require_once( "$IP/includes/DefaultSettings.php" );
    • require_once("extensions/FCKeditor.php");
    • require_once( './includes/OutputHandler.php' );
    • require_once( './includes/Setup.php' );
    • require_once( "includes/Wiki.php" ); # Initialize MediaWiki base class
    • require_once( $IP . '/includes/AjaxDispatcher.php' );
    • $wgArticle = $mediaWiki->initialize ( $wgTitle, $wgOut, $wgUser, $wgRequest );
    • $this->initializeSpecialCases( $title, $output, $request )
    • $title->getInterwiki() : $output->redirect( $url );
    • $targetUrl = $title->getFullURL() : $output->redirect( $targetUrl, '301');
    • SpecialPage::executePath( $title );
    • $this->initializeArticle( $title, $request )
    • $article = $this->articleFromTitle( $title );
    • $article->loadPageData($article->pageDataFromTitle($dbr, $title));
    • $target = $article->followRedirect();
    • $rarticle->loadPageData($rarticle->pageDataFromTitle($dbr,$target));
    • $this->performAction( $output, $article, $title, $user, $request );
    • $output->redirect( $article );

    Database 구조

    • 사용자 관련
    • user
    • watchlist
    • external_user
    • user_properties
    • user_groups
    • user_former_groups
    • user_newtalk
    • ipblocks
    • 페이지
    • page : 페이지
    • archive : 삭제된 페이지
    • revision : "역사"
    • text : "역사"에 history로 기록된 페이지
    • recentchanges : "최근 수정 문서"
    • page_restrictions
    • page_props
    • protected_titles
    • category
    • categorylinks
    • searchindex
    • redirect
    • templatelinks
    • iwlinks
    • langlinks
    • externallinks
    • pagelinks
    • 파일
    • filearchive
    • image
    • imagelinks
    • oldimage
    • uploadstash
    • 통계 및 로그
    • site_stats
    • logging
    • log_search
    • hitcounter
    • 리소스로더
    • msg_resource
    • msg_resource_links
    • module_deps
    • 태그
    • change_tag
    • tag_summary
    • valid_tag
    • 캐시 관련
    • objectcache
    • config
    • i10n_cache
    • transcache
    • querycache
    • querycahce_info
    • querycachetwo
    • 파서 캐시
    • testitem
    • testrun
    • 기타
    • trackbacks
    • job
    • updatelog
    • interwiki

    Database 데이터 정리

    • 삭제된 문서 삭제
    select count(*) from jopenarchive;
    truncate jopenarchive;
    select count(*) from jopenarchive;
    
    • "최근 수정 문서" 목록 삭제
    select count(*) from jopenrecentchanges;
    delete from jopenrecentchanges;
    commit;
    select count(*) from jopenrecentchanges;
    
    • "역사" 목록 삭제
    • 맨 마지막 rev_id를 제외한 레코드 삭제
    select count(*) from jopenrevision;
    
    create table zztemp
    select rev_page, max(rev_id) as rev_id from jopenrevision group by rev_page;
    
    select max(page_id) from jopenpage;
    
    delete from jopenrevision
    where 0 <= rev_page
      and rev_page < 1000
      and rev_id not in (select rev_id from zztemp);
    commit;
    
    delete from jopenrevision
    where 4000 <= rev_page
      and rev_page < 5000
      and rev_id not in (select rev_id from zztemp);
    commit;
    
    select count(*) from jopenrevision;
    drop table zztemp;
    
    • "역사"와 관련된 문서 삭제
    • revision 테이블에 없는 rev_text_id에 해당하는 문서 삭제
    select count(*) from jopentext;
    
    delete from jopentext
    where 0 <= old_id 
      and old_id < 100000
      and old_id not in (select rev_text_id from jopenrevision);
    commit;
      
    delete from jopentext
    where 700000 <= old_id 
      and old_id < 800000
      and old_id not in (select rev_text_id from jopenrevision);
    commit;
    
    select count(*) from jopenrevision;
    


    • 사용자 페이지 삭제
    delete
      from jopenpage 
     where page_namespace = 2;

    Google AdSense 코드 추가

    vi includes/OutputPage.php

       $pieces[] = "<script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({\ngoogle_ad_client: \"ca-pub-1498049923305655\",\nenable_page_level_ads: true\n});\n</script>\n";
    
       $pieces[] = Html::closeElement( 'head' );          #--- 이 라인 앞에 추가할 것
    

    현안 문제점

    • Mediawiki에서 한글 파일 업로드시 오류가 발생하고 있다.
    검색을 통해 고수의 의견을 청취하려고 했는데 제대로 된 해결책이 없었다.
    URL에서 %nn 형태가 아니라 바로 한글을 사용하는 것도 검토해야 겠다.
    문자셋과 인코딩에 Java로 프로그램 할 때 필요한 encoding 문제를 해결하는 것을 정리해 두었는데 여기에 PHP도 추가로 정리를 해야 겠다.
    • $MEDIAWIKI_HOME/include/SpecialUpload.php
    434 line : 실제 파일 업로드 처리
    $status = $this->mLocalFile->upload( $this->mTempPath, $this->mComment, 
              $pageText, File::DELETE_SOURCE, $this->mFileProps );
    328 line : mLocalFile이 선언된 위치
    $this->mLocalFile = wfLocalFile( $nt );
    

    참고 문헌