gorkon 10 Report post Posted April 3, 2008 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
matrix845 10 Report post Posted September 30, 2008 ottima guoda , grazie la metto nei preferiti!! Pierpaolo Share this post Link to post Share on other sites