Jump to content
Sign in to follow this  
gorkon

[Guida] Trac, lighttpd e vhost

Recommended Posts

Ultimamente ho fatto il "salto" da apache2 a lighttpd. La cosa non è stata traumatica se non per un vhost con un'applicazione un po' particolare: Trac.

 

Questa piccola guida descrive come creare un virtual host dedicato a Trac su lighttpd. Ho dato per scontato che sappiate come installare e configurare un ambiente trac, in caso contrario vi conviene studiare la documentazione ufficiale e poi continuate a leggere.

Il sistema di riferimento è Debian Etch, ma la cosa può funzionare tranquillamente (forse) su altre distro/sistemi operativi.

 

Prerequisiti:

- Lighttpd 1.4.1x

- Trac 0.10.x

 

Non è strettamente necessario, ma vi consiglio di utilizzare AccountManagerPlugin (e quindi WebAdmin) per gestire l'autenticazione e gli utenti. Se volete utilizzare l'autenticazione standard di Trac dovrete aggiungere le righe relative nella configurazione di lighttpd.

 

Il primo passo da effettuare è anche quello più spinoso e che farà arricciare il naso a molti puristi: patchare /usr/share/python-support/trac/trac/web/main.py.

Purtroppo, mod_fastcgi di lighttpd non imposta correttamente PATH_INFO e SCRIPT_NAME se l'url a cui è associato l'handler termina per "/" - nel nostro caso è proprio "/" - e dal canto suo, trac onora TRAC_URI_ROOT solo come opzione di mod_python e non come variabile d'ambiente (al contrario di quanto dichiara la documentazione).

 

Cercate queste righe (intorno alla riga 325):

        environ.setdefault('trac.template_vars',
                          os.getenv('TRAC_TEMPLATE_VARS'))
       environ.setdefault('trac.locale', '')

ed aggiungete subito dopo (mi raccomando, rispettate gli spazi!):

        uri_root_path = os.getenv('TRAC_URI_ROOT')

       if uri_root_path:
           root_uri = uri_root_path.rstrip('/')
           request_uri = environ['REQUEST_URI'].split('?', 1)[0]
           if not request_uri.startswith(root_uri):
               raise ValueError('TracUriRoot set to %s but request URL '
                                'is %s' % (root_uri, request_uri))
           environ['SCRIPT_NAME'] = root_uri
           environ['PATH_INFO'] = urllib.unquote(request_uri[len(root_uri):])

Salvate e ricompilate main.pyc (dipende dalla vostra distribuzione, su debian basta un dpkg-reconfigure trac).

 

Risolto questo problema, passiamo a lighttpd.

Create un file dentro /etc/lighttpd/conf-available (ad esempio 99-devel.conf - il nome deve essere nn-NOME.conf) con contenuto simile a questo:

# Se usate mod_fastcgi anche in altri contesti caricatelo direttamente
# da lighttpd.conf ed omettete la riga successiva
server.modules += ( "mod_fastcgi", )
$HTTP["host"] == "vhost.dominio.tld" {
   server.document-root = "/path/to/trac/env"

   alias.url = (
       "/chrome/common/" => "/usr/share/trac/htdocs/",
       "/chrome/site/"   => "/path/to/trac/env/htdocs/",
       ""                => "/usr/share/trac/cgi-bin/trac.fcgi",
   )

   $HTTP["url"] =~ "^/chrome/(common|site)/" {
       # Bypassa trac per il contenuto statico
   }
   else $HTTP["url"] =~ "^/" {
       fastcgi.server = (
           "/" => (
               (
                   "bin-path"        => "/usr/share/trac/cgi-bin/trac.fcgi",
                   "socket"          => "/tmp/trac-vhost_name.sock",
                   "check-local"     => "disable",
                   "disable-time"    => 1,
                   "min-procs"       => 1,
                   "max-procs"       => 1,
                   "bin-environment" => (
                       "TRAC_ENV"      => "/path/to/trac/env",
                       "TRAC_URI_ROOT" => "/",
                   ),
               ),
           ),
       )
   }
}

dove /path/to/trac/env è il percorso assoluto dell'ambiente trac da esportare. Se usate un wrapper (ad es. uno script che invoca trac.fcgi tramite suexec) sostituitelo ad ogni occorrenza del CGI.

L'alias per /chrome/site/ ed il relativo branch nel conditional successivo vanno definiti solo se avete delle risorse personalizzate (modifiche al template, immagini, ecc. ecc.).

 

Fatto questo, abilitate il conf e riavviate lighttpd (sostituite a devel NOME):

# lighty-enable-mod devel
# invoke-rc.d lighttpd force-reload

 

Happy trac-ing :)

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×