Dans certaines configurations Trac peut être très lent. Par exemple si vous utilisez le module fastcgi pour Trac et qu’en même temps le module deflate est actif sur le serveur (on en parle sur les listes de diffusion et dans les tickets).
Comme préconisé dans la documentation de Trac, on va utiliser mod_wsgi pour Trac et servir les ressources statiques (images, javascript, feuilles de style, etc) à l’aide d’Apache.
Servir les ressources statiques avec Apache
On copie les ressources statiques dans /var/trac/deploy :
- trac-admin /var/trac/domaine.tld/ deploy /var/trac/deploy
Et on ajoute les lignes suivantes en début du virtualhost de Trac avant la ligne de la directive ScriptAlias :
- Alias /trac/domaine.tld/chrome/ /var/trac/deploy/htdocs/
- <Directory "/var/trac/deploy/htdocs">
- Order allow,deny
- Allow from all
- </Directory>
Utiliser le mod_wsgi
On installe le paquet mod_wsgi pour apache (ceci active le module automatiquement dans /etc/apache2/mods-enabled/).
- sudo apt-get install libapache2-mod-wsgi
On vérifie que le module a bien été activé. La commande suivante doit vous répondre "Module wsgi already enabled" :
- a2enmod wsgi
Dans le cas contraire le module est activé par la commande.
Et on ajoute les lignes suivantes au virtualhost de Trac :
- # On utilise la methode wsgi pour trac
- WSGIScriptAlias /trac /var/trac/deploy/cgi-bin/trac.wsgi
- <Directory /var/trac/domaine.tld>
- WSGIApplicationGroup %{GLOBAL}
- Order deny,allow
- Allow from all
- </Directory>
Le fichier d’hôte virtuel final
Notre virtualhost doit maintenant contenir ceci :
- <VirtualHost *:80>
- ServerAdmin admin@domaine.tld
- ServerName svn.domaine.tld
- DocumentRoot /var/trac/domaine.tld
- #Gerer les fichiers statiques par Apache
- Alias /trac/domaine.tld/chrome/ /var/trac/deploy/htdocs/
- <Directory "/var/trac/deploy/htdocs">
- Order allow,deny
- Allow from all
- </Directory>
- # On utilise la méthode wsgi pour trac
- WSGIScriptAlias /trac /var/trac/deploy/cgi-bin/trac.wsgi
- <Directory /var/trac/domaine.tld>
- WSGIApplicationGroup %{GLOBAL}
- Order deny,allow
- Allow from all
- </Directory>
- <Location /trac>
- SetEnv TRAC_ENV "/var/trac/domaine.tld"
- Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
- Order allow,deny
- Allow from all
- </Location>
- # L'authentification pour trac est basée sur les même utilisateurs qu'en svn
- <Location "/trac/login">
- AuthType Basic
- AuthName "Trac"
- AuthUserFile /var/svn/domaine.tld/conf/passwd
- Require valid-user
- </Location>
- DirectoryIndex trac/
- ErrorLog /var/log/apache2/error.trac-arscenic.log
- CustomLog /var/log/apache2/access.trac-arscenic.log combined
- LogLevel debug
- <Location /svn>
- DAV svn
- SVNPath /var/svn/domaine.tld
- # our access control policy
- # try anonymous access first, resort to real
- # authentication if necessary.
- # how to authenticate a user
- AuthType Basic
- AuthName "Arscenic Subversion repository"
- AuthUserFile /var/svn/domaine.tld/conf/passwd
- Satisfy Any
- AuthzSVNAccessFile /var/svn/domaine.tld/conf/authz
- Require valid-user
- </Location>
- </VirtualHost>
Et pour finir on redémarre apache pour prendre en compte toutes ces modifications.
- /etc/init.d/apache2 restart
Sources :