Using runserver
makes things very easy for development — but it's only intended for
development on your local machine. Exposing your website to the public will require additional
work. You'll want to use a production web server, such as Apache or Nginx. In this short guide,
I'll show you how to deploy your Django application. Let's get started.
Deploying Django depends on what host you're running on. If you're on a shared host, chances are you'll have to use FastCGI — a program that connects your Django project to a web server. If you're on a VPS, you should use WSGI instead. This guide is for shared hosts only. Finally, if your web host has a control panel for installing Django applications — use that instead of following this guide.
Deploying with FastCGI
First, install Flup which is used so Django can talk to
FastCGI. Be sure to use the latest version, at the time of this writing it's 1.0.2
:
wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
tar xzvf flup-1.0.2.tar.gz
cd flup-1.0.2
cp -r flup /path/to/python/site-packages
Inside your public web directory, you'll want to create script to initate the FastCGI thread:
cd ~/path/to/public
touch dispatch.fcgi
chmod 755 dispatch.fcgi
vim dispatch.fcgi
Pase this program:
#!/usr/local/bin/python2.7
import sys
import os
sys.path.insert(0, '/path/to/local/lib/python2.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproj.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
Now running ./dispatch.fcgi
should launch your Django application! The only thing left to do
is redirect any web requests to your FastCGI process. You can do that using .htaccess
. Just
edit the file ~/path/to/public/.htaccess
:
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
That's it! Now when you head to your website's address in a browser, you should see your Django application running.