Changes between Version 2 and Version 3 of TracFastCgi
- Timestamp:
- Jun 17, 2013, 1:35:49 PM (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TracFastCgi
v2 v3 1 [[PageOutline]] 2 1 3 = Trac を FastCGI で使用する = #TracwithFastCGI 2 4 3 [http://www.fastcgi.com/ FastCGI] インタフェースを使用すると [wiki:TracModPython mod_python] 同様に Trac を常駐させることができます。そのため、外部からのリクエストごとに新しいプロセスを生成する CGI インタフェースよりも処理速度は速くなるうえ、 mod_python では実現出来ない [http://httpd.apache.org/docs/suexec.html Apache の SuEXEC] に対応させることができます (例えば、 Web サーバとは異なる権限で起動させることができます)。また、 mod_python より多くの種類の Web サーバでサポートされています。 4 5 '''Windows 向けの Note:''' Trac の FCGI は Windows では使用できません。 `_fcgi.py` が必要とする `Socket.fromfd` が Windows では実装されていないためです。 IIS を使用しているのであれば、 [http://trac.edgewall.org/wiki/TracOnWindowsIisAjp AJP] を使うこともできます。 (訳注: Apache でも mod_proxy_ajp 経由で ajp を使用できます。) 5 [http://www.fastcgi.com/ FastCGI] インターフェースを使用すると [wiki:TracModPython mod_python] や [wiki:TracModWSGI mod_wsgi] と同様に Trac を常駐させることができます。リクエスト毎に新しいプロセスを開始しなければならない CGI インターフェースよりも処理速度は速くなります。加えて、多種多様の Web サーバでサポートされています。 6 7 Note: mod_python とは異なり、FastCGI では [http://httpd.apache.org/docs/suexec.html Apache SuEXEC] をサポートしています。つまり、Web サーバを実行しているユーザとは、異なる権限でプログラムを実行することができます。(`mod_wsgi` でサポートしている `WSGIDaemonProcess` におけるユーザ / グループと同じ効果を得ることができます) 8 9 '''Windows 向け:''' Trac の FastCGI は Windows 環境下で動作しません。これは、`_fcgi.py` で用いられる `Socket.fromfd` が Windows では実行されないからです。もし IIS へ接続したい場合は、[trac:TracOnWindowsIisAjp AJP]/[trac:TracOnWindowsIisAjp ISAPI] に挑戦してみて下さい。 10 11 [[PageOutline(2-3,Overview,inline)]] 12 6 13 7 14 == 単純な Apache の設定 == #SimpleApacheconfiguration … … 10 17 `mod_fcgid` (推奨) です。後者の方がよりメンテナンスされています。 11 18 12 ==== `mod_fastcgi` でのセットアップ ==== #setupwithmod_fastcgi 19 次の項目では、FCGI の特定のセットアップに焦点を合わせています。Apache の認証の設定方法については [wiki:TracModWSGI#ConfiguringAuthentication] を参照してください。 20 21 CGI モジュールを使用する場合は注意してください。また、必ず Web サーバに cgi-bin フォルダの実行権限を持たせてください。 FastCGI では詳細な権限に関するエラーが出力されますが、mod_fcgid ではこの処理が行われていない場合には、不明瞭なエラーしか出力されません。(Connection reset by peer: mod_fcgid: error reading data from FastCGI server の様な) 22 23 === `mod_fastcgi` でのセットアップ === #setupwithmod_fastcgi 13 24 `mod_fastcgi` では `FastCgiIpcDir` と `FastCgiConfig` ディレクティブを使用して Apache の設定ファイルに設定を行います: 14 25 {{{ … … 18 29 <IfModule mod_fastcgi.c> 19 30 AddHandler fastcgi-script .fcgi 20 FastCgiIpcDir /var/lib/apache2/fastcgi 31 FastCgiIpcDir /var/lib/apache2/fastcgi 21 32 </IfModule> 22 33 LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so … … 27 38 `trac.cgi` の代わりに `trac.fcgi` を指定してください。 28 39 29 `TRAC_ENV` を以下のように設定することができます:40 すべてデフォルトで `TRAC_ENV` をセットアップするつもりならば、Apache の設定ファイルに以下を追加します (`FastCgiIpcDir` より下に): 30 41 {{{ 31 42 FastCgiConfig -initial-env TRAC_ENV=/path/to/env/trac 32 43 }}} 33 44 34 複数の Trac プロジェクトを扱っているときは、このように設定します:45 あるいは、以下を追加することで複数の Trac プロジェクトを提供できます: 35 46 {{{ 36 47 FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects 37 48 }}} 38 49 39 === = `mod_fcgid` でのセットアップ ==== #setupwithmod_fcgid50 === `mod_fcgid` でのセットアップ === #Setupwithmod_fcgid 40 51 `ScriptAlias` を設定します。 (詳細は TracCgi を参照してください)、 ただし 41 `trac.cgi` の代わりに `trac.fcgi` を呼び出します。 Note: 最後のスラッシュを忘れずに。とても重要です。52 trac.cgi` の代わりに `trac.fcgi` を呼び出します。 Note: 最後のスラッシュを忘れずに。とても重要です。 42 53 {{{ 43 54 ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/ … … 47 58 ディレクティブを使用します。このディレクティブは `Direcotry` や `Location` 48 59 コンテキストで使用できないので、複数のプロジェクトを設定する場合、 49 下に記述する Environment を設定する別の方法を試してください。60 以下に記述する Environment を設定する別の方法を試してください。 50 61 51 62 {{{ … … 53 64 }}} 54 65 55 === = Environment を設定する別の方法 ==== #alternativeenvironmentsetup66 === Environment を設定する別の方法 === #alternativeenvironmentsetup 56 67 Trac environment へのパスを設定するための、より適した方法は、パスを 57 68 `trac.fcgi` スクリプト自体に書き込むことです。これによってサーバの環境変数を … … 93 104 94 105 そして、 Trac にアクセスするために SCGI ハンドラによって管理される新しいルールを作成しなければなりません。このルールは例えば、 trac.example.net という新しい仮想サーバ内で作成し、 2 つのルールのみを必要とします。 '''デフォルト''' ルールは以前に作成された information source に関する SCGI ハンドラで使用されます。 95 2 つ目のルールは Trac のインタフェースを正しく表示するために必要ないくつかの静的ファイルを扱うために設定します。ルールを ''/c hrome/common'' の ''ディレクトリルール'' として作成し、 ''静的ファイル'' のハンドラを適切なファイルをポイントする ''ドキュメントルート'' と共に設定するだけです: ''/usr/share/trac/htdocs/''106 2 つ目のルールは Trac のインタフェースを正しく表示するために必要ないくつかの静的ファイルを扱うために設定します。ルールを ''/common'' の ''ディレクトリルール'' として作成し、 ''静的ファイル'' のハンドラを適切なファイルをポイントする ''ドキュメントルート'' と共に設定するだけです: ''$TRAC_LOCAL/htdocs/'' ($TRAC_LOCAL はユーザ又はローカル Trac リソース を置いたシステム管理者により定義されたディレクトリです) 96 107 97 108 Note:\\ … … 102 113 }}} 103 114 115 104 116 == Lighttpd の簡単な設定 == #SimpleLighttpdConfiguration 105 117 … … 114 126 var.fcgi_binary="/path/to/cgi-bin/trac.fcgi" # 0.10 name of prior fcgi executable 115 127 fastcgi.server = ("/trac" => 116 128 117 129 ("trac" => 118 130 ("socket" => "/tmp/trac-fastcgi.sock", … … 126 138 }}} 127 139 128 動かしたい Trac のインスタンス毎に `fastcgi.server` のエントリを追加する必要があります。別の方法として、上記の `TRAC_ENV` の代わりに `TRAC_ENV_PARENT_DIR` を使用でき、 129 `lighttpd.conf` に設定する代わりに `trac.fcgi` ファイルに 140 動かしたい Trac のインスタンス毎に `fastcgi.server` のエントリを追加する必要があります。別の方法として、上記の `TRAC_ENV` の代わりに `TRAC_ENV_PARENT_DIR` を使用でき、 141 `lighttpd.conf` に設定する代わりに `trac.fcgi` ファイルに 130 142 `bin-environment` (上記の Apache の設定 に書かれています) の2つのうちのどちらかを設定します。 131 143 132 Note: lighttpd には fastcgi.server の uri が例えばこの例では、 '/trac' とするところを '/' としてしまう 'SCRIPT_NAME' と 'PATH_INFO' に関するバグがあります。詳細については、 [http://trac.edgewall.org/ticket/2418 本家チケット 2418] を参照して下さい。このバグは lighttpd 1.4.23 以降で修正されています。 fastcgi.server のパラメータとして、 `"fix-root-scriptname" => "enable"` を追加する必要があるでしょう。144 Note: lighttpd には 'SCRIPT_NAME' と 'PATH_INFO' に関するバグがあります。例として、 fastcgi.server の uri が '/trac' とするところを '/' としてしまいます。 ([trac:#2418 本家チケット 2418] 参照) このバグは lighttpd 1.4.23 以降で修正されています。 fastcgi.server のパラメータとして、 `"fix-root-scriptname" => "enable"` を追加する必要があるでしょう。 133 145 134 146 lighttpd で2つのプロジェクトを動かすには、 `lighttpd.conf` に以下の設定を追加します: … … 154 166 ) 155 167 }}} 156 Note: 各フィールドの値が異なることに注意して下さい。もし、 168 Note: 各フィールドの値が異なることに注意して下さい。もし、 157 169 `.fcgi` スクリプト内の環境変数を設定する方が好ましいならば、 `trac.fcgi` スクリプトを 158 170 例えば、 `first.fcgi` や `second.fcgi` というようにコピー / リネームして、上記設定の中でこれらのスクリプトを参照するようにしてください。 159 171 両方のプロジェクトが同じ `trac.fcgi` スクリプトから起動しているとしても、 160 172 異なるプロセスになることに注意して下さい。 173 161 174 {{{ 162 175 #!div class=important 163 176 '''Note''': server.modules をロードする順番はとても重要です。もし、 mod_auth が mod_fastcgi より '''先に''' mod_auth がロードされない設定になっていない場合、サーバはユーザ認証に失敗します。 164 177 }}} 178 165 179 認証のために lighttpd.conf の 'server.modules' 中で mod_auth を有効にして、 auth.backend と認証方法を選択して下さい: 166 180 {{{ … … 205 219 Note: バージョン 1.3.16 以前では lighttpd は 'valid-user' をサポートしていないので注意してください。 206 220 207 条件付の設定は静的リソースをマッピングするときに便利です。例として FastCGI を経由せずに直接イメージファイルや CSS を参照するときなどです 。:221 条件付の設定は静的リソースをマッピングするときに便利です。例として FastCGI を経由せずに直接イメージファイルや CSS を参照するときなどです: 208 222 {{{ 209 223 # Aliasing functionality is needed 210 224 server.modules += ("mod_alias") 211 225 212 # Set up an alias for the static resources226 # Set up an alias for the static resources 213 227 alias.url = ("/trac/chrome/common" => "/usr/share/trac/htdocs") 214 228 … … 276 290 使用言語指定の詳細については [http://trac.lighttpd.net/trac/wiki/TracFaq TracFaq] の 2.13 の質問を参照して下さい。 277 291 278 その他重要な情報、例えば、 [http://trac.lighttpd.net/trac/wiki/TracInstall lighttpd の TracInstall] や、 [wiki:TracCgi#MappingStaticResources TracCgi] などは fast-cgi 固有ではありませんが、インストールの詳細をつかむのに有用でしょう。 279 280 trac-0.9 を使用している場合、[http://lists.edgewall.com/archive/trac/2005-November/005311.html 些細なバグ] について読んでください。 292 [wiki:TracInstall#MappingStaticResources 静的なリソースのマッピングに関する事] の様な他の重要な情報は、fastcgi 以外でもインストールの詳細をつかむのに有効です。 293 ] 281 294 282 295 lighttpd を再起動し、ブラウザに `http://yourhost.example.org/trac` を入力して、 Trac にアクセスして下さい。 … … 284 297 制限された権限で lighttpd を起動するにあたって気をつけること: 285 298 286 299 もし、 trac.fcgi が lighttpd の設定で `server.username = "www-data"` や `server.groupname = "www-data"` を設定しても起動せずどうしようもないときは、 `bin-environment` セクションの `PYTHON_EGG_CACHE` を `www-data` のホームディレクトリまたは `www-data` アカウントで書き込みが可能なディレクトリに設定して下さい。 (訳注: debian 系 Linux に限定した話だと思われます。 `www-data` は lighttpd を起動するユーザに適宜読み替えてください。) 287 300 288 301 … … 293 306 !LiteSpeed Web サーバはイベント駆動、非同期型であり、 Apache に代わるものとしてセキュアで拡張可能になるようにゼロからデザインされています。そして、最低限のリソースで操作できます。 !LiteSpeed は Apache の設定ファイルから直接操作でき、ビジネスに不可欠な環境をターゲットにしています。 294 307 295 === セットアップ === 296 297 1. 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します。 308 1. 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します 298 309 299 310 2. このセットアップでは仮想ホストを作成します。以下、この仮想ホストのことを !TracVhost と呼びます。このチュートリアルで、先ほど作ったプロジェクトが以下の URL 経由でアクセスできると仮定します: … … 303 314 }}} 304 315 305 3. "!TracVhost → External Apps" タブへ移動し、新しい "External Application" を作成します 。306 307 {{{ 308 Name: MyTracFCGI 316 3. "!TracVhost → External Apps" タブへ移動し、新しい "External Application" を作成します 317 318 {{{ 319 Name: MyTracFCGI 309 320 Address: uds://tmp/lshttpd/mytracfcgi.sock 310 321 Max Connections: 10 … … 314 325 Persistent Connection Yes 315 326 Connection Keepalive Timeout: 30 316 Response Bufferring: No 327 Response Bufferring: No 317 328 Auto Start: Yes 318 329 Command: /usr/share/trac/cgi-bin/trac.fcgi <--- path to trac.fcgi … … 321 332 }}} 322 333 323 4. (非必須) htpasswd ベースの認証を使用するならば、 "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます 。334 4. (非必須) htpasswd ベースの認証を使用するならば、 "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます 324 335 325 336 {{{ … … 331 342 もし、 htpasswd ファイルを持っていない、もしくは作り方を知らない場合は、 http://sherylcanter.com/encrypt.php にアクセスし、ユーザ名:パスワード の一対を生成して下さい。 332 343 333 5. "!PythonVhost → Contexts" へ移動し、新しい "FCGI Context" を作成します 。334 335 {{{ 336 URI: /trac/ <--- URI path to bind to python fcgi app we created 344 5. "!PythonVhost → Contexts" へ移動し、新しい "FCGI Context" を作成します 345 346 {{{ 347 URI: /trac/ <--- URI path to bind to python fcgi app we created 337 348 Fast CGI App: [VHost Level] MyTractFCGI <--- select the trac fcgi extapp we just created 338 349 Realm: TracUserDB <--- only if (4) is set. select realm created in (4) 339 350 }}} 340 351 341 6. /fullpathto/mytracproject/conf/trac.ini を修正します 。352 6. /fullpathto/mytracproject/conf/trac.ini を修正します 342 353 343 354 {{{ … … 348 359 }}} 349 360 350 7. !LiteSpeed を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします: 361 7. !LiteSpeed を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします: 351 362 352 363 {{{ … … 354 365 }}} 355 366 356 == Nginx 簡単な設定 == 357 358 1. Nginx 設定のスニペット - 0.6.32 で動作することを確認しました。 367 368 == Nginx 簡単な設定 == #SimpleNginxConfiguration 369 370 Nginx は FastCGI プロセスを生成することはできませんが、伝達することができます。そのため、 Trac を独立して FastCGI サーバを開始する必要があります。 371 372 1. 基本認証を行う Nginx の設定 - 0.6.32 で動作することを確認しました 359 373 {{{ 360 374 server { … … 375 389 if ($uri ~ ^/(.*)) { 376 390 set $path_info /$1; 391 } 392 393 # it makes sense to serve static resources through Nginx 394 location /chrome/ { 395 alias /home/trac/instance/static/htdocs/; 377 396 } 378 397 … … 403 422 fastcgi_param SERVER_PORT $server_port; 404 423 fastcgi_param SERVER_PROTOCOL $server_protocol; 405 fastcgi_param QUERY_STRING $query_string; 406 407 # for authentication to work 424 fastcgi_param QUERY_STRING $query_string; 425 426 # For Nginx authentication to work - do not forget to comment these 427 # lines if not using Nginx for authentication 408 428 fastcgi_param AUTH_USER $remote_user; 409 429 fastcgi_param REMOTE_USER $remote_user; 430 431 # for ip to work 432 fastcgi_param REMOTE_ADDR $remote_addr; 433 434 # For attchments to work 435 fastcgi_param CONTENT_TYPE $content_type; 436 fastcgi_param CONTENT_LENGTH $content_length; 410 437 } 411 438 } … … 424 451 import trac.web._fcgi 425 452 426 fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request, 453 fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request, 427 454 bindAddress = sockaddr, umask = 7) 428 455 fcgiserv.run() … … 449 476 450 477 {{{ 451 trac@trac.example ~ $ ./trac-standalone-fcgi.py 478 trac@trac.example ~ $ ./trac-standalone-fcgi.py 452 479 }}} 453 480 454 481 上記設定は以下の条件だと仮定します: 455 * trac のインスタンスを実行するためのユーザ名を 'trac' とします。ホームディレクトリに trac Environment をおきます 。456 * Trac environment は `/home/trac/instance` に配置します 。457 * `/home/trac/htpasswd` に認証情報が含まれています 。458 * `/home/trac/run` は nginx を起動しているグループが所有しています 。459 * Linux を使用しているならば、 `/home/trac/run` に (`chmod g+s run`) を設定します 。460 * [ http://trac.edgewall.org/ticket/7239 本家チケット 7239] のパッチを適用し、ソケットファイルのパーミッションをそのつど修正しなければいけません。461 462 残念ですが、 nginx は fastcgi_pass ディレクティブ内の変数展開をサポートしていません。 463 したがって、 1 つのサーバーブロックから複数の trac インスタンスを起動することができません。 482 * trac のインスタンスを実行するためのユーザ名を 'trac' とします。ホームディレクトリに trac Environment をおきます 483 * Trac environment は `/home/trac/instance` に配置します 484 * `/home/trac/htpasswd` に認証情報が含まれています 485 * `/home/trac/run` は nginx を起動しているグループが所有しています 486 * Linux を使用しているならば、 `/home/trac/run` に (`chmod g+s run`) を設定します 487 * [trac:#7239 本家チケット 7239] のパッチを適用し、ソケットファイルのパーミッションをそのつど修正しなければいけません 488 489 残念ですが、 nginx は fastcgi_pass ディレクティブ内の変数展開をサポートしていません。 490 したがって、 1 つのサーバーブロックから複数の trac インスタンスを起動することができません。 464 491 465 492 セキュリティ面で不安があるならば、 各 Trac インスタンスを別々のユーザで起動してください。 466 493 467 Trac を FCGI の外部アプリケーションとして起動するもう一つの方法は、[ http://trac.edgewall.org/ticket/6224 本家チケット 6224] を参照して下さい。494 Trac を FCGI の外部アプリケーションとして起動するもう一つの方法は、[trac:#6224 本家チケット 6224] を参照して下さい。 468 495 469 496 ---- 470 See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [ http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe]497 See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe]