HOWTO setup Trac with Mercurial and Nginx
Development September 7th, 2009
“A goal is a dream with a deadline.” — Napleon Hill
Besides the configuration for Mercurial the preferred DVCS, A bug-tracking and project management tool is required to manage the timeline. Trac is my all-time favorite and it supports the Mercurial via TracMercurial plugin.
Before we move on, we need to rebuild the python-2.6 to get some missing modules with C extensions back:
sudo yum install bzip2-devel readline-devel gdbm-devel bsddb-devel ncurses-devel db4-devel sqlite-devel
# Rebuild the Python-2.6
./configure –prefix=/opt/python
make && sudo make install
Install Trac and MercurialTrac
PATH=/opt/python/bin:$PATH sudo trac-admin /var/trac/bloggo/ initenv
When repository type is prompted, use hg instead.
Then we install the MercurialTrac plugin globally, so it can be used later for other projects:
cd mercurial-plugin-0.11
python setup.py bdist_egg
sudo /opt/python/bin/easy_install dist/TracMercurial-0.11.0.7-py2.6.egg
Now it is time to run Trac in TracStandalone mode to verify the configuration in Trac side.
Configure Nginx to and FastCGI
The Trac instance is loaded via spawn-fcgi as other web applications using this script. The PATH is overrided to use python-2.6, and TRAC_ENV_PARENT_DIR is exported explicitly. I doubt this may contaminate other Trac instances, I will fix it later if so.
The multiple Trac instances are located in the /projects/ path, and we need HTTP Basic Auth to protect the entry point.
auth_basic “Trac”;
auth_basic_user_file “/var/trac/devpasswd”;
fastcgi_split_path_info ^(/projects)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9004;
}
location /projects/ {
fastcgi_split_path_info ^(/projects)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9004;
}
Any thoughts to refactor the configuration to eliminate the duplication?