Changes between Version 7 and Version 8 of TracFastCgi


Ignore:
Timestamp:
Jul 25, 2015, 7:08:55 PM (4 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracFastCgi

    v7 v8  
    1 = Trac with FastCGI
    2 
     1= Trac with FastCGI =
    32[[TracGuideToc]]
    43[[PageOutline(2-5, Contents, floated)]]
     
    65[http://www.fastcgi.com/ FastCGI] interface allows Trac to remain resident much like with [wiki:TracModPython mod_python] or [wiki:TracModWSGI mod_wsgi]. It is faster than external CGI interfaces which must start a new process for each request.  Additionally, it is supported by much wider variety of web servers.
    76
    8 Note that unlike mod_python, FastCGI supports [http://httpd.apache.org/docs/suexec.html Apache SuEXEC], ie run with different permissions than the web server runs with. `mod_wsgi` supports the `WSGIDaemonProcess` with user / group parameters to achieve the same effect.
     7Note that unlike mod_python, FastCGI supports [http://httpd.apache.org/docs/suexec.html Apache SuEXEC], i.e. run with different permissions than web server running with (`mod_wsgi` supports the `WSGIDaemonProcess` with user / group parameters to achieve the same effect).
    98
    109'''Note for Windows:''' Trac's FastCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, you may want to try [trac:TracOnWindowsIisAjp AJP]/[trac:TracOnWindowsIisAjp ISAPI].
    1110
    12 == Simple Apache configuration
     11[[PageOutline(2-3,Overview,inline)]]
     12
     13
     14== Simple Apache configuration ==
    1315
    1416There are two FastCGI modules commonly available for Apache: `mod_fastcgi` and
     
    1719The following sections focus on the FCGI specific setup, see also [wiki:TracModWSGI#ConfiguringAuthentication] for configuring the authentication in Apache.
    1820
    19 Regardless of which cgi module is used, be sure the web server has executable permissions on the cgi-bin folder. While FastCGI will throw specific permissions errors, mod_fcgid will throw an ambiguous error if this has not been done. Connection reset by peer: mod_fcgid: error reading data from FastCGI server.
    20 
    21 === Set up with `mod_fastcgi`
    22 
     21Regardless of which cgi module is used, be sure the web server has executable permissions on the cgi-bin folder. While FastCGI will throw specific permissions errors, mod_fcgid will throw an ambiguous error if this has not been done. (Connection reset by peer: mod_fcgid: error reading data from FastCGI server)
     22
     23=== Set up with `mod_fastcgi` ===
    2324`mod_fastcgi` uses `FastCgiIpcDir` and `FastCgiConfig` directives that should be added to an appropriate Apache configuration file:
    2425{{{
     
    4748}}}
    4849
    49 === Set up with `mod_fcgid`
    50 
    51 Configure `ScriptAlias` (see TracCgi for details), but call `trac.fcgi` instead of `trac.cgi`:
     50=== Set up with `mod_fcgid` ===
     51Configure `ScriptAlias` (see TracCgi for details), but call `trac.fcgi`
     52instead of `trac.cgi`. Note that slash at the end - it is important.
    5253{{{
    5354ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/
    5455}}}
    55 Note the slash at the end.
    56 
    57 To set up Trac environment for `mod_fcgid` it is necessary to use `DefaultInitEnv` directive. It cannot be used in `Directory` or `Location` context, so if you need to support multiple projects, try alternative environment setup below.
     56
     57To set up Trac environment for `mod_fcgid` it is necessary to use
     58`DefaultInitEnv` directive. It cannot be used in `Directory` or
     59`Location` context, so if you need to support multiple projects, try
     60alternative environment setup below.
    5861
    5962{{{
     
    6164}}}
    6265
    63 === alternative environment setup
    64 
    65 A better method to specify path to the Trac environment is to embed the path into `trac.fcgi` script itself. That doesn't require configuration of the server environment variables, works for both [trac:FastCgi] modules as well as for [http://www.lighttpd.net/ lighttpd] and CGI:
     66=== alternative environment setup ===
     67A better method to specify path to Trac environment is to embed the path
     68into `trac.fcgi` script itself. That doesn't require configuration of server
     69environment variables, works for both [trac:FastCgi] modules
     70(and for [http://www.lighttpd.net/ lighttpd] and CGI as well):
    6671{{{
    6772import os
    6873os.environ['TRAC_ENV'] = "/path/to/projectenv"
    6974}}}
    70 or:
     75or
    7176{{{
    7277import os
     
    7479}}}
    7580
    76 With this method different projects can be supported by using different `.fcgi` scripts with different `ScriptAliases`.
     81With this method different projects can be supported by using different
     82`.fcgi` scripts with different `ScriptAliases`.
    7783
    7884See [https://coderanger.net/~coderanger/httpd/fcgi_example.conf this fcgid example config] which uses a !ScriptAlias directive with trac.fcgi with a trailing / like this:
     
    8187}}}
    8288
    83 == Simple Cherokee Configuration
     89== Simple Cherokee Configuration ==
    8490
    8591The configuration on Cherokee's side is quite simple. You will only need to know that you can spawn Trac as an SCGI process.
    8692You can either start it manually, or better yet, automatically by letting Cherokee spawn the server whenever it is down.
    87 First set up an information source in cherokee-admin with a local interpreter:
     93First set up an information source in cherokee-admin with a local interpreter.
    8894
    8995{{{
     
    107113}}}
    108114
    109 == Simple Lighttpd Configuration
    110 
    111 The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.lighttpd.net/ Lighttpd].
    112 
    113 Lighttpd is a secure, fast, compliant and very flexible web-server that has been optimized for high-performance environments. It has a very low memory footprint compared to other web servers and takes care of CPU load.
    114 
    115 For using `trac.fcgi`(prior to 0.11) / fcgi_frontend.py (0.11) with Lighttpd add the following to your lighttpd.conf:
     115
     116== Simple Lighttpd Configuration ==
     117
     118The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.lighttpd.net/ lighttpd].
     119
     120lighttpd is a secure, fast, compliant and very flexible web-server that has been optimized for high-performance
     121environments.  It has a very low memory footprint compared to other web servers and takes care of CPU load.
     122
     123For using `trac.fcgi`(prior to 0.11) / fcgi_frontend.py (0.11) with lighttpd add the following to your lighttpd.conf:
    116124{{{
    117125#var.fcgi_binary="/usr/bin/python /path/to/fcgi_frontend.py" # 0.11 if installed with easy_setup, it is inside the egg directory
     
    130138}}}
    131139
    132 Note that you will need to add a new entry to `fastcgi.server` for each separate Trac instance that you wish to run. Alternatively, you may use the `TRAC_ENV_PARENT_DIR` variable instead of `TRAC_ENV` as described above, and you may set one of the two in `trac.fcgi` instead of in `lighttpd.conf` using `bin-environment`, as in the section above on Apache configuration.
    133 
    134 Note that Lighttpd has a bug related to 'SCRIPT_NAME' and 'PATH_INFO' when the uri of fastcgi.server is '/' instead of '/trac' in this example (see [trac:#2418]). This is fixed in Lighttpd 1.5, and under Lighttpd 1.4.23 or later the workaround is to add `"fix-root-scriptname" => "enable"` as a parameter of fastcgi.server.
     140Note that you will need to add a new entry to `fastcgi.server` for each separate Trac instance that you wish to run. Alternatively, you may use the `TRAC_ENV_PARENT_DIR` variable instead of `TRAC_ENV` as described above,
     141and you may set one of the two in `trac.fcgi` instead of in `lighttpd.conf`
     142using `bin-environment` (as in the section above on Apache configuration).
     143
     144Note that lighttpd has a bug related to 'SCRIPT_NAME' and 'PATH_INFO' when the uri of fastcgi.server is '/' instead of '/trac' in this example (see [trac:#2418]). This is fixed in lighttpd 1.5, and under lighttpd 1.4.23 or later the workaround is to add `"fix-root-scriptname" => "enable"` as a parameter of fastcgi.server.
    135145
    136146For using two projects with lighttpd add the following to your `lighttpd.conf`:
     
    156166                )
    157167}}}
    158 
    159 Note that field values are different. If you prefer setting the environment variables in the `.fcgi` scripts, then copy/rename `trac.fcgi`, eg to `first.fcgi` and `second.fcgi`, and reference them in the above settings.
    160 Note that the above will result in different processes in any event, even if both are running from the same `trac.fcgi` script.
     168Note that field values are different.  If you prefer setting the environment
     169variables in the `.fcgi` scripts, then copy/rename `trac.fcgi`, e.g., to
     170`first.fcgi` and `second.fcgi`, and reference them in the above settings.
     171Note that the above will result in different processes in any event, even
     172if both are running from the same `trac.fcgi` script.
    161173
    162174{{{
     
    201213               )
    202214
    203 }}}
    204 Note that Lighttpd (v1.4.3) stops if the password file doesn't exist.
    205 
    206 Note that Lighttpd doesn't support 'valid-user' in versions prior to 1.3.16.
    207 
    208 Conditional configuration is also useful for mapping static resources, ie serving out images and CSS directly instead of through FastCGI:
     215
     216}}}
     217Note that lighttpd (I use version 1.4.3) stopped if password file doesn't exist.
     218
     219Note that lighttpd doesn't support 'valid-user' in versions prior to 1.3.16.
     220
     221Conditional configuration is also useful for mapping static resources, i.e. serving out images and CSS directly instead of through FastCGI:
    209222{{{
    210223# Aliasing functionality is needed
     
    230243}
    231244}}}
    232 
    233245The technique can be easily adapted for use with multiple projects by creating aliases for each of them, and wrapping the fastcgi.server declarations inside conditional configuration blocks.
    234246Also there is another way to handle multiple projects and it's to use TRAC_ENV_PARENT_DIR instead of TRAC_ENV and use global auth, let's see an example:
     
    262274}}}
    263275
    264 Changing date/time format also supported by lighttpd over environment variable LC_TIME:
     276Changing date/time format also supported by lighttpd over environment variable LC_TIME
    265277{{{
    266278fastcgi.server = ("/trac" =>
     
    281293]
    282294
    283 Relaunch Lighttpd and browse to `http://yourhost.example.org/trac` to access Trac.
    284 
    285 Note about running Lighttpd with reduced permissions: If nothing else helps and trac.fcgi doesn't start with Lighttpd settings `server.username = "www-data"`, `server.groupname = "www-data"`, then in the `bin-environment` section set `PYTHON_EGG_CACHE` to the home directory of `www-data` or some other directory accessible to this account for writing.
    286 
    287 == Simple !LiteSpeed Configuration
     295Relaunch lighttpd, and browse to `http://yourhost.example.org/trac` to access Trac.
     296
     297Note about running lighttpd with reduced permissions:
     298
     299If nothing else helps and trac.fcgi doesn't start with lighttpd settings `server.username = "www-data"`, `server.groupname = "www-data"`, then in the `bin-environment` section set `PYTHON_EGG_CACHE` to the home directory of `www-data` or some other directory accessible to this account for writing.
     300
     301
     302== Simple !LiteSpeed Configuration ==
    288303
    289304The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.litespeedtech.com/ LiteSpeed].
     
    291306!LiteSpeed web server is an event-driven asynchronous Apache replacement designed from the ground-up to be secure, scalable, and operate with minimal resources. !LiteSpeed can operate directly from an Apache config file and is targeted for business-critical environments.
    292307
    293  1. Please make sure you have a working install of a Trac project. Test install with "tracd" first.
    294 
    295  2. Create a Virtual Host for this setup. From now on we will refer to this vhost as !TracVhost. For this tutorial we will be assuming that your Trac project will be accessible via:
     308 1. Please make sure you have first have a working install of a Trac project. Test install with “tracd” first.
     309
     310 2. Create a Virtual Host for this setup. From now on we will refer to this vhost as !TracVhost. For this tutorial we will be assuming that your trac project will be accessible via:
     311
    296312{{{
    297313http://yourdomain.com/trac/
    298314}}}
    299315
    300  3. Go "!TracVhost → External Apps" tab and create a new "External Application".
     316 3. Go “!TracVhost → External Apps” tab and create a new “External Application”.
     317
    301318{{{
    302319Name: MyTracFCGI       
     
    315332}}}
    316333
    317  4. Optional: If you need to use htpasswd based authentication. Go to "!TracVhost → Security" tab and create a new security Realm.
     334 4. Optional. If you need to use htpasswd based authentication. Go to “!TracVhost → Security” tab and create a new security “Realm”.
    318335
    319336{{{
     
    325342If you don’t have a htpasswd file or don’t know how to create the entries within one, go to http://sherylcanter.com/encrypt.php, to generate the user:password combos.
    326343
    327  5. Go to "!PythonVhost → Contexts" and create a new FCGI Context.
     344 5. Go to “!PythonVhost → Contexts” and create a new “FCGI Context”.
    328345
    329346{{{
     
    348365}}}
    349366
    350 == Simple Nginx Configuration
     367
     368== Simple Nginx Configuration ==
    351369
    352370Nginx is able to communicate with FastCGI processes, but can not spawn them. So you need to start FastCGI server for Trac separately.
     
    453471
    454472The above assumes that:
    455  * There is a user named 'trac' for running trac instances and keeping trac environments in its home directory
     473 * There is a user named 'trac' for running trac instances and keeping trac environments in its home directory.
    456474 * `/home/trac/instance` contains a trac environment
    457475 * `/home/trac/htpasswd` contains authentication information
     
    461479
    462480Unfortunately nginx does not support variable expansion in fastcgi_pass directive.
    463 Thus it is not possible to serve multiple Trac instances from one server block.
    464 
    465 If you worry enough about security, run Trac instances under separate users.
    466 
    467 Another way to run Trac as a FCGI external application is offered in ticket #T6224
     481Thus it is not possible to serve multiple trac instances from one server block.
     482
     483If you worry enough about security, run trac instances under separate users.
     484
     485Another way to run trac as a FCGI external application is offered in ticket #T6224
    468486
    469487----

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png