Changes between Version 2 and Version 3 of TracFastCgi
- Timestamp:
- 2019-05-02T09:45:05-03:00 (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TracFastCgi
v2 v3 4 4 [[PageOutline(2-5, Contents, floated)]] 5 5 6 [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 amuch wider variety of web servers.6 [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. 7 7 8 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. … … 10 10 '''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]. 11 11 12 == Apache configuration 13 14 There are two FastCGI modules commonly available for Apache: `mod_fastcgi` and `mod_fcgid` (preferred). The latter is more up-to-date. 12 == Simple Apache configuration 13 14 There are two FastCGI modules commonly available for Apache: `mod_fastcgi` and 15 `mod_fcgid` (preferred). The latter is more up-to-date. 15 16 16 17 The following sections focus on the FCGI specific setup, see also [wiki:TracModWSGI#ConfiguringAuthentication] for configuring the authentication in Apache. 17 18 18 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`.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. 19 20 20 21 === Set up with `mod_fastcgi` 21 22 22 23 `mod_fastcgi` uses `FastCgiIpcDir` and `FastCgiConfig` directives that should be added to an appropriate Apache configuration file: 23 {{{ #!apache24 {{{ 24 25 # Enable fastcgi for .fcgi files 25 26 # (If you're using a distro package for mod_fcgi, something like … … 31 32 LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so 32 33 }}} 33 34 34 Setting `FastCgiIpcDir` is optional if the default is suitable. Note that the `LoadModule` line must be after the `IfModule` group. 35 35 36 Configure `ScriptAlias` or similar options as described in TracCgi, but calling `trac.fcgi` instead of `trac.cgi`. 36 Configure `ScriptAlias` or similar options as described in TracCgi, but 37 calling `trac.fcgi` instead of `trac.cgi`. 37 38 38 39 Add the following to the Apache configuration file (below the `FastCgiIpcDir` line) if you intend to set up the `TRAC_ENV` as an overall default: 39 {{{ #!apache40 {{{ 40 41 FastCgiConfig -initial-env TRAC_ENV=/path/to/env/trac 41 42 }}} 42 43 43 44 Alternatively, you can serve multiple Trac projects in a directory by adding this: 44 {{{ #!apache45 {{{ 45 46 FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects 46 47 }}} … … 49 50 50 51 Configure `ScriptAlias` (see TracCgi for details), but call `trac.fcgi` instead of `trac.cgi`: 51 {{{ #!apache52 {{{ 52 53 ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/ 53 54 }}} 54 55 55 Note the slash at the end. 56 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 the alternative environment setup below: 58 {{{#!apache 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. 58 59 {{{ 59 60 DefaultInitEnv TRAC_ENV /path/to/env/trac/ 60 61 }}} 61 62 62 === Alternative environment setup63 64 A better method to specify thepath 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:65 {{{ #!python63 === 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 {{{ 66 67 import os 67 68 os.environ['TRAC_ENV'] = "/path/to/projectenv" 68 69 }}} 69 70 70 or: 71 {{{ #!python71 {{{ 72 72 import os 73 73 os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/project/parent/dir" … … 77 77 78 78 See [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: 79 {{{ #!apache79 {{{ 80 80 ScriptAlias / /srv/tracsite/cgi-bin/trac.fcgi/ 81 81 }}} 82 82 83 == Cherokee Configuration84 85 Configuring [http://cherokee-project.com/ Cherokee] with Trac is straightforward, if you spawn Trac as an SCGI process. You can either start it manually, or better yet, automatically by letting Cherokee spawn the server whenever it is down.86 83 == Simple Cherokee Configuration 84 85 The configuration on Cherokee's side is quite simple. You will only need to know that you can spawn Trac as an SCGI process. 86 You can either start it manually, or better yet, automatically by letting Cherokee spawn the server whenever it is down. 87 87 First set up an information source in cherokee-admin with a local interpreter: 88 88 … … 98 98 99 99 After doing this, we will just have to create a new rule managed by the SCGI handler to access Trac. It can be created in a new virtual server, trac.example.net for instance, and will only need two rules. The '''default''' one will use the SCGI handler associated to the previously created information source. 100 The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''$TRAC_LOCAL/htdocs/'' (where $TRAC_LOCAL is a directory defined by the user or the system administrator to place local Trac resources). 101 102 '''Note:''' If the tracd process fails to start up, and Cherokee displays a 503 error page, you might be missing the [http://trac.saddi.com/flup python-flup] package ([trac:#9903]). Python-flup is a dependency which provides Trac with SCGI capability. You can install it on Debian based systems with: 103 {{{#!sh 100 The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''$TRAC_LOCAL/htdocs/'' (where $TRAC_LOCAL is a directory defined by the user or the system administrator to place local trac resources). 101 102 Note:\\ 103 If the tracd process fails to start up, and cherokee displays a 503 error page, you might be missing the [http://trac.saddi.com/flup python-flup] package.\\ 104 Python-flup is a dependency which provides trac with SCGI capability. You can install it on debian based systems with: 105 {{{ 104 106 sudo apt-get install python-flup 105 107 }}} 106 108 107 == Lighttpd Configuration109 == Simple Lighttpd Configuration 108 110 109 111 The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.lighttpd.net/ Lighttpd]. … … 155 157 }}} 156 158 157 Note that thefield 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.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. 158 160 Note that the above will result in different processes in any event, even if both are running from the same `trac.fcgi` script. 159 161 160 {{{#!div class=important 161 '''Note:''' The order in which the server.modules are loaded is very important: if mod_auth is not loaded '''before''' mod_fastcgi, then the server will fail to authenticate the user. 162 {{{ 163 #!div class=important 164 '''Note''' It's very important the order on which server.modules are loaded, if mod_auth is not loaded '''BEFORE''' mod_fastcgi, then the server will fail to authenticate the user. 162 165 }}} 163 166 … … 199 202 200 203 }}} 201 202 204 Note that Lighttpd (v1.4.3) stops if the password file doesn't exist. 203 205 … … 230 232 231 233 The 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. 232 233 Also there is another way to handle multiple projects and it uses `TRAC_ENV_PARENT_DIR` instead of `TRAC_ENV` as well as global authentication: 234 Also 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: 234 235 {{{ 235 236 # This is for handling multiple projects … … 275 276 ) 276 277 }}} 277 278 278 For details about languages specification see [trac:TracFaq TracFaq] question 2.13. 279 279 280 280 Other important information like the [wiki:TracInstall#MappingStaticResources mapping static resources advices] are useful for non-fastcgi specific installation aspects. 281 ] 281 282 282 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. 285 286 286 == !LiteSpeed Configuration287 == Simple !LiteSpeed Configuration 287 288 288 289 The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.litespeedtech.com/ LiteSpeed]. … … 291 292 292 293 1. Please make sure you have a working install of a Trac project. Test install with "tracd" first. 293 1. 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: 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: 294 296 {{{ 295 297 http://yourdomain.com/trac/ 296 298 }}} 297 1. Go "!TracVhost → External Apps" tab and create a new "External Application": 299 300 3. Go "!TracVhost → External Apps" tab and create a new "External Application". 298 301 {{{ 299 302 Name: MyTracFCGI … … 311 314 Instances: 10 312 315 }}} 313 1. Optional: If you need to use htpasswd based authentication. Go to "!TracVhost → Security" tab and create a new security Realm: 314 {{{ 316 317 4. Optional: If you need to use htpasswd based authentication. Go to "!TracVhost → Security" tab and create a new security Realm. 318 319 {{{ 315 320 DB Type: Password File 316 321 Realm Name: MyTracUserDB <--- any name you wish and referenced later 317 322 User DB Location: /fullpathto/htpasswd <--- path to your htpasswd file 318 323 }}} 319 If 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. 320 1. Go to "!PythonVhost → Contexts" and create a new FCGI Context: 321 {{{ 324 325 If 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. 326 327 5. Go to "!PythonVhost → Contexts" and create a new FCGI Context. 328 329 {{{ 322 330 URI: /trac/ <--- URI path to bind to python fcgi app we created 323 Fast CGI App: [VHost Level] MyTractFCGI <--- select the Trac fcgi extapp we just created331 Fast CGI App: [VHost Level] MyTractFCGI <--- select the trac fcgi extapp we just created 324 332 Realm: TracUserDB <--- only if (4) is set. select realm created in (4) 325 333 }}} 326 1. Modify `/fullpathto/mytracproject/conf/trac.ini`: 327 {{{ 334 335 6. Modify `/fullpathto/mytracproject/conf/trac.ini` 336 337 {{{ 328 338 #find/set base_rul, url, and link variables 329 339 base_url = http://yourdomain.com/trac/ <--- base url to generate correct links to … … 331 341 link = http://yourdomain.com/trac/ <--- link of graphic logo 332 342 }}} 333 1. Restart !LiteSpeed: `lswsctrl restart`, and access your new Trac project at {{{http://yourdomain.com/trac/}}}. 334 335 == Nginx Configuration 336 337 [http://nginx.org/en/ Nginx] is able to communicate with FastCGI processes, but can not spawn them. So you need to start FastCGI server for Trac separately. 343 344 7. Restart !LiteSpeed, “lswsctrl restart”, and access your new Trac project at: 345 346 {{{ 347 http://yourdomain.com/trac/ 348 }}} 349 350 == Simple Nginx Configuration 351 352 Nginx is able to communicate with FastCGI processes, but can not spawn them. So you need to start FastCGI server for Trac separately. 338 353 339 354 1. Nginx configuration with basic authentication handled by Nginx - confirmed to work on 0.6.32 340 {{{ #!nginx355 {{{ 341 356 server { 342 357 listen 10.9.8.7:443; … … 401 416 }}} 402 417 1. Modified trac.fcgi: 403 {{{ #!python418 {{{ 404 419 #!/usr/bin/env python 405 420 import os … … 432 447 433 448 }}} 434 1. Reload nginx and launch trac.fcgi:449 1. reload nginx and launch trac.fcgi like that: 435 450 {{{#!sh 436 451 trac@trac.example ~ $ ./trac-standalone-fcgi.py … … 438 453 439 454 The above assumes that: 440 * There is a user named 'trac' for running Trac instances and keeping Trac environments in its home directory441 * `/home/trac/instance` contains a Trac environment455 * There is a user named 'trac' for running trac instances and keeping trac environments in its home directory 456 * `/home/trac/instance` contains a trac environment 442 457 * `/home/trac/htpasswd` contains authentication information 443 * `/home/trac/run` is owned by the same group the Nginx runs under458 * `/home/trac/run` is owned by the same group the nginx runs under 444 459 * and if your system is Linux the `/home/trac/run` has setgid bit set (`chmod g+s run`) 445 * and patch from [trac:#7239]is applied, or you'll have to fix the socket file permissions every time446 447 Unfortunately Nginx does not support variable expansion in fastcgi_pass directive.460 * and patch from ticket #T7239 is applied, or you'll have to fix the socket file permissions every time 461 462 Unfortunately nginx does not support variable expansion in fastcgi_pass directive. 448 463 Thus it is not possible to serve multiple Trac instances from one server block. 449 464 450 465 If you worry enough about security, run Trac instances under separate users. 451 466 452 Another way to run Trac as a FCGI external application is offered in [trac:#6224].467 Another way to run Trac as a FCGI external application is offered in ticket #T6224 453 468 454 469 ---- 455 See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe]470 See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe]