School is a twelve-year jail sentence where bad habits are the only curriculum truly learned.
John Taylor Gatto
A Django deployment guide for Ubuntu
There's a time when every Django developer has to think about deployment scenarios, when I first did it last year I thought that a setup involving Lighty, Apache, mod_proxy and mod_python was a good choice but my first approach was not the best. I put Apache as the front server, handling requests for Django generated pages and passing, via mod_proxy, requests for static content to Lighty on the back. A setup where Apache had to work even for files that wasn't supposed to serve was a very bad idea.
After many helpful comments and some more reading I realized that it was better having the server for static content on the front and Apache, which still talks to Django, on the back.
I replaced Lighty with nginx, which according to many seems to be more stable, and opted for mod_wsgi instead of mod_python to make Apache talk to Django. mod_wsgi has a lower memory overhead and it's suitable for high performance sites. There's no need for mod_proxy on Apache anymore as nginx is the one in charge of the proxy work now.
This is an easy to follow and very focused guide for developers who know how to handle their servers so I won't consider security issues, memcached, Django installation, databases or basic GNU/Linux, Apache and DNS settings. Of course all of those subjects are important and you should take care of them.
The plan
This guide includes all the steps needed to:
- Setup a domain for your Django project.
- Create a simple directory layout for Django sites.
- Configure Apache with mod_wsgi for Django.
- Configure nginx.
- Serve Django admin media files.
- Turn on the heat and show your greatest and latest Django stuff to the world.
After following all the steps you will have a Django site running with nginx on the front and Apache on the back. nginx will manage all static content and will pass Django requests to Apache and mod_wsgi.
I have tested on three Ubuntu servers (two running 8.10, Intrepid Ibex, and one 7.10, Gutsy Gibbon) but everything should be pretty similar in other GNU/Linux distributions.
Shall we start?
How to setup Apache, mod_python and a reverse proxy to Lighttpd for Django on Ubuntu
Update: I don't recommend this setup anymore. Use the improved setup of Django with nginx, Apache and mod_wsgi.
It's October 2008 and there's no doubt now that serious web development requires working with frameworks, software that allows us, lazy coders, to forget about repetitive tasks and focus on the specifics of each project, the stuff that makes them truly unique.
It's pretty obvious too that Django, the Python based web framework, is attracting more developers and companies lately. Guido is a googler since 2005 and the recently launched Google App Engine uses Python and Django. Seriously, there's not a better time to jump into the Django train (no pun intended RoR guys).
Experienced programmers can start writing Django applications quickly thanks to the excellent documentation and the free Django book. I've also read and can recommend Practical Django Projects, by James Bennett, part of the Django team, and Learning Website Development with Django, by Ayman Hourieh, a very smart and young Google engineer.
Django is really a web framework for perfectionists with deadlines. I'm very near to one and have almost finished coding what will be my first Django based application for Facebook. Yes, I've got a few articles about that coming soon as well.
So, everything looks great under the Sun on Djangoland? Well, there's something that bothered me since I started a few months ago: deployment on a production environment. The documentation and most books get us up and running quickly with the included development server and then just refer us to the recommended Apache and mod_python settings for more.
Unfortunately, specially if you're used to the common Linux, Apache, MySQL and PHP setup, like I was, you may be need more detailed instructions and that's why I decided to write this tutorial on how to setup Apache, mod_python and a reverse proxy to Lighttpd for Django.
PYTHONPATH and configuring Django with Apache and mod_python
One more post about my experience coding a Django application for Facebook. Let's discuss a little about correctly setting up Apache and mod_python.
Most of the steps are very well described on Django's documentation but you may need a few more details. Let's see.



Recent comments
19 weeks 15 hours ago
19 weeks 1 day ago
19 weeks 4 days ago
20 weeks 5 days ago
22 weeks 2 days ago
24 weeks 1 day ago
24 weeks 3 days ago
25 weeks 6 days ago
25 weeks 6 days ago
26 weeks 3 days ago