Setup Trac w/ multiple projects, mod_wsgi, LDAP & MySQL – Ubuntu 12.10
Table of Contents [hide]
Installation ∞
sudo apt-get install -y apache2 libapache2-mod-python python-setuptools python-genshi mysql-server python-mysqldb easy_install a2enmod #< Base Packages sudo apt-get install -y libapache2-mod-wsgi #< WSGI support sudo apt-get install -y subversion #< Subversion (not covering the config) sudo easy_install trac #< Trac
Prep MySQL ∞
- Log in
mysql -u root -p$PASSWORD
- Create the database. If setting up multiple instances, you will want to replace trac with a unique project name.
CREATE DATABASE trac DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
- Setup MySQL Permissions
GRANT ALL ON trac.* TO trac@localhost IDENTIFIED BY '$NOT_THE_ROOT_PASSWORD';
- Exit
exit
Configure Trac ∞
- Create Trac User
sudo useradd trac_project
- Create Trac projects directory
sudo mkdir -p /var/lib/trac/sites
- Create a directory for each of the Trac projects
sudo mkdir /var/lib/trac/sites/trac_project
- Create the shared egg_cache directory
sudo mkdir /var/lib/trac/eggs
- Initialize the project with trac-admin.
sudo trac-admin /var/lib/trac/trac_project initenv
- Fill in the prompts, when asked for the
Database connection string
, input the MySQL information from abovemysql://trac:mysqluserpassword@localhost/trac
Apache Config (WSGI – mod_fcgid) ∞
- Enable mod_rewrite
sudo a2enmod rewrite
- Create the www directory
mkdir /var/www/trac
- Generate the cgi scripts for each project
trac-admin /var/lib/trac/trac_project deploy /var/www/trac/trac_project
- Create the parent env wsgi file
sudo nano /var/www/trac/trac.wsgi
import sys sys.stdout = sys.stderr import os os.environ['TRAC_ENV_PARENT_DIR'] = '/var/lib/trac/sites' os.environ['PYTHON_EGG_CACHE'] = '/var/lib/trac/eggs' import trac.web.main application = trac.web.main.dispatch_request
- Create the script alias in Apache configuration
# Trac WSGI WSGIDaemonProcess trac_project user=trac_project group=trac_project threads=25 WSGIDaemonProcess poroject_2 user=poroject_2 group=poroject_2 threads=25 #< Sample of how to add another Trac instance RewriteEngine On RewriteCond %{REQUEST_URI} ^/trac/([^/]+) RewriteRule . - [E=trac.process_group:%1,\ E=trac.env_path:/var/lib/trac/sites/%1] WSGIScriptAliasMatch ^/trac/([^/]+) /var/www/trac/trac.wsgi <Directory /var/www/trac> WSGIProcessGroup %{ENV:trac.process_group} WSGIApplicationGroup %{GLOBAL} Order allow,deny </Directory> # For LDAP Auth through Apache <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac Authentication" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPBindDN "binduser@domain.com" AuthLDAPBindPassword "$BIND_USER_PASSWD" AuthLDAPURL "ldap://$LDAP_SERVER:389/DC=domain,DC=com?sAMAccountName?sub?(&(objectClass=organizationalPerson))" Require valid-user </LocationMatch>
- Modify the permissions so that the specified user can work with the directory
sudo chown -R trac_project:trac_project /var/lib/trac
- Edit the trac configuration to enable the login form
sudo nano /var/lib/trac/trac_project/conf/trac.ini
[account-manager] authentication_url = /trac/login password_store = HttpAuthStore [components] acct_mgr.http.HttpAuthStore = enabled
- Make sure the cgi paths are executable by the web server
chmod -R +x /var/www/trac
- Restart web server
sudo service apache2 restart
- Now going to $URL/trac/$PROJECT will take you to your newly created project.
- You will need to add your LDAP user to the admin group of all the projects
sudo trac-admin /var/lib/trac/trac_project permission add $LDAP_USER TRAC_ADMIN
Credits ∞
http://trac.edgewall.org/wiki/Ubuntu-11.04-Subversion
http://trac.edgewall.org/wiki/TracFastCgi
http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac
Gracias.
De Nada – Thanks for reading my blog!