This article is mainly of interest to web developers who might want to publish a site built with the Django web framework in a lightweight fashion (without involving Apache).
First, let me enumerate the stack that is serving this page to you right now.
- Hosting: VPS Hosting from ARP Networks
- Operating System: Ubuntu Server Edition 10.04
- Reverse proxy server (and file server): Nginx
- Web server: Tornado
- Web framework: Django
- Database: MySQL
Here is my Tornado script which I partially plagiarized from somewhere:
#! /usr/bin/env python
import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import sys
import django.core.handlers.wsgi
sys.path.append('/some/folder/here/myapp')
def main():
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
application = django.core.handlers.wsgi.WSGIHandler()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(8001, "127.0.0.1")
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
I'm serving up this script with Supervisor by creating a script in /etc/supervisor/conf.d/ called myapp.conf and it looks like this:
[program:myapp] command=/some/folder/here/scripts/mytornadoscript.py
This is the nginx config:
server {
listen 80;
server_name deliciousrobots.com;
rewrite ^ http://blog.deliciousrobots.com$request_uri?;
}
server {
listen 80;
server_name blog.deliciousrobots.com;
root /some/folder/here;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
expires 30d;
}
location /wp-content/ {
expires 30d;
}
location /media/ {
root /usr/share/pyshared/django/contrib/admin;
}
}
I needed the wp-content from my old wordpress blog because of some image I had uploaded. That's it!

