On this page |
概要 ¶
スタジオにセントラルヘルプサーバーをセットアップすれば、マシン毎に各Houdiniが各自のヘルプサーバーを実行させることなく、 複数のHoudiniユーザにヘルプを提供することができるようになります。 これは、ユーザ間のサイト固有のドキュメントを共有するのに役立ちます。
このドキュメントでは、セントラルヘルプサーバーを起動するためのソリューションをいくつか説明しています:
-
小規模: デフォルトのヘルプサーバーを起動する。 これは、Houdiniに同梱されているデフォルトのPythonサーバーを単に起動させるだけです。 同時に数人のユーザがアクセスする分にはこれで十分かもしれませんが、ユーザが増えれば、おそらく以下のソリューションで高速化する必要があるでしょう。
この解決策は、セットアップと起動が最も簡単ですが、同時に少数のユーザがアクセスする場合にのみ機能します。 これには、(Apprenticeライセンスなどの)Houdiniライセンスが必要になります。
-
より高速: プロキシサーバーを使用する。 これは、
nginx
などのスタンドアローンなHTTPサーバーを使用し、ヘルプページコンテンツのリクエストをデフォルトのPythonサーバーに転送しつつ、多くのファイルを供給できるようにします。これが最もバランスの取れたソリューションです。 これによって、動的コンテンツと検索の提供とノードに埋め込まれたヘルプの読み込みが可能になると同時に、デフォルトのPythonサーバーよりも非常に高速です。 多数のユーザがアクセスする場合には、さほど速くないかもしれません。 これには、(Apprenticeライセンスなどの)Houdiniライセンスが必要になります。
-
さらに高速: WSGIアプリケーションサーバーを使用したアプリケーションを用意する。 これは、WSGIアプリケーションサーバーを使用して、静的ファイルを提供し、動的ページリクエストを処理します。
これは、動的コンテンツと検索を提供しますが、ノードに埋め込まれたヘルプを読み込むことができません。 プロキシサーバーのソリューションよりも高速でスケーラビリティが高いです。 これにはHoudiniライセンスが 不要 です。
-
最速: 静的ヘルプを提供する。 これは、ヘルプ内のwikiファイルから事前にHTMLファイルを生成するので、プレーンHTTPサーバーを使ってHTMLファイルを提供することができます。
これが最も高速なソリューションで、プレーン静的ファイルを提供するだけなのでセットアップが簡単です。 このソリューションによって、Houdiniのヘルプを既存のウェブサーバーで公開することができます。 これは、動的コンテンツも検索もノードに埋め込まれたヘルプも 提供しません 。 これにはHoudiniライセンスが 不要 です。
Note
このドキュメントでは、一般的なソリューションと設定について説明します。 一部のソリューションでは、サードパーティ製ソフトウェアのインストールと設定が必要になります。 このドキュメントには、いくつか例が含まれていますが、残念ながら、プラットフォーム、ソフトウェア、設定オプションの有り得るすべての組み合わせが網羅されていることは期待できません。 使用するソフトウェア、その設定オプション、あなたが選んだソフトウェアがWSGIなどの規格をどのように使用するのかは、あなた独自で調べる必要があります。
ライセンス ¶
ヘルプサーバーは、通常ではノードやツールに埋め込まれているヘルプを読み込むためにHOMを使用するので、起動するのにHoudiniライセンスが必要になります。
Apprenticeライセンスを含む任意の Houdiniライセンスを使ってhython
を実行することができます。
最も簡単な方法は、セントラルサーバーマシンをセットアップして、そこにApprenticeライセンスだけをインストールして、そのサーバープロセスがそのライセンスを使用するようにすることです。
他のライセンスタイプを不許可にすることで、 hython
がApprenticeライセンスを使用する ようにすることができます:
hython --skip-license-modes="commercial,indie,education" ...
静的ヘルプの提供にはライセンスは不要ですが、いくつか欠点があることに注意してください。 詳細は、下記の静的ヘルプの提供を参照してください。
小規模: デフォルトのヘルプサーバーを起動する ¶
セントラルヘルプサーバーのセットアップの最も簡単な方法は、Houdiniに同梱されているデフォルトのPythonサーバーを単に起動させることです。 この欠点は、このPythonサーバーは単一プロセスしか使用できず、Pythonコードを使ってすべてのファイル(画像、スタイルシートなど)を提供していることです。 これは、数人規模だと十分な速さかもしれませんが、ユーザが増えれば、おそらく以下で説明しているもっと速い方法を調査する必要が出てきます。
-
セットアップが簡単。
-
同時に多くのユーザがアクセスするにはスケーラビリティが弱いです。
コマンドライン ¶
-
Houdiniシェルを開きます。
Windows
スタート ▸ すべてのプログラム ▸ Side Effects Software ▸ Houdini X.X.XXX ▸ Utilities ▸ Command line tools をクリックします。
Mac
ファインダーから Applications ▸ Houdini ▸ HoudiniX.X.X ▸ Utilities ▸ Houdini Terminal を開きます。
Linux
bash
シェルで、cd
でHoudiniインストールディレクトリに移動し、source houdini_setup
をタイプします。 -
Houdiniシェルで、以下をタイプします:
hhelp serve --bgindex=true
これは、バックグラウンドのインデックス化を有効にしてヘルプサーバーを立ち上げます。
-
ブラウザを開いて、以下のURLにアクセスします。
http://localhost:8080/
hhelp serve
¶
--host=0.0.0.0
サーバーのIPアドレス。
-
コンピューターに複数のネットワークコントローラーがあれば、ヘルプサーバーにListenさせたいアドレスを指定することができます。
-
ヘルプサーバーを他のコンピュータから利用可能にするには、
0.0.0.0
(デフォルト)を使用します。 -
ヘルプサーバーをあなたのコンピュータでのみ利用可能にするには、
localhost
または127.0.0.1
を使用します。
--port=8080
サーバーのポート番号。デフォルトは8080
です。
--debug
情報のデバッグを有効にして、サーバーを実行します。
--bgindex
サーバーが実行中にバックグラウンドで変更のあったドキュメントのインデックスを再生成します。
--config=path
(オプション) コンフィグオプションを読み込むファイル。
--logfile=path
(オプション) サーバーログの書き出し先のファイル。
--loglevel=DEBUG|INFO|WARNING|ERROR
(オプション) この重要度レベルでメッセージをログにします。
hhelp index
¶
このコマンドは、手動で検索インデックスを更新します(--bgindex
オプションでサーバーを実行していない場合)。デフォルトでは、このコマンドは--clean
オプションを指定しない限り、変更のあったファイルのみを更新します。
--clean
ドキュメントの変更の有無に関わらず、ゼロからすべてのドキュメントのインデックスを再生成します。
--usages
サンプルファイルで使用されているノードに関する情報を生成します。
--config=path
(オプション) コンフィグオプションを読み込むファイル。
--logfile=path
(オプション) サーバーログの書き出し先のファイル。
--loglevel=DEBUG|INFO|WARNING|ERROR
(オプション) この重要度レベルでメッセージをログにします。
Hythonからサーバーを起動する ¶
コードでビルトインのサーバーを起動したい場合:
from houdinihelp.server import start_server start_server( host="0.0.0.0", # Listenするネットワークインターフェース port=8080, # Listenするポート debug=False, # サーバーをデバッグモードで実行させるかどうか bgindex=None , # バックグラウンドインデックスを行なうかどうか config_file=None, # コンフィグファイルまでの文字列パス use_houdini_path=True, # 以下を参照してください )
-
config_file
がNone
でuse_houdini_path
がTrue
の場合には、そのコードはhou
を使用して、Houdiniパスからconfig/Help/bookish.cfg
コンフィグファイルを検索します(以下のコンフィグを参照してください)。これはhou
がまだインポートされていない時にバッチライセンスを使用します。その引数にコンフィグファイルを指定していれば、このことについて心配する必要はありません。 -
bgindex
キーワード引数には、True
,False
,None
を指定することができます。None
は、設定ファイルの値を使用し、True
またはFalse
は、その設定を上書きするかどうかです。
より高速: プロキシサーバーを使用する ¶
nginx
やuwsgi
などの小さなウェブサーバーアプリケーションをインストールして起動し、そのアプリケーションを使ってヘルプの静的ファイルを直接提供したり、ヘルプページのリクエストをヘルプサーバーに“中継”(プロキシ)させることができます。
-
セットアップが比較的簡単。
-
スタンドアローンサーバーがほとんどのファイル(画像、スタイルシートなど)を処理するので、デフォルトのヘルプサーバーよりも非常に高速です。
-
変わらずHoudiniパス外にあるヘルプファイル、ノードやツールなどに埋め込まれたヘルプから動的なwikiヘルプを提供することができます。
-
ページコンテンツのリクエストは変わらずヘルプサーバーを経由するので処理能力が限定されます。
セントラルサーバーディレクトリをセットアップする ¶
プロキシサーバーをセットアップするには、以下の手順を踏みます:
-
上記で説明しているように
hhelp serve
を使ってヘルプサーバープロセスを起動します。 -
セントラルサーバー用ディレクトリを作成し、その中に、静的ファイル用ディレクトリを作成します:
% mkdir central central/files % cd central
-
静的ヘルプファイル(画像やスタイルシートなど)を
central/files
ディレクトリにコピーします。(一部のファイルは
.zip
ファイルに圧縮されています。目的のファイルを指定してコピーするのは面倒なので、そのzipファイル内のすべてのファイルを1箇所にコピーします。)% mkdir files/icons files/images files/static % unzip $HFS/houdini/help/icons.zip -d files/icons % unzip $HFS/houdini/help/images.zip -d files/images % cp -r $HFS/houdini/help/videos videos % cp -r $HFS/houdini/python2.7libs/bookish/static/* static % cp -r $HFS/houdini/python2.7libs/houdinihelp/static/* static
(
$HFS/houdini/python2.7libs
内のbookish/static
とhoudinihelp/static
の内容をcentral
下のfiles/static
単一ディレクトリにマージしていることに注意してください。) -
central
ディレクトリの絶対パスが設定された環境変数を作成します。例:
export CENTRAL=/home/username/central
(これは必ずしも必須ではありませんが、下記の例では便宜的にその
central
のディレクトリパスを示した$CENTRAL
を使用しています。)
プロキシサーバーをセットアップする ¶
-
スタンドアローンのHTTPサーバーをインストールします。
この手順は、あなたが使用したいHTTPサーバーに依存します。 私どもは
nginx
などの軽量サーバーを推奨しています。システム上にサーバーソフトウェアをインストールする方法は、このドキュメントの範囲を超えています。 プラットフォーム別にサーバーソフトウェアをインストールする方法は、そのドキュメントを参照してください。 一般的に、Linuxでは、ディストリビューションのパッケージマネージャを使うことで
nginx
をインストールすることができます。 Macでは、まず最初にHomebrewをインストールしてから、そのHomebrewを使ってnginx
をインストールすることができます。 -
HTTPサーバーが静的ファイルを直接提供し、他のリクエストをヘルプサーバーに中継させるようにセットアップします。
これは、あなたが使用しているHTTPサーバーとその設定方法に大きく依存します。 以下の例を参照してください。
nginxの例 ¶
以下はnginx
のコンフィグレーションファイルの例です。
このファイルをcentral
ディレクトリに保存することができます。
proxy.nginx
コンフィグレーションファイル
worker_processes 4; daemon off; error_log stderr; http { include /usr/local/etc/nginx/mime.types; server { listen 0.0.0.0:9090; location ~ ^/(images|icons|videos|static)/ { root $CENTRAL/files; } location / { proxy_pass http://localhost:8080/; } } } events { worker_connections 1024; }
(利用可能な設定の全リストは、nginx
のドキュメントを参照してください。)
-
この例では、サーバーが別プロセスを即座にフォークして返さないように
daemon off
を設定しているので、そのエラーメッセージと他の出力を確認することができます。目的通りにサーバーをセットアップすることができたら、サーバーがバックグラウンドで実行できるように、これをon
に変更してください。nginx -s reload
を使用すればそのコンフィグファイルをリロードすることができ、nginx -s stop
を使用すればサーバーを停止することができます。 -
include /usr/local/etc/nginx/mime.types;
の行は、インストール方法によって異なります。 nginxのmime.types
ファイルがインストールされている場所をチェックして、そのパスを指定してください。 -
listen 0.0.0.0:9090
の行には、nginx
サーバーがリッスンするIPアドレス/ポートを設定します。 これは、ヘルプサーバーがリッスンしているポート(上記の例では8080
)と 異なる ポートを設定してください。(
localhost
や127.0.0.1
とは違って)0.0.0.0
のリッスンは、ネットワーク上の他のコンピュータがこのサーバーにアクセスできることを意味します。 -
root $CENTRAL/files;
の行には、上記で作成したcentral
ディレクトリの絶対パスを指定してください。 このパスには、ホームディレクトリを意味するチルダ(~
)を使用することが できません 。 -
proxy_pass http://localhost:8080/;
の行には、ヘルプサーバーのルートURLを指定してください。
このコンフィグレーションを使ってnginx
を起動することができます:
% nginx -c $CENTRAL/proxy.nginx
コンフィグファイルの絶対パスを指定しなければならないことに注意してください。
絶対パスを指定しなかった場合、nginx
は現行ディレクトリではなくてインストールディレクトリを基準にコンフィグファイルを検索します。
もう一度言いますが、このパスには、ホームディレクトリを意味するチルダ(~
)を使用することができません。
これで、ブラウザにURLを指定することで、そのサーバーにアクセスすることができます:
http://localhost:9090/
さらに高速: WSGIアプリケーションサーバーを使用したアプリケーションを用意する ¶
上記のプロキシサーバーの例は、hhelp
を使っていつものHoudiniヘルプサーバーを起動してから必要に応じてヘルプサーバーにリクエストを転送することができるので比較的セットアップが簡単です。
しかし、この欠点は、HTTPを介してヘルプサーバーと通信するには幾分非効率であり、そのPythonヘルプサーバーは単一プロセス/単一スレッドで処理能力が限定されます。
ヘルプサーバーを起動してリクエストをそのサーバーに転送する方法とは違って、このソリューションは、uwsgi
、gunicorn
、modwsgi
によるApacheなどの WSGIアプリケーションサーバー を使用して、Houdiniヘルプのアプリケーションコード自体を実行するので、マルチプロセス/マルチスレッドで処理をすることができます。
WSGIは、スタンドアローンのHTTPサーバーがPython関数を実行して動的なウェブコンテンツを生成可能にするプロトコルです。
この欠点は、そのサーバーが通常のPythonインタープリタ自体を起動する必要があるので、Houdiniのライブラリのパスが自動的にセットアップされたhython
に頼ることができないことです。
このセクションに載せているapplication.py
は、Houdiniヘルプアプリケーションが通常のPythonを実行できるようにPythonパスを制御します。
-
通常のヘルプサーバーまたはプロキシサーバーのソリューションよりも高速です。
-
指定したディレクトリから動的なwikiヘルプを提供することができます。
-
Houdiniライセンスが不要です。
-
(Houdiniのライブラリが使用できるように自動的にPythonパスをセットアップする)
hython
を使用することができないのでセットアップが若干難しいです。 -
hou
を使用することができないので、このソリューションでは、アセットやツールに埋め込まれているヘルプを提供することができません。
Note
$HFS
変数などの環境変数が利用できるようにするために、Houdiniシェル環境内でサーバーを起動してください。
アプリケーションサーバーをセットアップする ¶
-
まず最初に、上記のセントラルサーバーディレクトリのセットアップのとおりにディレクトリ構造をセットアップします。
以下のようなディレクトリ構造にしてください:
central/ files/ icons/ ... images/ ... videos/ ... static/ ...
-
アプリケーションサーバーでは、サーバーページをコールする
application()
関数を生成するスクリプトが必要です。アプリケーションサーバーは、
hython
ではなくPythonを使ってスクリプトを実行するので、Houdiniライブラリが自動的に利用可能になりません。以下の例のスクリプトは、Houdiniのライブラリが見つかるようにPythonパスを制御し、
application()
関数を生成する前にアプリケーションが$HFS
下のファイルを見つけられるように設定します。これを
central
下にapplication.py
という名前のファイルに保存します。central/application.py
スクリプトの例import logging import sys from os.path import expandvars # PythonパスにHoudiniライブラリを追加します。 sys.path.append(expandvars("$HFS/houdini/python2.7libs")) # Houdiniのサードパーティ製Pythonライブラリを追加します。残念ながら、このパスはプラットフォーム依存です。 if sys.platform in ("linux", "linux2"): sys.path.append(expandvars("$HFS/python/lib/python2.7/site-packages-forced")) elif sys.platform == "darwin": sys.path.append( expandvars( "$HFS/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages-forced" ) ) elif sys.platform in ("win32", "win64"): sys.path.append(expandvars("$HFS/python27/lib/site-packages-forced")) from houdinihelp.hconfig import HoudiniHfsConfig from houdinihelp.server import get_houdini_app class MyConfig(HoudiniHfsConfig): # 提供元となるディレクトリ DOCUMENTS = [ # $HFS/houdini/help下にあるファイルを"展開"(Zip解凍)します。 expandvars("$HFS/houdini/help"), { # これは、$HFS/houdini/help内の.zipファイルからドキュメントを読み込めるようにします。 "type": "object", "classname": "bookish.stores.ZipTree", "args": { "dirpath": expandvars("$HFS/houdini/help"), } }, # これは、ユーザープリファレンスディレクトリ内のhelpディレクトリ下のファイルを追加します。 expandvars("$HOUDINI_USER_PREF_DIR/help"), # サーバーに追加したい他のディレクトリをここに追加します。 # "/my/dir", ] # ユーザープリファレンスディレクトリ内にキャッシュを保存します。 CACHE_DIR = expandvars("$HOUDINI_USER_PREF_DIR/config/Help/cache") # Houdiniに同梱されているフルテキストインデックス。 # バックグラウンドインデックスを使用したいのであれば、このディレクトリを書き込み可能な場所にコピーして、 # その書き込み可能ディレクトリのパスをここに設定してください。 INDEX_DIR = expandvars("$HFS/houdini/config/Help/index") # サーバーがバックグラウンドでインデックス化スレッドを実行するようにさせたいのであればTrueを設定します。 ENABLE_BACKGROUND_INDEXING = False # バックグラウンドインデックスが実行される間隔の秒数。 BACKGROUND_INDEXING_INTERVAL = 60 # houを使用しないページマネージャを指定します。 PAGES_CLASS = "houdinihelp.hpages.HoudiniPagesWithoutHou" application = get_houdini_app( use_houdini_path=False, config_obj=MyConfig, loglevel=logging.INFO, debug=False, )
-
WSGIアプリケーションサーバーをインストールします。
この手順は、あなたが使用したいアプリケーションサーバーに依存します。 私どもは
uwsgi
などの軽量サーバーを推奨しています。システム上にサーバーソフトウェアをインストールする方法は、このドキュメントの範囲を超えています。 プラットフォーム別にサーバーソフトウェアをインストールする方法は、そのドキュメントを参照してください。
uwsgi
に関しては、Pythonのpip3
パッケージマネージャ(pip3 install uwsgi
)を使ってインストールすることができます。 これは、基本プログラムだけでなく必要なすべてのプラグインもインストールされるので、uwsgi
に最適なインストール方法です。 -
WSGIアプリケーションサーバーが静的ファイルを直接提供し、
application.py
スクリプトを使って動的なヘルプページを提供するようにセットアップします。これは、あなたが使用しているアプリケーションサーバーとその設定方法に大きく依存します。 WSGI機能の扱い方と静的ディレクトリの指定方法の詳細は、あなたのアプリケーションサーバーのドキュメントを参照してください。
uwsgiの例 ¶
以下のコマンドは、uwsgi
をHTTPサーバーとして起動し、リッスンするアドレス/ポートを設定し、(上記でセットアップした)静的ファイルの提供元となるディレクトリを指定し、このアプリケーションのWSGI関数を生成するスクリプトの場所を指定します:
% uwsgi --http 0.0.0.0:9090 --check-static $CENTRAL/files $CENTRAL/application.py
最速: 静的ヘルプを提供する ¶
-
最速で最も堅牢なソリューションです。
-
どのHTTPサーバーも使用することができ、アプリケーションの設定が不要です。
-
Houdiniライセンスが不要です。
-
静的ページのみを提供し、動的wikiページは提供しません(つまり、wikiヘルプファイルを編集してもブラウザでリロードしてその結果を即座に確認することができません)。
-
検索機能なし!
すべてのヘルプファイルを事前生成する ¶
-
まず最初に、上記のセントラルサーバーディレクトリのセットアップのとおりにディレクトリ構造をセットアップします。
以下のようなディレクトリ構造にしてください:
central/ files/ icons/ ... images/ ... videos/ ... static/ ...
-
Houdiniシェルで、
cd
コマンドを使ってcentral
ディレクトリに移動します。 -
以下のコマンドを実行します:
hhelp generate files
これは、Houdiniヘルプ内のすべてのwikiファイルから静的なHTMLファイルを生成します。 これには時間がかかります。
-
一度HTMLファイルを生成すれば、どのHTTPサーバーでも
central/files
内のファイルを提供するようにすることができます。
ヘルプサーバーの設定 ¶
-
hhelp
コマンドラインユーティリティで--config
オプションを使ってコンフィグレーションファイルを指定することができます。 または、houdinihelp.server.get_houdini_app
やhoudinihelp.server.start_server
のconfig_file
パラメータを使ってコード内でコンフィグレーションファイルを指定することもできます。 -
コンフィグレーションファイルを指定しない、且つ、
HOUDINIPATH/config/Help/bookish.cfg
が存在する場合、(use_houdini_path=False
を渡さない限り)サーバーはそのファイルを読みに行きます。 -
ヘルプサーバーはFlaskベースです。Flaskのコンフィグレーションファイルは実際はPythonです。
例えば、$HOME/myfiles
にあるファイルのディレクトリを追加するには、コンフィグレーションファイルに以下のステートメントを追加します:
EXTRA_DOCUMENTS = ["$HOME/myfiles/"]
役に立ついくつかのコンフィグレーションキーは、以下を参照してください。
役に立つコンフィグレーションキー ¶
DOCUMENTS = [...]
ドキュメントソースのデフォルトのリストには、Houdiniパスのhelp
ディレクトリ、さらには、アセットとシェルフツール内部のヘルプの読み込みを可能にする特別なソースが含まれています。
このリストを、ディレクトリ のみ を提供できるようにディレクトリパスのリストに置換することができます。例:
DOCUMENTS = ["/my/dir"]
置換の代わりに、コンフィグレーションファイル内でこのリストを拡張することもできますが、その場合、EXTRA_DOCUMENTS
を使用した方が簡単です(以下参照)。
EXTRA_DOCUMENTS = []
デフォルトのDOCUMENTS
に加える“追加”ドキュメントソースのリスト。
これは、デフォルトのドキュメントだけでなく、いくつか追加でディレクトリを提供したい時に役立ちます。
(このデフォルトのリストにはHOUDINIPATH/help
が含まれているので、Houdiniパスを拡張することでも同様の事ができます。)
EXTRA_DOCUMENTS = ["/my/dir"]
ENABLE_BACKGROUND_INDEXING = False
変更のあったコンテンツの再インデックス化をするためにバックグラウンドでスレッドを実行するかどうかを指定します。
これは、コマンドラインの--bgindex
オプションで上書きすることができます。
BACKGROUND_INDEXING_INTERVAL = 60
バックグラウンドインデックスが有効な時に再インデックス化する間隔の秒数。
EXTRA_SHORTCUTS = []
検索ショートカットを参照してください。
CACHE_DIR = "$HOUDINI_USER_PREF_DIR/config/Help"
wikiソースファイルから生成された.json
ファイルをサーバーがキャッシュ化する場所。
INDEX_DIR = "$HFS/houdini/config/Help/index"
検索インデックスを含んだディレクトリ。