Setup Trac project on Debian Wheezy with Apache using the mod_wsgi and Basic Authentication

I had a lot of trouble understanding the Trac install instruction on the Trac project homepage. Maybe I’m getting old 🙂 Anyhow, I decided to create this step by step tutorial so that I have something easy to return too the next time I need to setup a new Trac project. In this tutorial I assume that all the necessary programs (Apache (with mod_wsgi), Trac and SQlite) are already installed

So lets start off by creating a folder to put our project in:

mkdir /var/trac/my_project

I place my trac instances in /var/trac/ but you can use almost any location

Now lets use trac-admin to create the project

trac-admin /var/trac/my_project initenv
trac-admin /var/trac/my_project deploy /tmp/deploy

The project is now created and deployed, but I have deployed it to /tmp – strange? I certainly think so but it’s apparently the preferred way. Somehow trac-admin can not deploy the necessary script into you project folder. You have to copy them there yourself. Editors note: Why can’t this be done automatically in the creation of the project

mv /tmp/deploy/* /var/trac/my_project/

This now moves the created scripts in htdocs and cgi-bin folders to your project

Now we need to set the correct ownership (this is not my strong suite so please report any errors) of the project files:

chown -R www-data:www-data /var/trac/my_project

Now it’s time to create a password file for the project since I normally only use Basic Authentication for my Trac projects:

htpasswd -c /var/trac/my_project/.trac.htpasswd niklas

This creates the user niklas inside the password files (you will be promted for a password)

To add more users just drop the -c option like this

htpasswd /var/trac/my_project/.trac.htpasswd another_user

To tighten up the security somewhat we set owner and permission on the password file like this:

chmod 640 /var/trac/my_project/.trac.htpasswd
chown root:www-data /var/trac/my_project/.trac.htpasswd

Now lets add these users to the trac project also. First the admin, niklas

trac-admin /var/trac/my_project permission add niklas TRAC_ADMIN

and then a user with basic privileges (create tickets, read wiki, timeline, milestones and such):

trac-admin /var/trac/my_project permission add anotheruser authenticated

We are now finally done with the project files. Time to move on to the Apache configuration. For this I create a file in the conf.d folder of the Apache installation like this:

vim /etc/apache2/conf.d/my_project

In this file I put the following:

<Directory /var/trac/my_project/cgi-bin/trac.wsgi>
  WSGIApplicationGroup %{GLOBAL}
  Order deny,allow
  Allow from all

<VirtualHost *>
  WSGIScriptAlias /trac/my_project /var/trac/my_project/cgi-bin/trac.wsgi
  <Location '/trac/my_project'>
    AuthType Basic
    AuthName "Trac"
    AuthUserFile /var/trac/my_project/.trac.htpasswd
    Require valid-user

Now its finally time to test the new project. Restart Apache

/etc/init.d/apache2 restart

If all goes well you should now be able to find your new Trac project at http://localhost/trac/my_project. You should also be promted for a login when you arrive there

Tested on Debian Wheezy v7.0 with Apache 2 v2.2.22-13 and Trac v0.12.3

  1. Thanks! I finally got my trac working with your help.
    Just a suggestion: site configuration should be in ‘/etc/apache2/sites-available/’ and not in ‘/etc/apache2/conf.d/’

    Thanks again!

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>