MoinMoin のインストール手順、設定項目の解説、カスタマイズ方法。
インストール
このサーバに MoinMoin をインストールした方法。
参考ページ: http://moinmo.in/HelpOnInstalling/ApacheOnLinuxFtp (現在、このページは存在しません)
インストール環境
MoinMoin 1.5.7
- Python 2.4系
- サーバへのアクセス手段は FTP のみ
- DOCUMENT_ROOT より上のディレクトリへのアクセス権はある。$HOME が /home/yourname な感じ。
- サーバの OS は FreeBSD
インストール計画
MoinMoin の URL は http://yourdomain.com/moin/ のように DOCUMENT_ROOT 直下に作成されたディレクトリで動作させる。MoinMoin の cgi を置くサーバー上でのディレクトリは DOCUMENT_ROOT/moin/ のようになる。
MoinMoin では実行用の cgi ファイルをパブリックな領域に設置し、Python モジュールや設定ファイル、作成されたページの保存ディレクトリを任意の場所にインストールして動作させる事ができるので、cgi スクリプトといくつかの必要なファイルのみ DOCUMENT_ROOT/moin/ に置く。
用語の定義
これからの説明に必要な用語を定義しておく。
- MOIN_SRC
MoinMoin のソースファイルが納められたディレクトリ。MoinMoin のアーカイブを展開して作成されるディレクトリでもある。
- WIKI_DIR
MoinMoin の設定ファイルや作成されたページを保存するためのルートディレクトリ。
サーバー環境調査のスクリプト
DOCUMENT_ROOT 環境変数などのサーバー環境を調査するための cgi スクリプトを設置した。
cgi スクリプト名は explore.cgi とする。設置場所はどこでもよい。今回は http://yourdomain.com/moin/explore.cgi とした。cgi スクリプトは Python スクリプトであり、次のようなコードである。
1 #!/usr/bin/env python
2
3 import os.path
4 import os
5 import sys
6
7 try:
8 __file__
9 except NameError:
10 __file__ = '?'
11
12 print """Content-type: text/html
13
14 <html><head><title>Python Exploration</title></head><body>
15 <table border=1>
16 <tr><th colspan=2>1. System Information</th></tr>
17 <tr><td>Python</td><td>%s</td></tr>
18 <tr><td>Platform</td><td>%s</td></tr>
19 <tr><td>Absolute path of this script</td><td>%s</td></tr>
20 <tr><td>Filename</td><td>%s</td></tr>
21 """ % (sys.version,
22 sys.platform,
23 os.path.abspath('.'),
24 __file__)
25 print "<th colspan=2>2. Environment Variables</th>\n"
26 for variable in os.environ:
27 print "<tr><td>%s</td><td>%s</td></tr>\n" % (variable, os.environ[variable])
28 print "</table></body></html>"
インストール開始
htdocs/ のアップロード
MOIN_SRC/wiki/htdocs/ にあるディレクトリとファイルを DOCUMENT_ROOT/moin/ にアップロード。htdocs/ の中身をアップロードするのであって、moin/ の下に htdocs/ をアップロードするのではない。
DOCUMENT_ROOT/moin/{common/, index.html, modern/...}htdocs/ の中身は 5MB ほどあるのでアップロードには少し時間がかかった。
WIKI_DIR を作成
設定ファイルやページデータを保存するためのディレクトリ、WIKI_DIR を DOCUMENT_ROOT より上の階層に作成する。ディレクトリ名は wiki とした。
例:
/home/yourname/wiki/
設定ファイル wikiconfig.py を置くディレクトリを作成
後述する wikiconfig.py を格納するディレクトリを WIKI_DIR に config/ という名前で作成しておく。
例:
/home/yourname/wiki/config/
underlay/ のアップロード
MOIN_SRC/wiki/underlay/ を DOCUMENT_ROOT より上位の階層である WIKI_DIR/underlay としてアップロード。
例:
/home/yourname/wiki/underlay/
underlay/ も約 4MB あるのでアップロードに少し時間がかかる。
data/ のアップロード
MOIN_SRC/wiki/data/ を DOCUMENT_ROOT より上位の階層である WIKI_DIR/data としてアップロード。
例:
/home/yourname/wiki/data/
MoinMoin/ のアップロード
MOIN_SRC/MoinMoin/ を DOCUMENT_ROOT より上位の階層である wiki/site-packages/MoinMoin/ としてアップロード。 例:
/home/yourname/wiki/site-packages/MoinMoin/
5.8MB あるのでアップロードには時間がかかる。
moin.cgi の設定
パブリック領域に設置する cgi スクリプト、MOIN_SRC/wiki/server/moin.cgi を環境にあわせて編集する。このファイルは Python パスの定義など、システムの設定を行う。
1行目の Python のパスを変更。レンタルサーバの情報から
#!/usr/local/bin/python に変更した。
次の行を自分の環境に合わせて変更する。コメントを外すこと!
## sys.path.insert(0, 'PREFIX/lib/python2.3/site-packages')
アップロードした MoinMoin/ ディレクトリを PYTHONPATH に含める設定なので次のように変更。
/home/yourname/wiki/site-packages
explore.cgi にある `Absolute path of this script' を参考に絶対パスで設定してやる。
次の作業でアップロード予定の wikiconfig.py をアップロードするパスを設定する。
# YOU NEED TO CHANGE THIS TO MATCH YOUR SETUP.
sys.path.insert(0, '/home/yourname/wiki/config')
wikiconfig.py の設定とアップロード
MOIN_SRC/wiki/config/wikiconfig.py を編集する。このファイルは wiki の環境設定である。
日本語を使うので
coding を utf-8 に。
sitename = u'ウェブサイトの名前'
data_dir = 'WIKI_DIR/data/'
data_unserlay_dir = 'WIKI_DIR/underlay/'
url_prefix = '/moin'編集した wikiconfig.py を WIKI_DIR/config/ にアップロードする。
例:
/home/yourname/wiki/config/wikiconfig.py
moin.cgi のアップロード
MOIN_SRC/wiki/server/moin.cgi を DOCUMENT_ROOT/moin/ へアップロードする。 例:
DOCUMENT_ROOT/moin/moin.cgi
cgi の実行に必要なパーミッションも確認すること!
動作確認
http://yourdomain.com/moin/ へアクセスして動作確認。(moin.cgi へ転送されないなら DirectoryIndex を調整すればよい。この件については自分の環境に合わせて適当に解決してください。)
ここまでの手順通りではおそらく「 wikiconfig.py で page_front_page を設定せよ」などのメッセージが表示されているはず。次章で wikiconfig.py について説明するので詳細はそちらを参照してください。
設定 wikiconfig.py
ページ編集の権限を制御する
acl の設定で、WebMaster というユーザのみページの作成や削除を許可する。他のユーザはページを読む権限しか与えない。
acl_rights_default = u'All:read' acl_rights_before = u'WebMaster:read,write,admin,delete,revert'
もちろんユーザは任意の名前で良い。複数のユーザを設定する場合はユーザ名をカンマ(,)で区切って記入する。
acl_rights_before = u'WebMaster,SubWebMaster:read,write,admin,delete,revert'
ページの編集を許可したい場合はそのページに権限を付与する設定を書く。
#acl All:read,write
上記の #acl 設定はすべてのユーザに対して読み取り/書き込み権限を与えることになる。
logo の alt 属性にサイト名を入れる
logo_string = u'<img ... alt="%s">' % sitename
meta 要素の変更
検索ロボット用のタグ
- html_head_query
- クエリ文字列が付いた URL の制御。
- html_head_posts
- POST メソッド用。
- html_head_index
- サイトのホームページ用。
- html_head_normal
- 通常のページに適用される要素。
html_head_query = '''<meta name="robots" content="noindex,nofollow">\n''' html_head_posts = '''<meta name="robots" content="noindex,nofollow">\n''' html_head_index = '''<meta name="robots" content="index,follow">\n''' html_head_normal = '''<meta name="robots" content="index,nofollow">\n'''
SEO の観点から html_head_normal は index,follow でも良い?
テーマ
MoinMoin の見た目を変更できます。変更するにはテーマ(Theme)をインストールします。自分で作成することも可能です。
http://moinmo.in/ThemeMarket 本家サイトで公開されているテーマ
テーマのインストール
A theme "THEMENAME" is made of these components:
set of CSS stylesheets, in /usr/share/moin/htdocs/THEMENAME/css/
Collection of images in /usr/share/moin/htdocs/THEMENAME/img/
a Python module in MoinMoin/theme/THEMENAME.py or in your wiki data/plugin/theme/THEMENAME.py
テーマを作る 〜 modern のカスタマイズ
デフォルトのテーマ modern をカスタマイズしてみる。(カスタマイズの目的は美しい文書構造を構築するためである。)
テーマのファイル構成
THEMENAME はテーマ名である。他のテーマ名と重複しないように。どうしても重複するなら既存のものを消す。
CSS
CSS ファイル達。CSS ファイルは文字コードを UTF-8 か ASCII で作成する。
- 保存ディレクトリ
- DOCUMENT_ROOT/moin-area/THEMENAME/css/
- common.css
- 名前の通り、media="all" として利用されるCSS。
- screen.css
- media="screen" 用のCSS。
- print.css
- media="print" 用のCSS。印刷用。
- projection.css
- media="projection" 用のCSS。
- msie.css
- IE6, IE7用のCSS。
画像
画像ファイル達。画像のカスタマイズは行わないので、画像ファイルの保存ディレクトリのみ示す。
- 保存ディレクトリ
- DOCUMENT_ROOT/moin-area/THEMENAME/imb/
画像ファイルの構成は ThemeBase クラスを読めば理解可能。
Python モジュール
HTML を生成するための辞書である。MoinMoin.theme から ThemeBase を継承する。ThemeBase クラスは MoinMoin/theme/init.py で定義されている。
- 保存ディレクトリ
MoinMoin/theme/THEMENAME.py または自分で設置した WIKI_DIR の data/plugin/theme/THEMENAME.py
メモ
- テーマのパーツは wikiconfig.py でもいくつか設定できるが自分のパッケージを作る方が融通が利く。カスタマイズできる項目に違いはある。
- THEMENAME は codereading.
- デフォルトテーマは wikiconfig.py で設定できる。
- 開発環境 Firefox 2.x + Firebug 1.x
CSS ファイル
CSS ファイルは文字コードを UTF-8 か ASCII で作成する。
Python モジュール
head()
消した(コメントアウトした)メソッド
- self.interwiki(d)
- self.trail(d)
- self.navibar(d)
- self.editbar(d)
title(self, d) オーバーライド
ページタイトルを h1 要素にする。
def title(self, d): return "<h1>%s</h1>" % wikiutil.escape(d['title_text'])
wikiutil.escape() は 事前に import しておく必要がある。
from MoinMoin import wikiutil
マクロ Macros
MoinMoin にはマクロ機能がある。次の書式にある"マクロ名"がマクロとして展開される。
[[マクロ名]]
このページに表示されている目次はマクロを利用している。
[[TableOfContents(2)]]
(2) は目次で表示する見出しの階層の深さを指定している。無指定だったらすべての階層を表示する。<h>タグの1〜6に対応している(はず)。
コマンドライン ユーティリティ
MOIN_SRC/MoinMoin/script/moin.py はコマンドランで使えるちょっとしたツール。 moin.py を使うには MOIN_SRC/MoinMoin を PYTHONPATH に通しておく。moin をシステムへインストールしたのであれば問題ないはず(筆者はインストールしていないので MOIN_SRC に移動してから使っている)。
moin.py の使い方
moin.py の Usage:
moin [general options] command subcommand [specific options]
general options は必須のオプションだ。
general options:
--config-dir=/config/directory - wikiconfig.py が置いてあるディレクトリのパスを指定する
--wiki-url=wiki.example.org/ - wiki の URL
(--wiki-url は今のところどのように作用しているのかわからない。なんぜ command が cli と export しか使ったことがないから)
command subcommand
moin.py で使えるコマンド。
cli show
特定のページだけを見たいときにつかう。スクリプトの実行結果は標準出力なので1ページだけダンプしたいときにも使える。その他の用途はちょっとわからない。おそらく --wiki-url で指定したページを取得するのに使うんだろう。しかし、wiki-url に適当な URL を指定しても MoinMoin.error.ConfigurationError が出て無理。MoinMoin.request.RequestCLI を読むと --wiki-url でリモートホストをサポートするのは TODO らしい。なので --config-dir から読み込まれる wikiconfig.py の設定にある wiki データが取得される。
cli show のオプション
--page - ページ名を指定する。
cli show の使用例
page_front_page を見る:
python MoinMoin/script/moin.py --config-dir=$HOME/Sites/moin/wiki/config cli show
wiki の page_front_page が出力される。general options にある --wiki-url は任意。
特定のページを見る:
python MoinMoin/script/moin.py --config-dir=$HOME/Sites/moin/wiki/config cli show --page=DocBook
ページ名 DocBook のページを見る。サブページの指定は未確認。
export dump
wiki ページを静的なHTMLページとしてダンプする。自分のマシンにインストールして使っている MoinMoin のデータを静的なHTMLで構築されたサイトにするときに使える。他にも MoinMoin で構築したサイトを CD などに保存して配布することもできる。ただし、css やロゴ画像のパスと名前、カスタム テーマの適用法が異なるので出力されたソースを見て足りないファイルを配置するなど配布には整形を要する。あらかじめ出力先のディレクトリに必要なものを置いておくのも良いだろう。
export dump のオプション
--target-dir - ダンプ先のディレクトリを指定する。必須のオプション。ディレクトリが存在しない場合は作成される。
--page - ページ名を指定する。
--page では正規表現が使えるようだが挙動がよくわからない。
export dump の使用例
すべてのページをダンプする:
python MoinMoin/script/moin.py --config-dir=$HOME/Sites/moin/wiki/config export dump --target-dir=$HOME/tmp/moindump
$HOME/tmp/moindump に HTML ファイルと添付ファイルが出力される。
特定のページをダンプする:
python MoinMoin/script/moin.py --config-dir=$HOME/Sites/moin/wiki/config export dump --target-dir=$HOME/tmp/moindump --page=DocBook
DocBook.html が出力される。DocBook.html と同じ内容で index.html も書き出される。
Thanks to
このページの編集にご協力いただいた人達。
Shintaro Watanabe さん http://10days.org/