はじめに
これは、 mopia さんが作成された Wiki Engine である VikiWiki を WEBrick 上で動作させるためのインターフェースです。
これにより、 CGI 対応の HTTP サーバのインストールや設定を行なうことなく、 Ruby だけで VikiWiki サーバを起動することが出来ます。
このインターフェースは、例えば次のような方々にお勧めです。
-
VikiWiki を少し試してみたい方
-
自宅等のローカルな環境でメモ書き環境を構築したい方
-
手元の環境で、ちょっとした CMS 環境を構築したい方
-
VikiWiki のプラグインを手元の環境で開発してみたい方
インストール
ここでは、このインターフェースのインストール方法について述べます。
インストールに先立って、もし VikiWiki サーバの入出力用の漢字コードとして euc-jp や shift-jis を使用する場合は、 uconv をインストールする必要があります。
インストールを行うには、 VikiWiki 1.9.* のアーカイブファイルである vikiwiki2.zip を展開後、展開先のディレクトリの下の webrick ディレクトリに移動します。
$ unzip ./vikiwiki2.zip $ cd ./vikiwiki2/webrick
次に、コマンドラインから次のように入力します。
$ ruby ./setup.rb config $ ruby ./setup.rb setup $ su # ruby ./setup.rb install
このインターフェースはインストーラとして、 青木峰郎さん の setup.rb を使用しています。
実際に setup.rb で指定できるオプション等については、 setup.rb のオンラインマニュアルを参照してください。
また、このインターフェースパッケージでは setup.rb 標準のオプションの他、以下のオプションが指定できます。
- --encoding=[euc-jp|shift-jis|utf-8]
-
VikiWiki で使用する漢字コード。(デフォルトは utf-8)
- --datadir=[path]
-
VikiWiki のリポジトリの雛型やサンプルスクリプトが置かれるパス
- --libtidypath=[path]
-
VikiWiki が出力するページを tidy を用いて整形する場合に使用する libtidy.so が置かれているパス (デフォルトは $libdir/libtidy.so)
VikiWiki サーバの起動
ここでは、 VikiWiki サーバを起動する方法について述べます。
デフォルトでの起動方法
コマンドラインから以下のように入力すると、全ての設定がデフォルトの状態で VikiWiki サーバが起動します。
$ ruby -r vikiwiki -e run
すなわち、ライブラリ vikiwiki.rb を require で取り込んだ後にメソッド Kernel#run を呼び出します。
この時、ホームディレクトリ $HOME に(もし存在しなければ)ディレクトリ VikiWiki/ が作成され、そこに VikiWiki のリポジトリとなるデータファイル群と VikiWiki サーバが使用する各種設定値を保存するためのファイル(以下、設定ファイルと呼びます) VikiWiki/vikiwiki.conf が置かれます。
この状態で、適当な web ブラウザから、 http://localhost:10080/vikiwiki にアクセスすると、 VikiWiki の初期画面が表示されます。
なお、メソッド Kernel#run は、ワンライナー以外の環境では実行することが出来ませんので御了承ください。
デフォルト以外の設定での起動方法
デフォルト以外の設定で VikiWiki サーバを起動する場合は、 Kernel#run メソッドに以下の引数をハッシュとして与えます。
- "PORT"
-
VikiWiki サーバが待ち受けるポート番号を指定します (デフォルトは 10080; 但し、後述のように SSL を有効にした場合は 10443)。
- "SSL"
-
SSL を有効にするかどうかを指定します。この設定値を真にすると、 SSL に対応した VikiWiki サーバが起動します。 (デフォルトは false)。
- "BASEDIR"
-
VikiWiki サーバのリポジトリが置かれるディレクトリを指定します (デフォルトは "$HOME/VikiWiki")。
- "CONFIGFILE"
-
設定ファイルのパスを、絶対パスで指定します (デフォルトは "$HOME/VikiWiki/vikiwiki.conf")。
- "SCRIPT_NAME"
-
VikiWiki サーバのスクリプト名を指定します (デフォルトは "/vikiwiki")。
なお、上記の引数のキーは文字列の他、 Symbol でも指定でき、大文字と小文字を区別しません。
例えば、 VikiWiki のデータファイル群を /home/zool/Wiki に置き、 VikiWiki サーバが接続をポート番号 20080 で待ち受ける様に設定する場合は、以下のようにします。
$ ruby -r vikiwiki -e 'run "BASEDIR" => "/home/zool/Wiki", "PORT" => 20080'
または、以下のようにすることもできます。
$ ruby -r vikiwiki -e 'run :BaseDir => "/home/zool/Wiki", :Port => 20080'
また、以下のように、 PORT, SSL, BASEDIR, CONFIGFILE, SCRIPT_NAME の各引数をコマンドラインのオプションとして与える事もできます。
$ ruby -r vikiwiki -e run -- --basedir=/home/zool/Wiki --port=20080
この時、引数 PORT, SSL, BASEDIR, CONFIGFILE, SCRIPT_NAME を指定するには、それぞれオプション --port, --ssl, --basedir, --configfile, --script-name を用います。
WEBrick サーブレットクラス
また、 WEBrick::HTTPServer オブジェクトに mount するためのサーブレットクラスとして VikiWiki::WEBrick::Servlet クラスを用意しました。
これにより、既存の WEBrick アプリケーションに VikiWiki サーバを組み込むことができます。以下に例を示します。
require "webrick" require "vikiwiki" s = WEBrick::HTTPServer(:Port => 10080) # ... # /home/zool/Wiki にリポジトリを置く VikiWiki サーバを組み込む。 s.mount("/vikiwiki", VikiWiki::WEBrick::Servlet, {"BASEDIR" => "/home/zool/Wiki"}) # ... s.start
なお、 VikiWiki::WEBrick::Servlet.new が取る引数は Kernel#run と同様ですが、引数 "PORT" 及び "SSL" を指定することができません。
また、 VikiWiki::WEBrick::Servlet の mount point と引数 "SCRIPT_NAME" の値が異なる場合、 mount point の path が優先され、引数 "SCRIPT_NAME" の値は無視されます。
その他おまけクラス
本インターフェースパッケージのおまけとして、次のようなクラスを用意しています。
- VikiWiki::WEBrick::PluginHook::Servlet
-
静的HTMLでフォームを使うプラグインを利用するためのスクリプト (以下 plugin_hook スクリプトと呼びます) である tool/plugin_hook.cgi の WEBrick サーブレットクラスです。以下に組み込み例を示します。
... # 下記のように mount すると、 /hook が tool/plugin_hook.cgi と同様に振る舞う。 s.mount("/hook", VikiWiki::WEBrick::PluginHook::Servlet, {"BASEDIR" => "/home/zool/Wiki"}) ...
また、 VikiWiki::WEBrick::PluginHook::Servlet.new の引数には VikiWiki::WEBrick::Servlet と同様のものの他、以下のものが指定できます。
- PLUGIN_HOOK_SCRIPT
-
plugin_hook スクリプトのスクリプト名を指定します。
なお、 VikiWiki::WEBrick::PluginHook::Servlet の mount point と引数 "PLUGIN_HOOK_SCRIPT" の値が異なる場合、 mount point の path が優先され、引数 "PLUGIN_HOOK_SCRIPT" の値は無視されます。
tool/plugin_hook.cgi に関する詳細については、 ../tool.txt の 「静的HTMLでフォームを使うプラグインを利用する」の項を御覧下さい。
- VikiWiki::WEBrick::TrackBack::Servlet
-
トラックバック ping を受信するためのスクリプトである tool/tb.cgi の WEBrick サーブレットクラスです。 WEBrick サーバへの組み込み方は上述の VikiWiki::WEBrick::Servlet と同様です。
また、 VikiWiki::WEBrick::TrackBack::Servlet.new の引数には VikiWiki::WEBrick::Servlet と同様のものの他、以下のものが指定できます。
- TB_CGI
-
トラックバック ping 受信スクリプトのスクリプト名を指定します (デフォルトは /cgi-bin/tb.cgi)。
なお、 VikiWiki::WEBrick::TrackBack::Servlet の mount point と引数 "TB_CGI" の値が異なる場合、 mount point の path が優先され、引数 "TB_CGI" の値は無視されます。
tool/tb.cgi の詳細については、 ../vikiwiki/plugin/ja/tbrecv.rb 内の VikiWiki::Plugins::Tbrecv#ondesc メソッドの内容を御覧下さい。
- VikiWiki::WEBrick::XMLRPC::Servlet
-
VikiWiki のリポジトリを XML-RPC API を経由してアクセス出来るようにするための WEBrick サーブレットクラスです。 WEBrick サーバへの組み込み方は上述の VikiWiki::WEBrick::Servlet と同様です。
また、 VikiWiki::WEBrick::XMLRPC::Servlet.new の引数には VikiWiki::WEBrick::Servlet と同様のものの他、以下のものが指定できます。
- XMLRPC_CGI
-
XML-RPC サーバのスクリプト名を指定します (デフォルトは /xmlrpc)。
なお、 VikiWiki::WEBrick::XMLRPC::Servlet の mount point と引数 "XMLRPC_CGI" の値が異なる場合、 mount point の path が優先され、引数 "XMLRPC_CGI" の値は無視されます。
XML-RPC サーバの詳細については、 ../tool.txt の「XML-RPC サーバスクリプト xmlrpc.cgi」の項を御覧下さい。
注意点その他
ここでは、このパッケージについての注意点等について述べます。
VikiWiki サーバの制限
このパッケージによる VikiWiki サーバでは、 WikiFarm が使用できません。この場合は、1個の WEBrick サーバに対して複数個の VikiWiki::WEBrick::Servlet 及び VikiWiki::WEBrick::*::Servlet クラスを mount することにより、 WikiFarm と同様の効果が得られます。
VikiWiki サーバの各種設定について
VikiWiki サーバの各種設定の変更は、引数 "CONFIGFILE" で指定した設定ファイルを修正することによって行ってください。設定ファイルの実体は、通常の vikiwiki.cgi のスクリプトファイルです (^^;;;)。
なお、設定ファイルは #admin プラグインの「CGIの設定を変更する」「パラメタを編集する」「CGIファイルを編集する」メニューから修正することも出来ます。
但し、設定値 "BASEDIR", "CONFIGFILE", "WIKIFARM" は設定ファイルで値を指定しても、その値は無視されます。
また、設定値 "SCRIPT_NAME", "PLUGIN_HOOK_SCRIPT", "TB_CGI", "XMLRPC_CGI" は、設定ファイルで値を指定しても、起動時において Kernel#run の引数及び VikiWiki::WEBrick::Servlet.new, VikiWiki::WEBrick::*::Servlet.new 等の引数及び mount point が指定されている場合はそちらの方が優先されます。
VikiWiki サーバの各種設定値の詳細については、 vikiwiki.zip 同梱の parameter.txt を参照してください。なお、設定値のデフォルト値は、以下の物を除いて parameter.txt で示された値と同様です。
conf["AUTHOR"] = "Administrator" conf["ADMIN"] = "admin" conf["ADRESS"] = "admin@example.com" conf["AUTHTYPE"] = "vikiwiki" conf["BASEDIR"] = ENV["HOME"] + "/VikiWiki" conf["BASEURI"] = "/" conf["CONFIGFILE"] = ENV["HOME"] + "/VikiWiki/vikiwiki.conf" conf["ENCODING"] = $VIKIWIKIENCODE; # インストール時に指定した # --encoding の値によって決まる conf["LOGFILTER"] = "all" conf["SCRIPT_NAME"] = "/vikiwiki" conf["STATICDIR"] = ENV["HOME"] + "/VikiWiki/static" conf["STATICURI"] = "/static" conf["WIKIFARM"] = false conf["TITLE"] = "VikiWiki - page" conf["STATICTITLE"] = "alias"
独自プラグイン等の利用
VikiWiki サーバから独自のプラグインや Wiki 記述スタイルのスクリプトを利用するには、以下のようにしてください。
-
サーバの設定値 "BASEDIR" で指定したディレクトリ(以下、 conf["BASEDIR"] と表記します)の下に plugin, wiki ディレクトリを作成します。
-
conf["BASEDIR"]/{plugin, wiki} ディレクトリ以下にスクリプトを置いてください。
-
VikiWiki サーバは conf["BASEDIR"]/{plugin, wiki} ディレクトリ以下に置かれたスクリプトを優先的に読み込みます。
VikiWiki サーバの認証
ユーザの認証には、 conf["BASEDIR"]/etc/passwd の内容が使われます。conf["BASEDIR"]/etc/passwd の内容の変更には、プラグイン #passwd が使用出来ます。
ここで、 VikiWiki サーバのリポジトリがインストールされた時には、最初に管理者ユーザとして "admin" が、初期パスワードを "admin" として登録されています。
もし、 conf["AUTHTYPE"] の値が "www" であり、 conf["BASEDIR"]/etc/passwd に管理者ユーザ(設定値 "ADMIN" で示されるユーザ)が登録されていない場合は、管理者ユーザが、管理者ユーザ名そのものを初期パスワードとして自動的に登録されます(例えば、管理者ユーザ名が "root" の場合は、 "root" が初期パスワードになります)。
SSL 対応 VikiWiki サーバについて
SSL 対応 VikiWiki サーバのサーバ証明書は、自己署名証明書としてサーバ起動時に自動的に作成され、 conf["BASEDIR"]/certs/ssl_cert.pem に置かれます。また、秘密鍵は conf["BASEDIR"]/certs/ssl_privkey.pem に置かれます。
なお、作成されるサーバ証明書の CN 及び nsComment は以下の通りです。
C=JP, O=VikiWiki.Net, OU=VikiWiki::WEBrick::Server CA, CN=[VikiWiki サーバの FQDN] nsComment = "Generated by VikiWiki::WEBrick::Server"
VikiWiki サーバの運用
VikiWiki サーバは、ローカルな環境での運用を前提としています。外部への公開には適しませんので、御了承下さい。
謝辞
このインターフェースの作成にあたって、何よりも VikiWiki の作者である mopia さんに心より感謝致します。
また、このインターフェースのインストーラである setup.rb の作者の青木峰郎さんにも心より感謝致します。 setup.rb により、インストールの作業を容易にすることが出来ました。
そして、 WEBrick を作成された IPR -- Internet Programming with Ruby の方々に心より感謝致します。 最後に ruby の作者であるまつもとゆきひろさんと ruby に関わっておられるすべての方々に心より感謝致します。
Written by Z80-OOLONG (NAKATSUKA, Yukitaka)