Django, Apache and mod_wsgi on Ubuntu 10.04 (Lucid) | Deployment

Set the Hostname

Before you begin installing and configuring the components described in this guide, please make sure you’ve followed our instructions for setting your hostname. Issue the following commands to make sure it is set properly:

hostname -f

The first command should show your short hostname, and the second should show your fully qualified domain name (FQDN).

Install Dependencies

Issue the following commands to ensure that your system’s package repositories and installed programs are up to date and all required software is installed:

apt-get update
apt-get upgrade
apt-get install python-setuptools libapache2-mod-wsgi

Additionally you will need to install a database system and a python driver for this database system. If you want to run the MySQL database engine issue the following command:

apt-get install mysql-server python-mysqldb

If you want to run the PostgreSQL database server issue the following command:

apt-get install postgresql python-psycopg2

If you want to use the SQLite embedded database, issue the following command:

apt-get install sqlite3 python-sqlite

Your application may require additional dependencies. You may install these either using the Ubuntu package tools or by using the easy_install command included inpython-setuptools.

Install Django

There are two methods for installing Django. You may either choose to install the Django packages from the Ubuntu repositories, or you can install using the pythoneasy_install method. If you choose to install using the Ubuntu packages you will work with the 1.1.1 version of the framework, but you will have the benefit of ongoing security and bug fixes from the Ubuntu maintainers. To install Django from the Ubuntu repositories issue the following command:

apt-get install python-django

If you want to install Django using the easy_install tool, issue the following command:

easy_install Django

At the time of writing, this will install version 1.2.5 of the Django framework. Consider the package information for Django for more information.

Configure Django Applications for WSGI

In order for mod_wsgi to be able to provide access to your Django application, you will need to create a django.wsgi file inside of your application directory. For the purposes of this example, we assume that your application will be located outside of your DocumentRoot in the directory /srv/www/ Modify this example and all following examples to conform to the actual files and locations used in your deployment.


import os
import sys


os.environ['PYTHON_EGG_CACHE'] = '/srv/www/'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

You must append the path of your application to the system path as above. Additionally, declaration of the PYTHON_EGG_CACHE variable is optional but may be required for some applications when WSGI scripts are executed with the permissions of the web server. Finally, the DJANGO_SETTINGS_MODULE must refer to the file for your project. You will need to restart Apache after modifying the django.wsgi file.

Configure Apache

Consider the following example virtual host configuration:

File excerpt:Apache Virtual Host Configuration


   DocumentRoot /srv/www/

   WSGIScriptAlias / /srv/www/
   <Directory /srv/www/>
      Order allow,deny
      Allow from all

   Alias /robots.txt /srv/www/
   Alias /favicon.ico /srv/www/
   Alias /images /srv/www/
   Alias /static /srv/www/

   ErrorLog /srv/www/
   CustomLog /srv/www/ combined

In this example, the WSGIScriptAlias directive tells Apache that for this virtual host, all requests below / should be handled by the WSGI script specified. In the directory block that follows, we allow Apache to serve these requests. Finally, the series of four Alias directives allow Apache to serve the robots.txt and favicon.ico files as well as all resources beneath the /images and /static locations, directly from the DocumentRoot without engaging the WSGI application. You can add as many Alias directives as you need to.

When you have successfully configured your Apache virtual host, issue the following command to restart the web server:

/etc/init.d/apache2 restart

You will need to restart the web server every time the django.wsgi file changes. However, all other modifications to your application do not require a web server restart. Congratulations! You have now successfully deployed a Django application using mod_wsgi.


Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s