Web2py Lighttpd Deployment
Sun, 19 Feb 2012 07:29:07 +0000
Web2py is "full stack" Python Web Framework, Lighttpd is fast, multi-threaded HTTP server. I'll present a method to connect web2py-based application under lighttpd.
I assume the following setup is already done:
- A domain named "myapp.com" is configured to point to your server
- Python / lighttpd is already installed on server
- Your web2py app is placed under /var/www/web2py
- Your web2py app has application "myapproot" configured
First of all, you have to configure lighttpd to locate web2py application, create file /etc/lighttpd/conf-enabled/myapp.conf:
$HTTP["host"] =~ "(www\.)?myapp\.com" { server.indexfiles = ( "/myapproot" ) server.document-root = "/var/www/myapp" server.dir-listing = "disable" fastcgi.server = ( ".fcgi" => ("localhost" => ( "check-local" => "disable", "min-procs" => "1", "max-procs" => "2", "socket" => "/tmp/myapp.sock") ) ) url.rewrite-once = ( "^/$" => "/ad", "^(/.+?/static/.+)$" => "/applications$1", "(^|/.*)$" => "/fcgihandler.fcgi$1", ) $HTTP["url"] !~ "^(/ad|/fcgihandler.fcgi|/applications/myapproot/static/)" { url.access-deny = ("") } }
Explanation:
- (www\.)?myapp\.com: regular expression to match domain with or without "www." prefix
- server.indexfiles: specifies relative URL that should be called when only domain is given
- server.document-root: specifies location of web2py app in filesystem
- server.dir-listing: we do not want user to list our files using HTTP
- fastcgi.server: specifies where socket file is located
- url.rewrite-once: allow to use elegant (short) URLs
- url.access-deny: files other than static directory should be forbidden (security)
Then you have to configure fcgihandler.fcgi script properly:
(...) fcgi.WSGIServer(application, bindAddress='/tmp/myapp.sock').run()
Note that /tmp/myapp.sock must be the same as specified in lighttpd configuration.
Then you have to start the fcgihandler.fcgi proces and ensure it will start on every boot. That's all.