| 1 |
= Tracd = |
|---|
| 2 |
|
|---|
| 3 |
Tracd is a lightweight standalone Trac web server. In most cases it's easier to setup and runs faster than the [wiki:TracCgi CGI script]. |
|---|
| 4 |
|
|---|
| 5 |
== Pros == |
|---|
| 6 |
|
|---|
| 7 |
* Fewer dependencies: You don't need to install apache or any other web-server. |
|---|
| 8 |
* Fast: Should be almost as fast as the [wiki:TracModPython mod_python] version (and much faster than the [wiki:TracCgi CGI]). |
|---|
| 9 |
* 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). |
|---|
| 10 |
|
|---|
| 11 |
== Cons == |
|---|
| 12 |
|
|---|
| 13 |
* Fewer features: Tracd implements a very simple web-server and is not as configurable or as scalable as Apache HTTPD. |
|---|
| 14 |
* No native HTTPS support: [http://www.rickk.com/sslwrap/ sslwrap] can be used instead, |
|---|
| 15 |
or [http://trac.edgewall.org/wiki/STunnelTracd stunnel -- a tutorial on how to use stunnel with tracd] or Apache with mod_proxy. |
|---|
| 16 |
|
|---|
| 17 |
== Usage examples == |
|---|
| 18 |
|
|---|
| 19 |
A single project on port 8080. (http://localhost:8080/) |
|---|
| 20 |
{{{ |
|---|
| 21 |
$ tracd -p 8080 /path/to/project |
|---|
| 22 |
}}} |
|---|
| 23 |
With more than one project. (http://localhost:8080/project1/ and http://localhost:8080/project2/) |
|---|
| 24 |
{{{ |
|---|
| 25 |
$ tracd -p 8080 /path/to/project1 /path/to/project2 |
|---|
| 26 |
}}} |
|---|
| 27 |
|
|---|
| 28 |
You can't have the last portion of the path identical between the projects since Trac uses that name to keep the URLs of the |
|---|
| 29 |
different projects unique. So if you use `/project1/path/to` and `/project2/path/to`, you will only see the second project. |
|---|
| 30 |
|
|---|
| 31 |
An alternative way to serve multiple projects is to specify a parent directory in which each subdirectory is a Trac project, using the `-e` option. The example above could be rewritten: |
|---|
| 32 |
{{{ |
|---|
| 33 |
$ tracd -p 8080 -e /path/to |
|---|
| 34 |
}}} |
|---|
| 35 |
|
|---|
| 36 |
== Using Authentication == |
|---|
| 37 |
|
|---|
| 38 |
Tracd provides support for both Basic and Digest authentication. The default is to use Digest; to use Basic authentication, replace `--auth` with `--basic-auth` in the examples below, and omit the realm. |
|---|
| 39 |
|
|---|
| 40 |
''Support for Basic authentication was added in version 0.9.'' |
|---|
| 41 |
|
|---|
| 42 |
If the file `/path/to/users.htdigest` contains user accounts for project1 with the realm "mycompany.com", you'd use the following command-line to start tracd: |
|---|
| 43 |
{{{ |
|---|
| 44 |
$ tracd -p 8080 --auth project1,/path/to/users.htdigest,mycompany.com /path/to/project1 |
|---|
| 45 |
}}} |
|---|
| 46 |
|
|---|
| 47 |
'''Note''': the project "name" passed to the `--auth` option is the base name of the project environment directory. |
|---|
| 48 |
|
|---|
| 49 |
Of course, the digest file can be be shared so that it is used for more than one project: |
|---|
| 50 |
{{{ |
|---|
| 51 |
$ tracd -p 8080 \ |
|---|
| 52 |
--auth project1,/path/to/users.htdigest,mycompany.com \ |
|---|
| 53 |
--auth project2,/path/to/users.htdigest,mycompany.com \ |
|---|
| 54 |
/path/to/project1 /path/to/project2 |
|---|
| 55 |
}}} |
|---|
| 56 |
|
|---|
| 57 |
Another way to share the digest file is to specify "*" |
|---|
| 58 |
for the project name: |
|---|
| 59 |
{{{ |
|---|
| 60 |
$ tracd -p 8080 \ |
|---|
| 61 |
--auth *,/path/to/users.htdigest,mycompany.com \ |
|---|
| 62 |
/path/to/project1 /path/to/project2 |
|---|
| 63 |
}}} |
|---|
| 64 |
|
|---|
| 65 |
== How to set up an htdigest password file == |
|---|
| 66 |
|
|---|
| 67 |
If you have Apache available, you can use the htdigest command to generate the password file. Type 'htdigest' to get some usage instructions, or read [http://httpd.apache.org/docs/2.0/programs/htdigest.html this page] from the Apache manual to get precise instructions. You'll be prompted for a password to enter for each user that you create. For the name of the password file, you can use whatever you like, but if you use something like `users.htdigest` it will remind you what the file contains. As a suggestion, put it in your <projectname>/conf folder along with the [TracIni trac.ini] file. |
|---|
| 68 |
|
|---|
| 69 |
Note that you can start tracd without the --auth argument, but if you click on the ''Login'' link you will get an error. |
|---|
| 70 |
|
|---|
| 71 |
== Generating Passwords Without Apache == |
|---|
| 72 |
|
|---|
| 73 |
If you don't have Apache available, you can use this simple Python script to generate your passwords: |
|---|
| 74 |
|
|---|
| 75 |
{{{ |
|---|
| 76 |
from optparse import OptionParser |
|---|
| 77 |
import md5 |
|---|
| 78 |
|
|---|
| 79 |
# build the options |
|---|
| 80 |
usage = "usage: %prog [options]" |
|---|
| 81 |
parser = OptionParser(usage=usage) |
|---|
| 82 |
parser.add_option("-u", "--username",action="store", dest="username", type = "string", |
|---|
| 83 |
help="the username for whom to generate a password") |
|---|
| 84 |
parser.add_option("-p", "--password",action="store", dest="password", type = "string", |
|---|
| 85 |
help="the password to use") |
|---|
| 86 |
(options, args) = parser.parse_args() |
|---|
| 87 |
|
|---|
| 88 |
# check options |
|---|
| 89 |
if (options.username is None) or (options.password is None): |
|---|
| 90 |
parser.error("You must supply both the username and password") |
|---|
| 91 |
|
|---|
| 92 |
# Generate the string to enter into the htdigest file |
|---|
| 93 |
realm = 'trac' |
|---|
| 94 |
kd = lambda x: md5.md5(':'.join(x)).hexdigest() |
|---|
| 95 |
print ':'.join((options.username, realm, kd([options.username, realm, options.password]))) |
|---|
| 96 |
}}} |
|---|
| 97 |
|
|---|
| 98 |
Note: If you use the above script you must use the --auth option to tracd, not --basic-auth, and you must set the realm in the --auth value to 'trac' (without the quotes). Example usage (assuming you saved the script as trac-digest.py): |
|---|
| 99 |
|
|---|
| 100 |
{{{ |
|---|
| 101 |
python trac-digest.py -u username -p password >> c:\digest.txt |
|---|
| 102 |
python tracd --port 8000 --auth proj_name,c:\digest.txt,trac c:\path\to\proj_name |
|---|
| 103 |
}}} |
|---|
| 104 |
|
|---|
| 105 |
== Tips == |
|---|
| 106 |
|
|---|
| 107 |
=== Serving static content === |
|---|
| 108 |
|
|---|
| 109 |
If `tracd` is the only webserver used for the project, |
|---|
| 110 |
it can also be used to distribute static content |
|---|
| 111 |
(tarballs, Doxygen documentation, etc.) |
|---|
| 112 |
|
|---|
| 113 |
This static content should be put in the `$TRAC_ENV/htdocs` folder, |
|---|
| 114 |
and is accessed by URLs like `<project_URL>/chrome/site/...`. |
|---|
| 115 |
|
|---|
| 116 |
Example: given a `$TRAC_ENV/htdocs/software-0.1.tar.gz` file, |
|---|
| 117 |
the corresponding relative URL would be `/<project_name>/chrome/site/software-0.1.tar.gz`, |
|---|
| 118 |
which in turn can be written using the relative link syntax |
|---|
| 119 |
in the Wiki: `[/<project_name>/chrome/site/software-0.1.tar.gz]` |
|---|
| 120 |
|
|---|
| 121 |
The development version of Trac supports a new `htdocs:` TracLinks |
|---|
| 122 |
syntax for the above. With this, the example link above can be written simply |
|---|
| 123 |
`htdocs:software-0.1.tar.gz`. |
|---|
| 124 |
|
|---|
| 125 |
---- |
|---|
| 126 |
See also: TracInstall, TracCgi, TracModPython, TracGuide |
|---|
| 127 |
|
|---|
| 128 |
---- |
|---|
| 129 |
'''Translation:''' |
|---|
| 130 |
* [https://opensvn.csie.org/traccgi/trac_rus/wiki/StandAloneTracForTeapot Russian] (пеÑевПЎ Ма Ð ÑÑÑкОй) |
|---|