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

  • MoinMoin

    • セットアップ

    • カスタマイズ

    • 改造パーサ

    • Markdown を使う

  • 読書

  • プログラミング

  • その他

    • CSS Tips

2014-07-24 17:36:07時点のリビジョン1
  • 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"

匿名ユーザーの編集禁止

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

    acl_rights_default = u"All:read"

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

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

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

MoinMoin はデフォルトでは誰でも自由にユーザーを作りまくることができる。個人用なら自分の把握できる範囲に留めたいので、制限をかけることにする。

制限には色々と方法が提案されているが、ここでは textcha を使ってみた。本体に手を加えることなく制限でき、作成したくなった場合にもパスワードを入れるだけで簡単に対応できる。

    textchas = {
        'ja': {
            u"Admin password?": ur"textcha 解除用パスワード",
        },
    }
    textchas_disabled_group = u"Admin"
  • © 2014 dossist.
  • CC License
  • Powered by MoinMoin with memodump