HOWTO setup Trac with Mercurial and Nginx
nginx python devopsA goal is a dream with a deadline. – Napleon Hill
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:
# Install the following development package to build python modules
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
sudo /opt/python/bin/easy\_install http://svn.edgewall.org/repos/trac/tags/trac-0.11
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:
svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
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 overridden 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.
location ~ /projects/[^/]+/login {
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?