내가 현재 사용하고 있는 cafe24 계정에서 모니위키(moniwiki) 를 설치하는 방법을 설명하고 있다.
cafe24 는 리눅스 기반의 APM 을 제공하고 있다.
일반적인 모니위키의 설치는 무척이나 간단하다. 하지만, 내가 원하는 환경을 만들기 위해서는 몇가지 설정이 필요하다.
여기서는 최대한 설정에 관한 설명을 할 것이다.
현재 모니위키의 최신버전은 1.1.2 이다. 여기서 http://kldp.net/projects/moniwiki/ 에서 다운로드 받을 수 있다. 차후 문서 버전관리를 하기 위해서는 RCS 관련 유틸리티들이 필요하다.
물론 호스팅 서버측에서 제공을 해준다면, 상관이 없겠지만 cafe24 에서는 현재 RCS 관련 유틸리티들을 지원하지 않고 있다.
따라서 rcs57-bin.tgz 파일이 필요하다. rcs57-bin.tgz 에서 다운로드 받을 수 있다.
모니위키 설치 방법은 굳이 설명하지 않겠다. 이제 RCS 유틸리티를 설치해야 한다. rcs57-bin.tgz 파일을 계정 홈디렉토리(~fat81)에 복사한다.
#cd #ls www rcs57-bin.tgz #tar xzf rcs57-bin.tgz
bin 디렉토리가 생기고 그 아래에 실행파일들이 생성되었을 것이다.
moniwiki/config.php 파일에 다음을 추가해준다.
$path= '/home/hosting_users/fat81/bin';
이제 제대로 RCS 가 작동하는지 확인해보자!!
아무 페이지나 수정 저장한다. 그리고 나서, 상위 아이콘 중에서 'i' 를 클릭하면, 버전 히스토리 나온다.
각 버전별로 diff 를 볼 수 있으면, 정상적으로 동작하는 것이다.
여기서 언급하는 설정들은 지극히 필자 주관적인 사항이므로 반드시 따라야 할 의무는 없다. 자기가 좋은 대로 설정하면 되는 것이다.
내가 원하는 설정은 다음과 같다.
위의 요구를 만족하는 설정을 만들기 위해서는 몇가지 파일을 수정해야 한다.
먼저 기본 테마를 blog 로 설정하기 위해 moniwiki/config.php 파일을 다음과 같이 수정한다. 또한 사용자가 다른 테마로 수정하는 것을 방지하기 위해,
$theme='blog'; $theme_css=1;
위와 같이 한다. 설정을 적용하면, 페이지 하단의 메뉴가 모두 붙어서 링크가 걸려있는 것을 볼 수 있다. config.php 에 다음을 추가한다.
$menu_sep='|';
모니위키의 모든 폰트와 폰트 모양을 일치시키기 위해서는 .css 파일이 필요하다. 다음은 moniwiki/css/nlog.css 파일이다.
@import url("user.css"); body { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#90B7DC; color:#000; margin: 0; padding: 0; } a:link { color: #369;} a:visited { color: #369;} /* a:hover {background-color:#999966;color:white} /* */ .wikiTitle { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; font-weight:bold; color:#ffffff; /* */ /* color: #7B7D5A; /* */ text-decoration: none; } tt.wiki {font-family: "굴림"; font-size:9pt; color:block; line-height:150%;} tt.foot { font-family: "굴림"; font-size:9pt; color:block; vertical-align: super; } tt.sister { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; vertical-align: super; text-decoration: none; } pre.wiki { padding-left:6px; padding-top:6px; font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#000000; color:#FFD700; /* gold */ } pre.console { background-color: #000000; color: #E0E0E0; padding: .25em ; border: 2px inset #808080; } pre.quote { padding-left:6px; padding-top:6px; white-space:pre-wrap; white-space: -moz-pre-wrap; font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#ddddc0; } table.wiki { border: 0px outset #ddddb0; } td.wiki { border: 0px inset #E2ECE5; } tr.wiki { background-color: #E9ECEF; } textarea.wiki { width:100%; } th.info { background-color:#E2ECE2; } td.info { background-color:#E2ECE2; } h1,h2,h3,h4,h5 { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; border-bottom:1px solid #999; } tr,td { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } a { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } caption { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } div.diff-added { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#E0FFE0; color:black; } div.diff-removed { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#E9EAB8; color:black; } div.diff-sep { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; background-color:#000000; color:#FFD700; /* gold */ } span.diff-added, ins.diff-added { color:black; background-color: #60FF60; text-decoration: none; } span.diff-removed, del.diff-removed { color:black; background-color: #FF0000; } div.message { margin-top: 6pt; background-color: #E8E8E8; border-style:solid; border-width:1pt; border-color:#990000; color:#440000; padding:0px; width:100%; } .highlight { background-color:#FFFF40; } table.goto { background-color: #002B2C; } span.goto, input.goto { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } table.closure, td.closure{ background-color:#ddddb0; } /* */ .wikiHr { border:0px solid; padding: 0px 0px; /* */ margin-top:0px; height:1px; /* background: #000 url(hr1.gif) no-repeat scroll center; */ } #wikiTrailer,#wikiOrigin { padding-left: 20px; padding-bottom: 5px; } #wikiHeader { /* border-left: 0.8em solid #7B9AC5; /* */ color: #fff; padding: 0.2em 0em 0.2em 0.2em; background-color:#69c; } #wikiHeader a:link {color:#fff;} #wikiHeader a:visited {color:#f2f2f2;} #wikiBody { color: black; background-color: #fff; border: 2px solid #69C; /* border-left: 0.8em solid #E2ECE2; border-right: 0.8em solid #E2ECE2; */ /* border-left: 0.8em dotted; /*solid #6A2525; */ /* border-right: 0.8em solid #6A2525; */ /* text-transform: lowercase; /* */ margin: 0px 10px 0px 10px; padding: 5px 1em 5px 1em; /* margin-left: 20px; */ /* padding-left: 1em; /* */ /* text-indent: 10px; */ /* border: 0px outset #E2ECE5; */ /* font-size:16px; border-collapse:collapse; */ } #wikiBody a:link { color: #39c; } #wikiBody a:visited { color: #369; } #wikiBody a:hover { border-bottom: 1px solid #369; } #wikiContent { margin-left: 20px; } #wikiFooter { padding: 0.5em 2em; /* background-color:yellow; */ } #wikiHint { font-family:Georgia,Verdana,Lucida,sans-serif; font-size:10px; background-color:#E2DAE2; } #wikiSister { /* background-color:lightgreen; /* */ } #wikiPreview { border: 2px solid #a0a0a0; margin: 5px 5px 5px 5px; padding: 5px 1em 5px 1em; } /* #wikiMenu { background-color:yellow; } */ div.indent { padding-left:2em; } div.hint { font-family: "굴림"; font-size:9pt; color:block; background-color: line-height:150%; #369; color:white;} a.purple { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; text-decoration:none;} /* Blog CSS */ a.purple { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; text-decoration:none;} div.blog { width:90%; padding: 0em 1em 0em 1em; } div.blog-user { font-family: "굴림"; font-size:9pt; color:block; line-height:150%;} div.blog-title { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; font-weight:bold; } div.blog-comments { padding: 0.5em 0.5em 0.5em 2em; border-left: 1px dotted #7B9AC5; background-color:#E8F5FA;} div.blog-date { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; font-weight:bold; padding-bottom:5px;} span.blog-user { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } div.blog-action { font-family: "굴림"; font-size:9pt; color:block; line-height:150%;} li.blog-list { list-style-type: none;} /* Calendar */ td.day { background:#90B7DC; text-align: center;} td.today { background:#fff; text-align: center;} /* HierarchicalWiki */ div.wikiGroup { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; } /* enscript syntax */ div.wikiPre i,div.wikiPre b{ font-weight: normal; font-style: normal; } img.imgLeft { margin-right : 15px; margin-bottom : 5px; } img.imgRight { margin-left : 10px; margin-bottom : 5px; } span.externalLink { display: none; } span.lineNumber { color:#ffff00; }
이 파일을 moniwiki/theme/blog/css 아래의 default.css 로 복사한다. 이제 브라우저를 통해 확인해보자! 어떤가 폰트가 바뀌었는가?
blog 테마는 오른쪽에 달력이 있다. 달력 앞 뒤로 이동할 수 있도록 링크가 걸려있는 데, 이 모양이 마음에 들지 않는다.
moniwiki/plugin/Calendar.php 파일의 주석처리한 부분을 수정한다.
function macro_Calendar($formatter,$value="",$option="") { global $DBInfo; $date=$_GET['date']; $prev_tag='<'; // 수정 $next_tag='>'; // 수정 static $day_headings= array('Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday'); $day_heading_length = 3; preg_match("/^(('|\")([^\\2]+)\\2)?,?((\d{4})-?(\d{2}))?,?\s*([a-z, ]+)?$/i",$value,$match);
이제 다시 브라우저로 확인해보자!
이제는 admin, fat81 의 제외한 모든 계정 추가를 금지시켜야 한다. 이 방법은 먼저 admin 의 경우에는 설치시 만들었기 때문에 따로 만들어줄 필요가 없다. '환경설정' 페이지에서 fat81 계정을 생성한다. 이제 config.php 파일에
$security_class="mustlogin"; $no_register=1;
를 추가한다. 이제 절대로 새로운 계정을 추가할 수 없다.
이번에는 개인적인 페이지는 읽기권한을 금지시키고, 그 외의 페이지는 읽기권한만 부여해야 한다.
wiki.php 파일을 아래와 같이 추가한다.
$formatter->pi=$formatter->get_instructions($dum); if ($DBInfo->body_attr) $options['attr']=$DBInfo->body_attr; # 수정 시작 if ($formatter->pi['#private'] and !$DBInfo->security->is_allowed('read_private',$options)) { do_invalid($formatter,$options); return; } # 수정 끝 $formatter->send_header("",$options); $formatter->send_title("","",$options); ... ... ... function get_instructions(&$body) { global $DBInfo; # '#private' inserted by Lbird $pikeys=array('#redirect','#action','#title','#keywords','#noindex', '#filter','#postfilter','#twinpages','#notwins','#nocomment', '#language','#camelcase','#nocamelcase', '#singlebracket','#nosinglebracket','#private'); // 추가 $pi=array();
이제 읽기권한을 금지하고 싶은 페이지의 맨 위에 '#private' 를 추가한다.
그리고 나서, 로그아웃을 하고, 난 뒤에 추가한 페이지를 클릭해본다. 권한이 없다는 에러 페이지가 뜬다면 성공이다.