--- layout: wiki title: TracCgi updated: 2020-06-20 21:43 author: trac default: true toc: true --- ## Installing Trac as CGI > ''Please note that using Trac via CGI is the slowest deployment method available. It is slower than [wiki:TracModWSGI mod_wsgi], [TracModPython mod_python], [TracFastCgi FastCGI] and even [trac:TracOnWindowsIisAjp IIS/AJP] on Windows.'' CGI script is the entrypoint that web-server calls when a web-request to an application is made. The \`trac.cgi\` script can be created using the \`trac-admin deploy \` command which automatically substitutes the required paths, see [TracInstall](/notes/TracInstall/)#cgi-bin. Make sure the script is executable by your web server. ### Apache web-server configuration In [Apache](https://httpd.apache.org/) there are two ways to run Trac as CGI: 1. Use a \`ScriptAlias\` directive that maps a URL to the \`trac.cgi\` script (recommended) 1. Copy the \`trac.cgi\` file into the directory for CGI executables used by your web server (commonly named \`cgi-bin\`). You can also create a symbolic link, but in that case make sure that the \`FollowSymLinks\` option is enabled for the \`cgi-bin\` directory. To make Trac available at \` add \`ScriptAlias\` directive to Apache configuration file, changing \`trac.cgi\` path to match your installation: ```apache ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.cgi ``` > ''Note that this directive requires that the `mod_alias` module is enabled.'' If you're using Trac with a single project you need to set its location using the \`TRAC_ENV\` environment variable: ```apache SetEnv TRAC_ENV "/path/to/projectenv" ``` Or to use multiple projects you can specify their common parent directory using the \`TRAC_ENV_PARENT_DIR\` variable: ```apache SetEnv TRAC_ENV_PARENT_DIR "/path/to/project/parent/dir" ``` > ''Note that the `SetEnv` directive requires that the `mod_env` module is enabled.'' An alternative to \`SetEnv\` is editing \`TRAC_ENV\` or \`TRAC_ENV_PARENT_DIR\` in \`trac.cgi\`: ```python os.environ['TRAC_ENV'] = "/path/to/projectenv" ``` ```python os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/parent/dir" ``` If you are using the [Apache suEXEC](https://httpd.apache.org/docs/suexec.html) feature please see trac:ApacheSuexec. On some systems, you *may* need to edit the shebang line in the \`trac.cgi\` file to point to your real Python installation path. On a Windows system you may need to configure Windows to know how to execute a \`.cgi\` file (Explorer -> Tools -> Folder Options -> File Types -> CGI). #### Python Egg Cache The egg-cache can be configured using an \`os.environ\` statement in \`trac.cgi\`, as shown above. To do the same from the Apache configuration, use the \`SetEnv\` directive: ```apache SetEnv PYTHON_EGG_CACHE /path/to/dir ``` Put this directive next to where you set the path to the [Trac environment](/notes/TracEnvironment/), i.e. in the same \`\` block. ```apache SetEnv TRAC_ENV /path/to/projenv SetEnv PYTHON_EGG_CACHE /path/to/dir ``` #### Using WSGI You can run a [WSGI handler](http://henry.precheur.org/python/how_to_serve_cgi) [under CGI](https://thejimmyg.github.io/pythonweb/projects/webmodules/doc/0.5.3/html_multipage/lib/example-webserver-web-wsgi-simple-cgi.html). You can write your own application function, or use the deployed trac.wsgi's application. ### Mapping Static Resources See [TracInstall](/notes/TracInstall/)#MappingStaticResources. ### Adding Authentication See [TracInstall](/notes/TracInstall/)#ConfiguringAuthentication. --- See also: [TracInstall](/notes/TracInstall/), [TracModWSGI](/notes/TracModWSGI/), [TracFastCgi](/notes/TracFastCgi/), [TracModPython](/notes/TracModPython/)