#format text_markdown MoinMoin のセットアップメモ =========================== [MoinMoin](https://moinmo.in/) を自分用の公開メモサイトとして使うため 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](https://wiki.ubuntu.com/) 等で稼働している実績がある。 * Moin 独自の文法だけでなく、簡易マークアップ言語の ReST 等にも対応している。Markdown にも頑張れば対応可能。 * ユーザ管理、ページのパーミッション設定がある。 * スキンや文法の追加ができるプラグインシステムあり。 * ページの階層化が可能。通常のディレクトリであるかのようにアクセスできる。 * 開発が続いていて、コードがメンテされている。現在、構造を大幅に見直した 2.0 の開発が進行中。 インストール ------------ [公式インストールガイド](http://master.moinmo.in/InstallDocs) apt-get でインストールすることも可能だが、色々といじりたかったので自分のユーザーディレクトリ内に手動でインストールした。実行時には suexec により自ユーザの権限で動作させた。 インストール場所を `/home/USER/` と仮定する。 ### ダウンロード ### [公式ダウンロード](http://moinmo.in/MoinMoinDownload) 最新のリリースは 1.9.7. zip をダウンロードして解凍してもよいが、[リポジトリ](https://bitbucket.org/thomaswaldmann/moin-1.9)から最新のソースを入手してもよい。リポジトリは Mercurial で管理されているので、hg を使って clone する。hg は apt-get でインストール可能。hg をインストールしたら MoinMoin のレポジトリを clone する。 ```console $ 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` を解凍する。(ヘルプ等のシステムページのデータが入っている) ```console $ 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` の両方で設定が必要。 ```python # 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 とする here = os.path.dirname(os.path.abspath(__file__)) # 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'))) #(中略) fix_script_name = '' # MoinMoin がリンクを生成するときに URL rewriting 対応のものを生成 ``` ##### .htaccess ##### 以下のような内容の `.htaccess` を作成して `public/` に置く。 ```apache 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 からも読めるようにする。 ```console $ chmod -R go-rw moin-1.9 $ chmod -R go+r moin-1.9/public ``` ### とりあえずのテストに必要な最低限の設定 ### 設定は `wiki/config/wikiconfig.py` に書かれている。 デフォルトでは instance_dir が変な場所を参照しているので、修正しておく。 ```python # 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 で運用すると仮定する。 ```apache # http://domain/ ServerName domain DocumentRoot /home/USER/moin-1.9/public # cgi 実行ユーザー SuexecUserGroup USER USER # VirtualHost 専用にログを分ける ErrorLog ${APACHE_LOG_DIR}/domain_error.log CustomLog ${APACHE_LOG_DIR}/domain_access.log combined # http://domain/~USER/ で変なファイルが表示されるかもしれないので disabled に Userdir disabled # mod_fcgid の設定 # 104857600 = 100 MiB # 受け付ける最大リクエスト長。デフォルトは約 130 KiB だが # 添付ファイルのアップロード用に適当な長さを確保したい FcgidMaxRequestLen 104857600 AllowOverride AuthConfig Indexes FileInfo Limit # mod_rewrite を有効にするために SymLinksIfOwnerMatch, fcgi のために ExecCGI Options MultiViews SymLinksIfOwnerMatch ExecCGI Require method GET POST OPTIONS PROPFIND # 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 行だけ表示したりすると見やすい。 ```console $ tail -n 50 /var/log/apache2/domain_error.log ``` ### 管理用ユーザー作成 ### ログインページからユーザーの作成ができる。 FirstnameLastname 形式と書いてあるが hoge でも fuga でも何でもよい。 ここで作成したユーザーを、後から `wikiconfig.py` 中でスーパーユーザーに指定する。 各種設定 -------- 設定は `wikiconfig.py` に書く。このファイルも python プログラムであり、コードを正しくインデントしないと動作しないので注意。(設定値を追加する時はスペース 4 つ分インデントすればよい) ### 基本設定 ### サイト名や管理者等の基本的な部分。 ##### サイト名 ##### ```python sitename = u'サイト名' ``` ##### フロントページ ##### フロントページを指定しないとサイトトップが LanguageSetup になってしまうため必須。 翻訳辞書に載っている単語 (u"FrontPage" 等) を指定すると、閲覧者の言語によってページ名も翻訳されて異なったものとなる (e.g. 日本語ブラウザで見ると "フロントページ" になる)。が、この方法は言語毎にフロントページを用意しないと not found となるためお勧めしない。 top や Home 等、辞書に載っていない適当な単語にするのがよい。 ```python page_front_page = u"top" ``` ##### 管理者 ##### 先ほど作った (管理用に使う予定の) ユーザーを管理用に指定し、ついでに全ページの全権限を得られるようにしておく。 ```python superuser = [u"さっき作ったユーザー", ] acl_rights_before = u"さっき作ったユーザー:read,write,delete,revert,admin" ``` ### その他の細かい設定 ### ##### デフォルト言語 ##### ついでにタイムゾーンも指定しておくと更新日時もローカライズされて表示される。 ```python language_default = 'ja' tz_offset = 9.0 ``` ##### デフォルトテーマ ##### Pukiwiki 風に言うとスキン。標準では `classic`, `modern`, `modernized`, `modernized_cms`, `rightsidebar` が選択できる。デフォルトは `modernized`. ```python theme_default = 'modernized' ``` ##### フッターのクレジット表記 ##### `page_credits` を設定するとデフォルト値がオーバーライドされる。クレジットは一個ずつリストにして入れる。リスト項目の中では html を直接記述してもよい。 ```python page_credits = [ u'© 2014 俺様.', u'Powered by MoinMoin', ] ``` ##### 更新ユーザーのホスト名を非表示に ##### 半プライベートなサイトならホスト名の表示も要らないかも知れない。 ```python show_hosts = 0 ```