1 | | = Tracd = #Tracd |
2 | | |
3 | | Tracd は軽量なスタンドアロンの Trac web サーバです。 |
4 | | Tracd は様々な場面で使用することができます。テストや開発用のサーバからロードバランサとして使用されているもう一つのウェブサーバの後段に複数のプロセスを配置するときなどに使われます。 |
5 | | |
6 | | == 利点 == #Pros |
7 | | |
8 | | * 依存性が低い: apache その他 web サーバをインストールする必要がありません。 |
9 | | * 速い: [wiki:TracModPython mod_python] バージョンと同じくらい速いでしょう。 ([wiki:TracCgi CGI] よりはずっと速い)。そして、 バージョン 0.12 以降では、デフォルトで HTTP のバージョン 1.1 が使えるようになりました。 |
10 | | * 自動リロード: 開発のために、 Tracd は ''auto_reload'' モードを使用しています。そのため、コード ( Trac 自身またはプラグインのコード ) を更新したときに、自動的にサーバが再起動します。 |
11 | | |
12 | | == 欠点 == #Cons |
13 | | |
14 | | * 機能が少ない: Tracd に実装されている web サーバはとてもシンプルで、 Apache httpd のように拡張性のある設定ができません。 |
15 | | * ネイティブで HTTPS に対応しない: 代わりに [http://www.rickk.com/sslwrap/ sslwrap] または |
16 | | [http://trac.edgewall.org/wiki/STunnelTracd stunnel -- tracd と stunnel を使うためのチュートリアル] または Apache の mod_proxy を使用します。 |
17 | | |
18 | | == 使用例 == #Usageexamples |
19 | | |
20 | | 単一のプロジェクトをポート 8080 でホストします。 (http://localhost:8080/) |
| 1 | ** Note: this page documents the version 1.0 of Trac, see [[0.12/TracStandalone]] if you need the previous version ** |
| 2 | = Tracd = |
| 3 | |
| 4 | Tracd is a lightweight standalone Trac web server. |
| 5 | It can be used in a variety of situations, from a test or development server to a multiprocess setup behind another web server used as a load balancer. |
| 6 | |
| 7 | == Pros == |
| 8 | |
| 9 | * Fewer dependencies: You don't need to install apache or any other web-server. |
| 10 | * Fast: Should be almost as fast as the [wiki:TracModPython mod_python] version (and much faster than the [wiki:TracCgi CGI]), even more so since version 0.12 where the HTTP/1.1 version of the protocol is enabled by default |
| 11 | * Automatic reloading: For development, Tracd can be used in ''auto_reload'' mode, which will automatically restart the server whenever you make a change to the code (in Trac itself or in a plugin). |
| 12 | |
| 13 | == Cons == |
| 14 | |
| 15 | * Fewer features: Tracd implements a very simple web-server and is not as configurable or as scalable as Apache httpd. |
| 16 | * No native HTTPS support: [http://www.rickk.com/sslwrap/ sslwrap] can be used instead, |
| 17 | or [http://trac.edgewall.org/wiki/STunnelTracd stunnel -- a tutorial on how to use stunnel with tracd] or Apache with mod_proxy. |
| 18 | |
| 19 | == Usage examples == |
| 20 | |
| 21 | A single project on port 8080. (http://localhost:8080/) |
69 | | === オプション 2 === #Option2 |
70 | | |
71 | | [http://trac-hacks.org/ Trac Hacks] より [http://trac-hacks.org/wiki/WindowsServiceScript WindowsServiceScript] を入手して下さい。 Trac のサービスを インストール、削除、開始、停止などできます。 |
72 | | |
73 | | ==== 認証を使用する ==== #UsingAuthentication |
74 | | |
75 | | tracd は Apache の .htpasswd ファイルを使用できます: |
76 | | |
77 | | .htpasswd ファイルは htpasswd コマンドを使用して作成します: |
78 | | |
79 | | {{{ |
80 | | $ htpasswd -c /path/to/env/.htpasswd username |
81 | | }}} |
82 | | ユーザを追加する場合は以下の通りです: |
83 | | {{{ |
84 | | $ htpasswd /path/to/env/.htpasswd username2 |
85 | | }}} |
86 | | そして、 tracd を開始します ( Windows では、--basic-auth の後の "=" を省略します ): |
87 | | {{{ |
88 | | tracd -p 8080 --basic-auth=environmentname,/fullpath/environmentname/.htpasswd,/fullpath/environmentname /fullpath/environmentname |
89 | | }}} |
90 | | |
91 | | Trac のプロジェクトフォルダのフルパスである `/fullpath/environmentname` ではなく Trac のプロジェクトフォルダのディレクトリ名である `environmentname` を使用します。 下記のもう一つの例を参照して下さい。 |
92 | | |
93 | | Tracd は基本認証とダイジェスト認証の両方に対応しています。デフォルトはダイジェスト認証です; 基本認証を使用するためには、以降の例で使用する `--auth` を `--basic-auth` に置き換えて下さい。 (ダイアログに使用する "レルム" を指定しなければなりません。 BASICAUTH には カンマ を末尾に指定した空の文字列を指定することができます。) |
94 | | |
95 | | ''基本認証への対応はバージョン 0.9 以降で追加されました。'' |
96 | | |
97 | | 認証の一般的なフォーマットは以下の通りです ( 基本認証を使用したい場合、 `--auth` と `--base-auth` を置き換えてください): |
98 | | |
| 83 | === Option 2 === |
| 84 | |
| 85 | Use [http://trac-hacks.org/wiki/WindowsServiceScript WindowsServiceScript], available at [http://trac-hacks.org/ Trac Hacks]. Installs, removes, starts, stops, etc. your Trac service. |
| 86 | |
| 87 | === Option 3 === |
| 88 | |
| 89 | also cygwin's cygrunsrv.exe can be used: |
| 90 | {{{ |
| 91 | $ cygrunsrv --install tracd --path /cygdrive/c/Python27/Scripts/tracd.exe --args '--port 8000 --env-parent-dir E:\IssueTrackers\Trac\Projects' |
| 92 | $ net start tracd |
| 93 | }}} |
| 94 | |
| 95 | == Using Authentication == |
| 96 | |
| 97 | Tracd provides support for both Basic and Digest authentication. Digest is considered more secure. The examples below use Digest; to use Basic authentication, replace `--auth` with `--basic-auth` in the command line. |
| 98 | |
| 99 | The general format for using authentication is: |
211 | | |
212 | | Note: --basic-auth を使用したければ、 .htpasswd ファイルを作成するのに Apache サーバの htpasswd ツールを使用する必要があります。 他の部分についてはダイジェスト認証を行う場合とほとんど同じ方法です。しかしレルムには必ず empty 値 (すなわち、パス後のカンマのみ) を指定するようにしてください。 確実に -m オプションを使用して下さい。もし Apache を持っていない場合、 [trac:source:/tags/trac-0.11/contrib/htpasswd.py htpasswd.py] が役に立つでしょう。 ( このスクリプトは、 `crypt` または `fcrypt` モジュールを必要とします; ソースコード内のコメントに詳細が書かれています。) |
213 | | |
214 | | md5sum ユーティリティを使用するとダイジェストパスワードを作成することができます: |
215 | | {{{ |
216 | | $ printf "${user}:trac:${password}" | md5sum - >>user.htdigest |
217 | | }}} |
218 | | 'to-file' は手で編集が必要です。行末の " -" を削除し、行頭に "${user}:trac:" を追加してください。 |
219 | | |
220 | | == Tips == #Tips |
221 | | |
222 | | === 静的なリソースを扱う === #Servingstaticcontent |
223 | | |
224 | | もし、 `tracd` が単一のプロジェクトのみを扱う Web サーバだとしたら、 |
225 | | 静的なリソースを割り当てるのに使用することができます。 |
226 | | (tar アーカイブ, Doxygen ドキュメントなど) |
227 | | |
228 | | この静的なリソースは `$TRAC_ENV/htdocs` フォルダに置き、 |
229 | | `<project_URL>/chrome/site/...` という URL でアクセスします。 |
230 | | |
231 | | 例: ファイル名が `$TRAC_ENV/htdocs/software-0.1.tar.gz` だったとき、 |
232 | | 対応する URL は `/<project_name>/chrome/site/software-0.1.tar.gz` となります。 |
233 | | 代わりに `htdocs:software-0.1.tar.gz` (TracLinks のシンタックス) や `[/<project_name>/chrome/site/software-0.1.tar.gz]` (相対リンクのシンタックス) で記述することができます。 |
234 | | |
235 | | ''TracLinks における `htdocs:` のサポートは Trac のバージョン 0.10 で追加されました。'' |
236 | | |
237 | | === Apache の書き換え規則を使用する === #Usingapacherewriterules |
238 | | Apache のビハインドで tracd を使用すると、いくつかの状況で不正なホストまたはプロトコルに URL をリダイレクトされる問題が発生するかもしれません。この場合 (この場合だけ) `[trac] use_base_url_for_redirect` を `true` に設定することができます。これによって Trac がやむを得ず `[trac] base_url` の値を使用するためリダイレクトを行います。 |
239 | | |
240 | | === 検索パスとは別のベースパス (/) === #Servingadifferentbasepaththan |
241 | | Tracd は、プロジェクト毎に異なるベース URL 、および /<project> をサポートします。コマンドは以下の通りです。 |
| 214 | ==== Using `md5sum` |
| 215 | It is possible to use `md5sum` utility to generate digest-password file: |
| 216 | {{{ |
| 217 | user= |
| 218 | realm= |
| 219 | password= |
| 220 | path_to_file= |
| 221 | echo ${user}:${realm}:$(printf "${user}:${realm}:${password}" | md5sum - | sed -e 's/\s\+-//') > ${path_to_file} |
| 222 | }}} |
| 223 | |
| 224 | == Reference == |
| 225 | |
| 226 | Here's the online help, as a reminder (`tracd --help`): |
| 227 | {{{ |
| 228 | Usage: tracd [options] [projenv] ... |
| 229 | |
| 230 | Options: |
| 231 | --version show program's version number and exit |
| 232 | -h, --help show this help message and exit |
| 233 | -a DIGESTAUTH, --auth=DIGESTAUTH |
| 234 | [projectdir],[htdigest_file],[realm] |
| 235 | --basic-auth=BASICAUTH |
| 236 | [projectdir],[htpasswd_file],[realm] |
| 237 | -p PORT, --port=PORT the port number to bind to |
| 238 | -b HOSTNAME, --hostname=HOSTNAME |
| 239 | the host name or IP address to bind to |
| 240 | --protocol=PROTOCOL http|scgi|ajp|fcgi |
| 241 | -q, --unquote unquote PATH_INFO (may be needed when using ajp) |
| 242 | --http10 use HTTP/1.0 protocol version instead of HTTP/1.1 |
| 243 | --http11 use HTTP/1.1 protocol version (default) |
| 244 | -e PARENTDIR, --env-parent-dir=PARENTDIR |
| 245 | parent directory of the project environments |
| 246 | --base-path=BASE_PATH |
| 247 | the initial portion of the request URL's "path" |
| 248 | -r, --auto-reload restart automatically when sources are modified |
| 249 | -s, --single-env only serve a single project without the project list |
| 250 | -d, --daemonize run in the background as a daemon |
| 251 | --pidfile=PIDFILE when daemonizing, file to which to write pid |
| 252 | --umask=MASK when daemonizing, file mode creation mask to use, in |
| 253 | octal notation (default 022) |
| 254 | --group=GROUP the group to run as |
| 255 | --user=USER the user to run as |
| 256 | }}} |
| 257 | |
| 258 | Use the -d option so that tracd doesn't hang if you close the terminal window where tracd was started. |
| 259 | |
| 260 | == Tips == |
| 261 | |
| 262 | === Serving static content === |
| 263 | |
| 264 | If `tracd` is the only web server used for the project, |
| 265 | it can also be used to distribute static content |
| 266 | (tarballs, Doxygen documentation, etc.) |
| 267 | |
| 268 | This static content should be put in the `$TRAC_ENV/htdocs` folder, |
| 269 | and is accessed by URLs like `<project_URL>/chrome/site/...`. |
| 270 | |
| 271 | Example: given a `$TRAC_ENV/htdocs/software-0.1.tar.gz` file, |
| 272 | the corresponding relative URL would be `/<project_name>/chrome/site/software-0.1.tar.gz`, |
| 273 | which in turn can be written as `htdocs:software-0.1.tar.gz` (TracLinks syntax) or `[/<project_name>/chrome/site/software-0.1.tar.gz]` (relative link syntax). |
| 274 | |
| 275 | ''Support for `htdocs:` TracLinks syntax was added in version 0.10'' |
| 276 | |
| 277 | === Using tracd behind a proxy |
| 278 | |
| 279 | In some situations when you choose to use tracd behind Apache or another web server. |
| 280 | |
| 281 | In this situation, you might experience issues with redirects, like being redirected to URLs with the wrong host or protocol. In this case (and only in this case), setting the `[trac] use_base_url_for_redirect` to `true` can help, as this will force Trac to use the value of `[trac] base_url` for doing the redirects. |
| 282 | |
| 283 | If you're using the AJP protocol to connect with `tracd` (which is possible if you have flup installed), then you might experience problems with double quoting. Consider adding the `--unquote` parameter. |
| 284 | |
| 285 | See also [trac:TracOnWindowsIisAjp], [trac:TracNginxRecipe]. |
| 286 | |
| 287 | === Authentication for tracd behind a proxy |
| 288 | It is convenient to provide central external authentication to your tracd instances, instead of using {{{--basic-auth}}}. There is some discussion about this in #9206. |
| 289 | |
| 290 | Below is example configuration based on Apache 2.2, mod_proxy, mod_authnz_ldap. |
| 291 | |
| 292 | First we bring tracd into Apache's location namespace. |
| 293 | |
| 294 | {{{ |
| 295 | <Location /project/proxified> |
| 296 | Require ldap-group cn=somegroup, ou=Groups,dc=domain.com |
| 297 | Require ldap-user somespecificusertoo |
| 298 | ProxyPass http://localhost:8101/project/proxified/ |
| 299 | # Turns out we don't really need complicated RewriteRules here at all |
| 300 | RequestHeader set REMOTE_USER %{REMOTE_USER}s |
| 301 | </Location> |
| 302 | }}} |
| 303 | |
| 304 | Then we need a single file plugin to recognize HTTP_REMOTE_USER header as valid authentication source. HTTP headers like '''HTTP_FOO_BAR''' will get converted to '''Foo-Bar''' during processing. Name it something like '''remote-user-auth.py''' and drop it into '''proxified/plugins''' directory: |
| 305 | {{{ |
| 306 | #!python |
| 307 | from trac.core import * |
| 308 | from trac.config import BoolOption |
| 309 | from trac.web.api import IAuthenticator |
| 310 | |
| 311 | class MyRemoteUserAuthenticator(Component): |
| 312 | |
| 313 | implements(IAuthenticator) |
| 314 | |
| 315 | obey_remote_user_header = BoolOption('trac', 'obey_remote_user_header', 'false', |
| 316 | """Whether the 'Remote-User:' HTTP header is to be trusted for user logins |
| 317 | (''since ??.??').""") |
| 318 | |
| 319 | def authenticate(self, req): |
| 320 | if self.obey_remote_user_header and req.get_header('Remote-User'): |
| 321 | return req.get_header('Remote-User') |
| 322 | return None |
| 323 | |
| 324 | }}} |
| 325 | |
| 326 | Add this new parameter to your TracIni: |
| 327 | {{{ |
| 328 | ... |
| 329 | [trac] |
| 330 | ... |
| 331 | obey_remote_user_header = true |
| 332 | ... |
| 333 | }}} |
| 334 | |
| 335 | Run tracd: |
| 336 | {{{ |
| 337 | tracd -p 8101 -r -s proxified --base-path=/project/proxified |
| 338 | }}} |
| 339 | |
| 340 | Note that if you want to install this plugin for all projects, you have to put it in your [TracPlugins#Plugindiscovery global plugins_dir] and enable it in your global trac.ini. |
| 341 | |
| 342 | Global config (e.g. `/srv/trac/conf/trac.ini`): |
| 343 | {{{ |
| 344 | [components] |
| 345 | remote-user-auth.* = enabled |
| 346 | [inherit] |
| 347 | plugins_dir = /srv/trac/plugins |
| 348 | [trac] |
| 349 | obey_remote_user_header = true |
| 350 | }}} |
| 351 | |
| 352 | Environment config (e.g. `/srv/trac/envs/myenv`): |
| 353 | {{{ |
| 354 | [inherit] |
| 355 | file = /srv/trac/conf/trac.ini |
| 356 | }}} |
| 357 | |
| 358 | === Serving a different base path than / === |
| 359 | Tracd supports serving projects with different base urls than /<project>. The parameter name to change this is |