Source: https://foxhop.net/f240510a-2f95-11f1-9afc-e86a64d24d78/django-virtualenv-apache-mod-wsgi
Snapshot: 2026-05-25T01:39:28Z
Generator: Remarkbox 1527ef7

This is a thread snapshot. The living document lives at the source URI above — it may have been edited, extended, or replied-to since.

Scan for living source

Django virtualenv Apache2 mod_wsgi

By the end of this article you will know how to deploy a Django web application using a python virtualenv, using an Apache2 webserver with mod_wsgi.

You should bookmark this page.

Why use wsgi and virtualenv?

Install virtualenv

  1. Install Setup tools:

    $ sudo apt-get install python-setuptools memcached

  2. Install virtualenv:

    $ sudo easy_install virtualenv

Create a virtualenv

  1. Move to the directory where you want to create the virtualenv:

    $ cd /www/lostquery.com

  2. Create python environment:

    $ virtualenv --no-site-packages virtpy

Install Django

  1. Activate the virtualenv:

    $ source virtpy/bin/activate

  2. The shell should have changed to (virtpy) $ . Run this command to install django to the virtualenv:

    # I know this version works... $ easy_install django==1.3.1

  3. Install any dependencies you will need to the virtualenv:

    $ easy_install MySQL-python markdown html5lib modwsgideploy python-openid South python-memcached

Install and configure the Django web application

  1. Get the sourcecode:

    $ svn co http://svn.osqa.net/svnroot/osqa/trunk

  2. Configure the application:

    $ cd trunk

    $ cp settings_local.py.dist settings_local.py

    $ vi settings_local.py

  3. You must tell the Django's application what database to use. Also configure memcached:

    # database settings DATABASE_NAME = 'databasename' # Or path to database file if using sqlite3. DATABASE_USER = 'username' # Not used with sqlite3. DATABASE_PASSWORD = '' # Not used with sqlite3. DATABASE_ENGINE = 'mysql' #mysql, etc DATABASE_HOST = 'localhost' DATABASE_PORT = ''

    # memcached settings (osqa is slow as dirt without this) CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

  4. Give apache access to a few directories, /trunk/log and /trunk/forum/upfiles:

    $ chmod 777 log $ chmod 777 forum/upfiles

  5. Create the database (example syntax to create a mySQL database).

    Let the django application build the tables in the new database:

    $ python manage.py syncdb --all $ python manage.py migrate forum --fake

Configure Apache2 VirtualHost

  1. Turn on mod_rewrite:

    $ a2enmod rewrite

  2. Create a sites-available vhost apache2 file:

    $ sudo vi /etc/apache2/sites-available/007-lostquery

  3. Setup the host file:

Configure mod_wsgi

  1. Create the egg-cache directory:

    $ mkdir /www/lostquery.com/mod_wsgi

    $ mkdir /www/lostquery.com/mod_wsgi/egg-cache

  2. Create the wsgi dispatch file:

    $ vi /www/lostquery.com/mod_wsgi/dispatch.wsgi

  3. Setup the wsgi dispatch file:

Enable the Virtual Host and reload Apache2

  1. Reset apache2 so that it reads in the new config files:

    $ a2ensite lostquery

    $ sudo service apache2 reload

fritzvd — Sep 28, 2011 11:31 pm

Hi,

Thanks this is great and exhaustive. Helped me host my django. One question though, I usually do this: Create sites and put them in: sites-available. Reload apache2 for a graceful restart. Call them/switch on:

a2ensite lostquery

/etc/init.d/apache2 reload

Is there any special reason why you don't do this?

Fritz

foxhop — Sep 29, 2011 05:00 pm

@fritzvd

I have recently started using the a2ensite method that you described.

Thanks for your input. I have adjusted the tutorial. Feel free to adjust anything you feel need work!

Foxhop


Source: https://foxhop.net/f240510a-2f95-11f1-9afc-e86a64d24d78/django-virtualenv-apache-mod-wsgi
Snapshot: 2026-05-25T01:39:28Z
Generator: Remarkbox 1527ef7