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.