Private MediaWiki에서 VisualEditor 사용하기

주어진 요구조건은 아래와 같다
  • MediaWiki 페이지를 VisualEditor를 사용해서 WYSWYG 상태로 편집하고 싶다.
  • ID/Password로 편집권한을 제한한다.
  • ID/Password를 사용해 로그인한 사용자에게만 모든 페이지가 보이고
  • 로그인하지 않은 사용자는 모두 로그인 페이지로 Redirect 한다.
  • MediaWiki는 AWS EC2 인스턴스에서 동작한다.
설정에 있어 까다로운 부분

사실 MediaWiki 설정은 너무 간단해서 기록으로도 남길 필요가 없다. 그러나 문제는 VisualEditor를 동작시키는 주요 컴포넌트 가운데 하나인 restbase 패키지 때문에 쉽지 않다.  MediaWiki는 공개를 기본으로 삼고있고 각 콤포넌트도 공개된 정책을 따른다는 가정하에 우선 설계되기 때문에 사용자가 로그인 했다는 상태를 restbase가 알지 못하는 상태가 생겨서 권한에 따라 페이지를 보여줄지 말지를 결정하는게 문제가 된다. 

 

AWS EC2에도 까로로운 부분이 있다

AWS EC2 인스턴스는 인터넷으로 연결되는 외부 IP와 인스턴스 내부 IP 네트워크가 서로 다르다.

 

Wiki에서 ID/Password 접근제한을 걸어버리면 restbase 데몬이 요청하는 페이지를 처리할 수 없게된다. Cookie 전달 방법도 시도해봤으나 소용없다. NetworkAuth1https://www.mediawiki.org/wiki/Extension:NetworkAuth 확장팩을 써보았으나 이것도 신뢰하기 힘들다. 결국 만만한 REMOTE_ADDR을 참조하는 방법으로 마무리 했다. 


##########################################################################################
# 시작:VisualEditor
wfLoadExtension( 'VisualEditor' );

// 모두가 VE를 사용하도록 설정
$wgDefaultUserOptions['visualeditor-enable'] = 1;

// 사용자 설정에서 VE를 '사용불가'로 설정하지 못하게 함
$wgHiddenPrefs[] = 'visualeditor-enable';

// 링크와 표만들기 기능도 넣어줌. 사용자가 환경설정에서 변경가능.
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;

// 위키 텍스트 소스모드를 VisualEditor 내부에서 진행
// 이 옵션을 true로 설정하면 Source/Visual 두 경우에서  WikiEditor를 쓰지 못하게 된다
$wgVisualEditorEnableWikitext = false;
$wgHiddenPrefs[] = 'visualeditor-newwikitext';
$wgDefaultUserOptions['visualeditor-newwikitext'] = 0;
$wgDefaultUserOptions['visualeditor-enable-experimental'] = 0; // 실험적인 기능 사용: 코드 에디팅

// 편집 탭을 하나만 사용하여, 기존 VisualEditor 편집 탭으로 앞뒤로 전환.
$wgVisualEditorUseSingleEditTab = false;
$wgDefaultUserOptions['visualeditor-editor'] = "visualeditor";

//  edit source 위치
$VisualEditorTabPosition = "after";

// 사파리에서 로딩이 안되는 경우가 있는데 해결하기 위해 켜둡니다.
$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;

// 기본적으로 "Main", "User", "File", "Category" 네임스페이스에서 VE 사용하도록 설정되어 있고, 추가설정 가능
$wgVisualEditorAvailableNamespaces = [
  "File" => true
];

$wgVisualEditorParsoidURL = 'http://localhost:8142'; # trailing slash(/)를 붙이지 말아야 함
$wgVisualEditorParsoidForwardCookies = true;
$wgSessionsInObjectCache = true;
//$wgVisualEditorParsoidPrefix = 'localhost';
//$wgVisualEditorRestbaseURL = "http://andrwj.com/wiki.localhost/localhost/v1/page/html/";
//$wgVisualEditorFullRestbaseURL = "http://andrwj.com/wiki.localhost/localhost/";
$wgVirtualRestConfig['modules']['parsoid'] = array(
        'url' => 'http://localhost:8142',
        'domain' => 'wiki.andrwj.net');
$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;
$wgVirtualRestConfig['modules']['restbase'] = array(
  'url' => 'http://localhost:7231',
  'domain' => 'wiki.andrwj.net',
  'forwardCookies' => true,
  'parsoidCompat' => false );

    #for VisualEditor/parsoid/restbase
    $wgGroupPermissions['*']['read'] = true;
    $wgGroupPermissions['*']['edit'] = true;
    $wgGroupPermissions['*']['createpage'] = false;
    $wgGroupPermissions['*']['createaccount'] = false;
    $wgGroupPermissions['sysop']['*'] = true;

    #require_once "$IP/extensions/NetworkAuth/NetworkAuth.php";
    $wgNetworkAuthUsers[] = [
        'iprange' => [ '127.0.0.1',  '172.31.24.226' ],
        'user'    => 'A.J'
    ];
    if (    !isset($_SERVER['REMOTE_ADDR']) OR
        ($_SERVER['REMOTE_ADDR'] == '172.31.24.226') OR
        ($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
    ) {
        $wgGroupPermissions['*']['read'] = true;
        $wgGroupPermissions['*']['edit'] = true;
    }

# 끝:VisualEditor
##########################################################################################

물론 Parsoid, Restbase 설정이 위의 LocalSettings.php 설정과 맞아야 한다.

 

Closing

난 사실 Table 편집할 때 외에는 VisualEditor를 사용하지 않으려한다. 섹션 만 수정하고 싶은데 페이지 전체를 로딩하기 때문이다.  혼자 사용하는 위키에서는 별 문제 안되겠지만 다수가 편집하는 상황이라면 VisualEditor는 문제의 근원이 될듯. 또한 아무리 ‘쉽다’ 해도 위키문법을 배우려는 사람이 적고 설령 배운다해도 하기싫어서 대충대충 문서를 만들어 두기 때문에 문서로써 가치를 쌓아가기 힘들다.  남들이 뭐라고해도 나는 기록을 남기는게 중요하다 믿는다. 그렇기 때문에 좀 더 나은 방법을 찾고 더 나은 포맷과 더 나은 내용을 채우기 위해 고심한다.

다만 다음에 다른 회사에서 일하게 된다면, 난 절대 위키를 입밖에도 꺼내지도 않을거다.

 

References   [ + ]

1. https://www.mediawiki.org/wiki/Extension:NetworkAuth