memodump
  • コメント
  • 編集不可のページ
  • メニュー
    • ナビゲーション
    • 更新履歴
    • ページ検索
    • ローカルサイトマップ
    • ヘルプ
    • ヘルプの目次
    • MoinWiki記法のヘルプ
    • 表示
    • 添付ファイル
    • 情報
    • Wikiテキスト
    • 印刷ビュー
    • 編集
    • ロード
    • 保存
  • ログイン

  • MoinMoin

    • セットアップ

    • カスタマイズ

    • 改造パーサ

    • Markdown を使う

  • 読書

  • プログラミング

  • その他

    • CSS Tips

2014-07-24 18:22:40時点のリビジョン2
  • Moin
  • Setup

MoinMoin のセットアップメモ

MoinMoin を自分用の公開メモサイトとして使うため Linux サーバ上にセットアップした際の詳細。

標準のインストール方法を使わず、ユーザーディレクトリにインストールした。
サーバの OS は Ubuntu Server 13.10 x64。 Web サーバには apache 2.4 (suexec-custom, mod_fcgid) を用い、専用の VirtualHost を割り当てて運用した。

以下、http://domain/ でホストすると仮定する。
Linux や apache に関する基礎知識はあるものとして話を進める。

MoinMoin とは

特徴と、個人的に気に入った点は以下の通り。

  • Python で書かれた Wiki クローン。
  • スタンドアロンの daemon だけでなく wsgi, cgi/fcgi 等のインターフェイスを持っている。
  • Ubuntu Wiki 等で稼働している実績がある。
  • Moin 独自の文法だけでなく、簡易マークアップ言語の ReST 等にも対応している。Markdown にも頑張れば対応可能。
  • ユーザ管理、ページのパーミッション設定がある。
  • スキンや文法の追加ができるプラグインシステムあり。
  • ページの階層化が可能。通常のディレクトリであるかのようにアクセスできる。
  • 開発が続いていて、コードがメンテされている。現在、構造を大幅に見直した 2.0 の開発が進行中。

インストール

公式インストールガイド

apt-get でインストールすることも可能だが、色々といじりたかったので自分のユーザーディレクトリ内に手動でインストールした。実行時には suexec により自ユーザの権限で動作させた。

インストール場所を /home/USER/ と仮定する。

ダウンロード

公式ダウンロード

最新のリリースは 1.9.7. zip をダウンロードして解凍してもよいが、リポジトリから最新のソースを入手してもよい。リポジトリは Mercurial で管理されているので、hg を使って clone する。hg は apt-get でインストール可能。hg をインストールしたら MoinMoin のレポジトリを clone する。

$ hg clone https://bitbucket.org/thomaswaldmann/moin-1.9

設置

以下のようなディレクトリ構造を目指して設置した。

/home/USER/moin-1.9/
           |-- MoinMoin/      本体コード
           |-- wiki/          データ
           |   |-- config/      MoinMoin 本体の設定
           |   |-- data/        Wiki のページ内容、ユーザ情報等
           |   |-- server/      起動用スクリプトのテンプレートが入っている
           |   `-- underlay/    ヘルプ等のシステムページ
           `-- public/        サイトの DocumentRoot (自前で作成、後述)

MoinMoin 本体

インストール用のスクリプトもあるが、今回は手動でファイルをコピー/移動した。
レポジトリを clone してできた moin-1.9/ をホームディレクトリ以下の外部から見えない位置に移動する (DocumentRoot の中に入れないこと!)。今回は /home/USER/moin-1.9/ とする。

移動したら moin-1.9/wiki/underlay.tar を解凍する。(ヘルプ等のシステムページのデータが入っている)

$ tar xf underlay.tar

DocumentRoot 以下のファイル

web から直接見えることになる DocumentRoot 用のディレクトリは自前で作成する。
中には呼び出し用のスクリプト moin.fcgi と .htaccess のみあればよい。(favicon をカスタマイズしたい場合は favicon.ico をここに置いてもよい)
今回は moin-1.9/public/ を作り、そこを DocumentRoot とした。

public/ の内容を準備する。

MoinMoin 呼び出し用スクリプト

今回は fcgi 版を使うことにした。
moin-1.9/wiki/server/moin.fcgi をコピーし、必要箇所を書き換える。

  • MoinMoin 本体および config が呼び出せるように sys.path にパスを追加
  • URL rewriting を有効化して見やすい URL にする。
    通常は cgi スクリプトへの引数が含まれた長くて読みづらい URL になるが、普通のサイトのような綺麗な URL にしたい。通常のファイルへのアクセスのような URL を渡してもらい、それを内部で書き換えて cgi に渡すことにする。moin.fcgi と .htaccess の両方で設定が必要。
# a1) Path of the directory where the MoinMoin code package is located.
#     Needed if you installed with --prefix=PREFIX or you didn't use setup.py.
here = os.path.dirname(os.path.abspath(__file__)) # このファイルのディレクトリ名を here とする
# sys.path にここの親ディレクトリを追加 (/home/USER/moin-1.9)
sys.path.insert(0, os.path.abspath(os.path.join(here, '../')))

# a2) Path of the directory where wikiconfig.py / farmconfig.py is located.
#     See wiki/config/... for some sample config files.
# /home/USER/moin-1.9/wiki/config を追加
sys.path.insert(0, os.path.abspath(os.path.join(here, '../wiki/config'))) 

#(中略)

# Is fixing the script name needed?
# Use None if your url looks like http://domain/wiki/moin.fcgi
# Use '' if you use rewriting to run at http://domain/
# Use '/mywiki' if you use rewriting to run at http://domain/mywiki/
fix_script_name = ''  # MoinMoin がリンクを生成するときに URL rewriting 対応のものを生成
.htaccess

以下のような内容の .htaccess を作成して public/ に置く。

DirectoryIndex moin.fcgi
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ moin.fcgi/$1 [L,QSA]

これで apache により URL が書き換えられる。
例えば、http://domain/file へアクセスするとする。file が DocumentRoot 以下に実際に存在すれば直接表示される。存在しなければ (通常はこちらの動作になる) http://domain/moin.fcgi/file へのアクセスとして内部で変換される。

パーミッション

環境によるが、今回の環境では suexec により自ユーザの権限で動作させるため、MoinMoin 本体およびデータは自分以外から読めないことが望ましい。ただし、DocumentRoot である public/ 以下は Apache からも読めるようにする。

$ chmod -R go-rw moin-1.9
$ chmod -R go+r moin-1.9/public

とりあえずのテストに必要な最低限の設定

設定は wiki/config/wikiconfig.py に書かれている。
デフォルトでは instance_dir が変な場所を参照しているので、修正しておく。

    # instance_dir はデフォルトで wikiconfig.py と同じディレクトリ (wiki/config/) になっているので、
    # その親ディレクトリ wiki/ に変更
    instance_dir = os.path.dirname(wikiconfig_dir)

サイト名等々は後から設定する。

apache の設定

今回の構成で apache 本体に必要な mod は以下の通り。

  • mod_rewrite (多分デフォルトで入っている)
  • mod_fcgid (MoinMoin の fcgi 版を使うなら必要、他のインターフェイスの場合はそれに応じたものを)
  • suexec-custom (今回は自ユーザ権限で MoinMoin を走らせるため。apache2-suexec-custom のインストールが必要)

mod の組み込みや suexec の設定はここでは解説しない。

専用の VirtualHost を立てて運用することにしたので、そのための conf を書く (管理者権限が必要)。
Ubuntu 13.10 では conf が VirtualHost ごとに分割されている。/etc/apache2/sites-available/ にまとめて入っているので、適当なファイル名で MoinMoin ホスト用のファイルを書く。今回は 500-moin.conf とした。例では http://domain/、ユーザー/グループは USER/USER で運用すると仮定する。

<VirtualHost *:80>
        # http://domain/
        ServerName domain
        DocumentRoot /home/USER/moin-1.9/public

        # cgi 実行ユーザー
        <IfModule mod_suexec.c>
                SuexecUserGroup USER USER
        </IfModule>

        # VirtualHost 専用にログを分ける
        ErrorLog ${APACHE_LOG_DIR}/domain_error.log
        CustomLog ${APACHE_LOG_DIR}/domain_access.log combined

        # http://domain/~USER/ で変なファイルが表示されるかもしれないので disabled に
        <IfModule mod_userdir.c>
                Userdir disabled
        </IfModule>

        # mod_fcgid の設定
        <IfModule mod_fcgid.c>
                # 104857600 = 100 MiB
                # 受け付ける最大リクエスト長。デフォルトは約 130 KiB だが
                # 添付ファイルのアップロード用に適当な長さを確保したい
                FcgidMaxRequestLen 104857600
        </IfModule>

        <Directory "/home/USER/moin-1.9/public">
                AllowOverride AuthConfig Indexes FileInfo Limit
                # mod_rewrite を有効にするために SymLinksIfOwnerMatch, fcgi のために ExecCGI
                Options MultiViews SymLinksIfOwnerMatch ExecCGI
                Require method GET POST OPTIONS PROPFIND
        </Directory>

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

必要なら mod を組み込み、サイトを有効化して apache を再起動。

テストとユーザー作成

ブラウザから http://domain/ にアクセスして表示できるかテストしてみる。LanguageSetup が表示されたら ok.

エラーが出たら

apache のログを見てみるとよい。/var/log/apache2/domain_error.log にエラーが記録されているかも知れない。
ログが長い (かも知れない) ので、こんな風にラスト 50 行だけ表示したりすると見やすい。

$ tail -n 50 /var/log/apache2/domain_error.log

管理用ユーザー作成

ログインページからユーザーの作成ができる。
FirstnameLastname 形式と書いてあるが hoge でも fuga でも何でもよい。
ここで作成したユーザーを、後から wikiconfig.py 中でスーパーユーザーに指定する。

各種設定

設定は wikiconfig.py に書く。このファイルも python プログラムであり、コードを正しくインデントしないと動作しないので注意。(設定値を追加する時はスペース 4 つ分インデントすればよい)

基本設定

サイト名や管理者等の基本的な部分。

サイト名
    sitename = u'サイト名'
フロントページ

フロントページを指定しないとサイトトップが LanguageSetup になってしまうため必須。
翻訳辞書に載っている単語 (u”FrontPage” 等) を指定すると、閲覧者の言語によってページ名も翻訳されて異なったものとなる (e.g. 日本語ブラウザで見ると “フロントページ” になる)。が、この方法は言語毎にフロントページを用意しないと not found となるためお勧めしない。
top や Home 等、辞書に載っていない適当な単語にするのがよい。

    page_front_page = u"top"
管理者

先ほど作った (管理用に使う予定の) ユーザーを管理用に指定し、ついでに全ページの全権限を得られるようにしておく。

    superuser = [u"さっき作ったユーザー", ]
    acl_rights_before = u"さっき作ったユーザー:read,write,delete,revert,admin"

その他の細かい設定

デフォルト言語

デフォルトの言語と一緒にタイムゾーンも指定しておくと更新日時もローカライズされて表示される。

    language_default = 'ja'
    tz_offset = 9.0
デフォルトテーマ

標準では classic, modern, modernized (デフォルト), modernized_cms, rightsidebar が選択できる。

    theme_default = 'modernized'
フッターのクレジット表記

page_credits を設定するとデフォルト値がオーバーライドされる。クレジットは一個ずつリストにして入れる。リスト項目の中では html を直接記述してもよい。

    page_credits = [
        u'&copy; 2014 俺様.',
        u'Powered by <a href="http://moinmo.in/" title="This site uses the MoinMoin Wiki software.">MoinMoin</a>',
    ]

匿名ユーザーの編集禁止

個人用メモなら自分か限られたユーザー以外の編集は禁止したい。普通にブラウザで開いただけの非ログイン状態ではページの編集ができないようにする。(誰でも編集できるようにしたい時は必要ない)

    acl_rights_default = u"All:read"

これを指定しないとデフォルトで全ユーザーに書き込み権限が与えられる。ここでは全ユーザーに読み出し権限のみを与え、書き込み権限を指定しないことで書き込みを不可能にしている。

ACL は before → default → after の順で加算されるように適用される。管理者は既に before 段で全権限を付与されており、後の段で明示的に剥奪されない限り全操作が可能となる。default はページごとの ACL があれば上書きされるため、特定のページだけ匿名ユーザーの閲覧を禁止したい場合にも対応できる。
ACL について詳しくは HelpOnAccessControlLists を参照。

自由にユーザーを作れないようにする

MoinMoin はデフォルトでは誰でも自由にユーザーを作りまくることができる。個人用なので制限をかけることにする。

制限には様々な方法が提案されているが、ここでは textcha を使ってみた。本来は質問を出し、それに答えさせることで人間かどうか判別するのが目的のシステムだが、ここでは単純にパスワード的なものを問い合わせるのに使う。

メリット
  • 本体に手を加えることなく制限できる
  • ユーザーを作成したくなった場合にもパスワードを入れるだけで簡単に対応できる
デメリット
  • textcha は他のアクションにも使われ、アクションごとに質問を変えて厳しく制限したり緩く制限したりはできない

language_default を使うので、それより後ろで定義する必要がある。

    textchas = {
        language_default: {
            u"Password?": ur"パスワード",
        },
    }
    textchas_disabled_group = u"Admin"

ur”パスワード” の部分に textcha 解除用のパスワードを入れておく。

textcha は言語ごとに定義するが、目的の言語のものがなかった場合は language_default のものが使われるのでこうしておけば漏れがなくなる。

管理用に、textcha を適用しないユーザーグループを作る (ここでは Admin とした)。ユーザーグループはグループ名で普通の wiki ページを作ってそこにユーザーを列挙することで作ることができる。

http://domain/Admin にアクセスし、新規ページを作成する。
ページ内容は以下のようにする。

#acl Admin:read,write,delete,revert

 * 上で作った管理用ユーザー名

これで、Admin グループのユーザーは textcha が免除される。

  • © 2014 dossist.
  • CC License
  • Powered by MoinMoin with memodump