Changes between Version 2 and Version 3 of TracFastCgi


Ignore:
Timestamp:
Jun 17, 2013, 1:35:49 PM (11 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracFastCgi

    v2 v3  
     1[[PageOutline]]
     2
    13= Trac を FastCGI で使用する = #TracwithFastCGI
    24
    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
     7Note: 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
    613
    714== 単純な Apache の設定 == #SimpleApacheconfiguration
     
    1017`mod_fcgid` (推奨) です。後者の方がよりメンテナンスされています。
    1118
    12 ==== `mod_fastcgi` でのセットアップ ==== #setupwithmod_fastcgi
     19次の項目では、FCGI の特定のセットアップに焦点を合わせています。Apache の認証の設定方法については [wiki:TracModWSGI#ConfiguringAuthentication] を参照してください。
     20
     21CGI モジュールを使用する場合は注意してください。また、必ず Web サーバに cgi-bin フォルダの実行権限を持たせてください。 FastCGI では詳細な権限に関するエラーが出力されますが、mod_fcgid ではこの処理が行われていない場合には、不明瞭なエラーしか出力されません。(Connection reset by peer: mod_fcgid: error reading data from FastCGI server の様な)
     22
     23=== `mod_fastcgi` でのセットアップ === #setupwithmod_fastcgi
    1324`mod_fastcgi` では `FastCgiIpcDir` と `FastCgiConfig` ディレクティブを使用して Apache の設定ファイルに設定を行います:
    1425{{{
     
    1829<IfModule mod_fastcgi.c>
    1930   AddHandler fastcgi-script .fcgi
    20    FastCgiIpcDir /var/lib/apache2/fastcgi 
     31   FastCgiIpcDir /var/lib/apache2/fastcgi
    2132</IfModule>
    2233LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
     
    2738`trac.cgi` の代わりに `trac.fcgi` を指定してください。
    2839
    29 `TRAC_ENV` を以下のように設定することができます:
     40すべてデフォルトで `TRAC_ENV` をセットアップするつもりならば、Apache の設定ファイルに以下を追加します (`FastCgiIpcDir` より下に):
    3041{{{
    3142FastCgiConfig -initial-env TRAC_ENV=/path/to/env/trac
    3243}}}
    3344
    34 複数の Trac プロジェクトを扱っているときは、このように設定します:
     45あるいは、以下を追加することで複数の Trac プロジェクトを提供できます:
    3546{{{
    3647FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects
    3748}}}
    3849
    39 ==== `mod_fcgid` でのセットアップ ==== #setupwithmod_fcgid
     50=== `mod_fcgid` でのセットアップ === #Setupwithmod_fcgid
    4051`ScriptAlias` を設定します。 (詳細は TracCgi を参照してください)、 ただし
    41 `trac.cgi` の代わりに `trac.fcgi` を呼び出します。 Note: 最後のスラッシュを忘れずに。とても重要です。
     52trac.cgi` の代わりに `trac.fcgi` を呼び出します。 Note: 最後のスラッシュを忘れずに。とても重要です。
    4253{{{
    4354ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/
     
    4758ディレクティブを使用します。このディレクティブは `Direcotry` や `Location`
    4859コンテキストで使用できないので、複数のプロジェクトを設定する場合、
    49 下に記述する Environment を設定する別の方法を試してください。
     60下に記述する Environment を設定する別の方法を試してください。
    5061
    5162{{{
     
    5364}}}
    5465
    55 ==== Environment を設定する別の方法 ==== #alternativeenvironmentsetup
     66=== Environment を設定する別の方法 === #alternativeenvironmentsetup
    5667Trac environment へのパスを設定するための、より適した方法は、パスを
    5768`trac.fcgi` スクリプト自体に書き込むことです。これによってサーバの環境変数を
     
    93104
    94105そして、 Trac にアクセスするために SCGI ハンドラによって管理される新しいルールを作成しなければなりません。このルールは例えば、 trac.example.net という新しい仮想サーバ内で作成し、 2 つのルールのみを必要とします。 '''デフォルト''' ルールは以前に作成された information source に関する SCGI ハンドラで使用されます。
    95 2 つ目のルールは Trac のインタフェースを正しく表示するために必要ないくつかの静的ファイルを扱うために設定します。ルールを ''/chrome/common'' の ''ディレクトリルール'' として作成し、 ''静的ファイル'' のハンドラを適切なファイルをポイントする ''ドキュメントルート'' と共に設定するだけです: ''/usr/share/trac/htdocs/''
     1062 つ目のルールは Trac のインタフェースを正しく表示するために必要ないくつかの静的ファイルを扱うために設定します。ルールを ''/common'' の ''ディレクトリルール'' として作成し、 ''静的ファイル'' のハンドラを適切なファイルをポイントする ''ドキュメントルート'' と共に設定するだけです: ''$TRAC_LOCAL/htdocs/'' ($TRAC_LOCAL はユーザ又はローカル Trac リソース を置いたシステム管理者により定義されたディレクトリです)
    96107
    97108Note:\\
     
    102113}}}
    103114
     115
    104116== Lighttpd の簡単な設定 == #SimpleLighttpdConfiguration
    105117
     
    114126var.fcgi_binary="/path/to/cgi-bin/trac.fcgi" # 0.10 name of prior fcgi executable
    115127fastcgi.server = ("/trac" =>
    116    
     128
    117129                   ("trac" =>
    118130                     ("socket" => "/tmp/trac-fastcgi.sock",
     
    126138}}}
    127139
    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` ファイルに
    130142`bin-environment` (上記の Apache の設定 に書かれています) の2つのうちのどちらかを設定します。
    131143
    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"` を追加する必要があるでしょう。
     144Note: lighttpd には 'SCRIPT_NAME' と 'PATH_INFO' に関するバグがあります。例として、 fastcgi.server の uri が '/trac' とするところを '/' としてしまいます。 ([trac:#2418 本家チケット 2418] 参照) このバグは lighttpd 1.4.23 以降で修正されています。 fastcgi.server のパラメータとして、 `"fix-root-scriptname" => "enable"` を追加する必要があるでしょう。
    133145
    134146lighttpd で2つのプロジェクトを動かすには、 `lighttpd.conf` に以下の設定を追加します:
     
    154166                )
    155167}}}
    156 Note: 各フィールドの値が異なることに注意して下さい。もし、 
     168Note: 各フィールドの値が異なることに注意して下さい。もし、
    157169`.fcgi` スクリプト内の環境変数を設定する方が好ましいならば、 `trac.fcgi` スクリプトを
    158170例えば、 `first.fcgi` や `second.fcgi` というようにコピー / リネームして、上記設定の中でこれらのスクリプトを参照するようにしてください。
    159171両方のプロジェクトが同じ `trac.fcgi` スクリプトから起動しているとしても、
    160172異なるプロセスになることに注意して下さい。
     173
    161174{{{
    162175#!div class=important
    163176'''Note''': server.modules をロードする順番はとても重要です。もし、 mod_auth が mod_fastcgi より '''先に''' mod_auth がロードされない設定になっていない場合、サーバはユーザ認証に失敗します。
    164177}}}
     178
    165179認証のために lighttpd.conf の 'server.modules' 中で mod_auth を有効にして、 auth.backend と認証方法を選択して下さい:
    166180{{{
     
    205219Note: バージョン 1.3.16 以前では lighttpd は 'valid-user' をサポートしていないので注意してください。
    206220
    207 条件付の設定は静的リソースをマッピングするときに便利です。例として FastCGI を経由せずに直接イメージファイルや CSS を参照するときなどです:
     221条件付の設定は静的リソースをマッピングするときに便利です。例として FastCGI を経由せずに直接イメージファイルや CSS を参照するときなどです:
    208222{{{
    209223# Aliasing functionality is needed
    210224server.modules += ("mod_alias")
    211225
    212 # Setup an alias for the static resources
     226# Set up an alias for the static resources
    213227alias.url = ("/trac/chrome/common" => "/usr/share/trac/htdocs")
    214228
     
    276290使用言語指定の詳細については [http://trac.lighttpd.net/trac/wiki/TracFaq TracFaq] の 2.13 の質問を参照して下さい。
    277291
    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]
    281294
    282295lighttpd を再起動し、ブラウザに `http://yourhost.example.org/trac` を入力して、 Trac にアクセスして下さい。
     
    284297制限された権限で lighttpd を起動するにあたって気をつけること:
    285298
    286   もし、 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 を起動するユーザに適宜読み替えてください。)
     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 を起動するユーザに適宜読み替えてください。)
    287300
    288301
     
    293306!LiteSpeed Web サーバはイベント駆動、非同期型であり、 Apache に代わるものとしてセキュアで拡張可能になるようにゼロからデザインされています。そして、最低限のリソースで操作できます。 !LiteSpeed は Apache の設定ファイルから直接操作でき、ビジネスに不可欠な環境をターゲットにしています。
    294307
    295 === セットアップ ===
    296 
    297  1. 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します。
     308 1. 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します
    298309
    299310 2. このセットアップでは仮想ホストを作成します。以下、この仮想ホストのことを !TracVhost と呼びます。このチュートリアルで、先ほど作ったプロジェクトが以下の URL 経由でアクセスできると仮定します:
     
    303314}}}
    304315
    305  3. "!TracVhost → External Apps" タブへ移動し、新しい "External Application" を作成します
    306 
    307 {{{
    308 Name: MyTracFCGI       
     316 3. "!TracVhost → External Apps" タブへ移動し、新しい "External Application" を作成します
     317
     318{{{
     319Name: MyTracFCGI
    309320Address: uds://tmp/lshttpd/mytracfcgi.sock
    310321Max Connections: 10
     
    314325Persistent Connection   Yes
    315326Connection Keepalive Timeout: 30
    316 Response Bufferring: No 
     327Response Bufferring: No
    317328Auto Start: Yes
    318329Command: /usr/share/trac/cgi-bin/trac.fcgi  <--- path to trac.fcgi
     
    321332}}}
    322333
    323  4. (非必須) htpasswd ベースの認証を使用するならば、 "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます
     334 4. (非必須) htpasswd ベースの認証を使用するならば、 "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます
    324335
    325336{{{
     
    331342もし、 htpasswd ファイルを持っていない、もしくは作り方を知らない場合は、 http://sherylcanter.com/encrypt.php にアクセスし、ユーザ名:パスワード の一対を生成して下さい。
    332343
    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{{{
     347URI: /trac/                              <--- URI path to bind to python fcgi app we created
    337348Fast CGI App: [VHost Level] MyTractFCGI  <--- select the trac fcgi extapp we just created
    338349Realm: TracUserDB                        <--- only if (4) is set. select realm created in (4)
    339350}}}
    340351
    341  6. /fullpathto/mytracproject/conf/trac.ini を修正します
     352 6. /fullpathto/mytracproject/conf/trac.ini を修正します
    342353
    343354{{{
     
    348359}}}
    349360
    350  7. !LiteSpeed を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします: 
     361 7. !LiteSpeed を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします:
    351362
    352363{{{
     
    354365}}}
    355366
    356 == Nginx 簡単な設定 ==
    357 
    358  1. Nginx 設定のスニペット - 0.6.32 で動作することを確認しました。
     367
     368== Nginx 簡単な設定 == #SimpleNginxConfiguration
     369
     370Nginx は FastCGI プロセスを生成することはできませんが、伝達することができます。そのため、 Trac を独立して FastCGI サーバを開始する必要があります。
     371
     372 1. 基本認証を行う Nginx の設定 - 0.6.32 で動作することを確認しました
    359373{{{
    360374    server {
     
    375389        if ($uri ~ ^/(.*)) {
    376390             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/;
    377396        }
    378397
     
    403422            fastcgi_param  SERVER_PORT        $server_port;
    404423            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
    408428            fastcgi_param  AUTH_USER          $remote_user;
    409429            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;
    410437        }
    411438    }
     
    424451     import trac.web._fcgi
    425452
    426      fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request, 
     453     fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request,
    427454          bindAddress = sockaddr, umask = 7)
    428455     fcgiserv.run()
     
    449476
    450477{{{
    451 trac@trac.example ~ $ ./trac-standalone-fcgi.py 
     478trac@trac.example ~ $ ./trac-standalone-fcgi.py
    452479}}}
    453480
    454481上記設定は以下の条件だと仮定します:
    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 インスタンスを起動することができません。
    464491
    465492セキュリティ面で不安があるならば、 各 Trac インスタンスを別々のユーザで起動してください。
    466493
    467 Trac を FCGI の外部アプリケーションとして起動するもう一つの方法は、[http://trac.edgewall.org/ticket/6224 本家チケット 6224] を参照して下さい。
     494Trac を FCGI の外部アプリケーションとして起動するもう一つの方法は、[trac:#6224 本家チケット 6224] を参照して下さい。
    468495
    469496----
    470 See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe]
     497See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe]