ikiwiki_kr ========== ## 개요 이 문서는 (아마도) ikiwiki에 대한 거의 유일한 한글 정보를 기록하기 위해 작성되었다. 즉, 혹시나 나처럼 기존 [[tech:위키]]나 [[tech:블로그]]나 [[tech:cms]]에 불만족을 느끼고 대안을 찾다가 흘러흘러 ikiwiki를 알게 되고, 사용해보고 싶은 사람을 위해 경험을 정리한다. ## 장단점 ### 장점 - plain text 기반이다. 즉 이후 어떠한 시스템으로 migration하는 것이 매우 쉽다. - [[git]] 등 외부 [[tech:rcs]] 기반이다. 즉 future-proof한 컨텐츠 관리 방식이며, 별다른 어플이나 웹 인터페이스가 필요하지 않다. - 이 특징 덕분에, (git 기준) 로컬에서 작업 - commit - push - 퍼블리시 라는 워크플로우가 가능하다. 기존의 여러 위키 엔진은 철저히 웹 기반의 관리를 기준으로 하므로, '일단 편집하던 내용을 잠깐 놔두고 나중에 다시 완성시키는' draft라는 개념이 부족했다. - 플러그인을 통해 다양한 확장자와 포멧을 지원한다. 역시나 future-proof하다. ### 단점 - 컴파일 시간이 오래 걸린다. 대부분의 글들이 '끔찍한' 컴파일 시간에 대해 언급하고 있다. ## 설치법 기본적인 (perl) cgi를 지원하는 서버에서 어렵지 않게 설치 가능하다. Shared hosting 환경에서도 가능한지는 테스트해보지 않았다. 요새는 무료 cloud server를 많이 제공하므로, 그냥 서버 세팅해서 써도 무방할 듯. 아래 내용은 [[tech:debian]] 기준으로 설명. ### Apache2 ikiwiki는 cgi 모듈을 사용한다. 다만, 기본으로 활성화된 mpm 모듈을 사용할 경우 cgid로 대체되므로, 다음과 같이 모듈을 비활성화한다. ``` sudo a2dismod mpm_event sudo a2enmod mpm_prefork sudo a2enmod cgi ``` ### ikiwiki ikiwiki는 Debian / Ubuntu 패키지 형태로 되어 있으므로, apt 명령어를 통해 설치할 수 있다. 설치 후에는, 기본적인 setup script를 사용한 후 설정을 바꾸는 방식을 추천. ``` ikiwiki --setup /etc/ikiwiki/auto.setup ``` ## 설정 ## 문법 ### meta 페이지에 메타데이터를 삽입하기 위한 문법이며, `[[sw:meta_field_value_param_n_value_n]]` 형태로 사용햔다. 하나의 블록 안에 하나의 field만 입력 가능하며, 여러 field를 지정하고 싶다면 여러 블록을 사용해야 한다. 지원하는 field는 다음과 같다. - title: 문서 제일 위에 나타나는 title을 변경한다. 기본적으로는 page name과 동일하다. *sortas* param은 페이지 목록을 정렬할 때 사용할 key를 지정한다. - license: 페이지 라이센스를 지정한다. value로 위키 마크업을 사용 가능하다. - author: 페이지의 저자를 지정한다. *sortas* param은 페이지 목록을 정렬할 때 사용할 key를 지정한다. - authorurl: 페이지 저자의 url을 지정한다. - description: 페이지의 설명 / 요약을 지정한다. 이 값은 html head 영역에 기재되며, [[#map]] 등을 사용할 경우에 나타난다. - keywords: 페이지를 요약하는 키워드를 지정한다. 이 값은 html head 영역에 기재되며, 글자 / 숫자 / 공백 / 쉼표만을 허용한다. 예상과 달리 이 정보는 검색 엔진에서 사용되지 않는다. - permalink: ikiwiki에서 자동으로 생성하는 주소와 다른 링크를 사용하고 싶을 때 지정한다. - date: 페이지를 생성한 날짜를 지정한다. 이 값은 html meta 헤더에 기재되며, 내부 데이터베이스를 수정한다. - stylesheet: 페이지 별로 다른 [[tech:css]] 파일을 사용하고자 할 때 지정한다. 단 wikilink 형식으로 지정하므로 외부 스타일시트를 사용할 수는 없다. 또한 [[#htmlscrubber]] 플러그인을 사용할 경우 이 내용은 무시된다. - script: 페이지 별로 다른 [[tech:javascript]] 파일을 적용하고자 할 때 지정한다. 단 wikilink 형식으로 지정하므로 외부 파일을 사용할 수는 없다. HTML4 및 HTML5의 defer / async 옵션을 추가 parameter로 지정할 수 있다(예: `[[sw:meta_script_somescript_defer_async]]`). - openid: 외부 OpenID 서버와 통신할 수 있는 링크를 적용한다. - link: 다른 페이지로의 링크를 지정한다. 혹은 html link 태그를 지정한다(예: `[[sw:meta_link_url_rel_value]]`). [[#htmlscrubber]] 플러그인을 사용할 경우 후자의 내용은 무시된다. - enclosure: 특정 파일 링크를 RSS / Atom 피드로 묶는다. [[tech:팟캐스트]] 페이지 등을 생성할 때 유용하다. - redir: 다른 페이지로의 리다이렉트를 지원한다. 기본 문법은 `[[sw:meta_redir_otherpage]]`이다. 만약 특정 시간 후 이동하도록 딜레이를 주고 싶다면 `"delay=seconds"` 형태로 옵션을 지정하면 된다. 외부 url을 지정하는 것도 가능하지만, [[#htmlscrubber]] 플러그인을 사용할 경우 이 내용은 무시된다. 추가로 `#ANCHOR` 문법을 사용하여 특정 헤딩을 지정할 수 있다. - robots: html robots 태그 옵션을 지정한다. index / noindex / follow / nofollow 옵션을 지정할 수 있다. 기본값은 "index, nofollow"이다. - guid: 페이지에 유니크한 ID를 지정한다. 기본값은 페이지 URL 값이다. 페이지를 이동할 가능성이 있을 때 유용하다. - updated: 페이지 수정 시간을 임의로 지정한다. 예컨대 블로그 페이지를 수정할 일이 있을 때, RSS 상에서 순서를 바꾸고 싶지 않을 때 유용하다. - name: HTML meta 태그의 name 속성을 지정한다. [[#htmlscrubber]] 플러그인을 사용할 경우 이 내용은 무시된다. 이 외에 다른 field를 사용할 경우, 단순히 HTML meta 태그에 해당 내용이 추가된다. 만약 field의 이름이 특수할 경우, `[[sw:meta_name_value_content_value]]` 형태로 지정해야 한다. ## 플러그인 ikiwiki는 [[dokuwiki]]와 비슷한 철학을 갖고 있다. 즉 코어는 굉장히 기본적인 기능만을 제공하고, 추가적인 기능은 플러그인으로 구현하게 된다. 몇몇 플러그인은 내장되어 있다. 안타깝게도 ikiwiki는 너무 오래된 소프트웨어이기 때문에, 적지 않은 플러그인들이 예컨대 [[tech:github]] 같은 저장소에 올려져 있지 않고 흩어져 있다. ### 설치법 ### 내장 플러그인 - meta