This tutorial is out of date and no longer maintained.

Status: Deprecated This article is no longer being maintained. It uses a One-Click app that has been deprecated. See Instead: An updated version of this article is available here: How To Use the Django One-Click Install Image for Ubuntu 16.04. It uses the Django 1.8.7 on Ubuntu 16.04 One-Click app instead.



Django is a high-level Python framework for developing web applications rapidly. DigitalOcean’s Django One-Click app quickly deploys a preconfigured development environment to your VPS employing Django, Nginx, Gunicorn, and Postgres.

Creating the Django Droplet

To use the image, select Django on Ubuntu 14.04 from the Applications menu during droplet creation:

Once you create the droplet, navigate to your droplet’s IP address (http://your.ip.address) in a browser, and verify that Django is running:

You can now login to your droplet as root and read the Message of the Day, which contains important information about your installation:

This information includes the username and password for both the Django user and the Postgres database. If you need to refer back to this latter, the information can be found in the file /etc/motd.tail

Configuration Details

The Django project is served by Gunicorn which listens on port 9000 and is proxied by Nginx which listens on port 80.

Nginx

The Nginx configuration is located at /etc/nginx/sites-enabled/django :

upstream app_server { server 127.0.0.1:9000 fail_timeout=0; } server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; client_max_body_size 4G; server_name _; keepalive_timeout 5; # Your Django project's media files - amend as required location /media { alias /home/django/django_project/django_project/media; } # your Django project's static files - amend as required location /static { alias /home/django/django_project/django_project/static; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } }

If you rename the project folder, remember to change the path to your static files.

Gunicorn

Gunicorn is started on boot by an Upstart script located at /etc/init/gunicorn.conf which looks like:

description "Gunicorn daemon for Django project" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] # If the process quits unexpectedly trigger a respawn respawn setuid django setgid django chdir /home/django exec gunicorn \ --name=django_project \ --pythonpath=django_project \ --bind=0.0.0.0:9000 \ --config /etc/gunicorn.d/gunicorn.py \ django_project.wsgi:application

Again, if you rename the project folder, remember to update the name and pythonpath in this file as well.

The Upstart script also sources a configuration file located in /etc/gunicorn.d/gunicorn.py that sets the number of worker processes:

"""gunicorn WSGI server configuration.""" from multiprocessing import cpu_count from os import environ def max_workers(): return cpu_count() * 2 + 1 max_requests = 1000 worker_class = 'gevent' workers = max_workers()

More information on configuring Gunicorn can be found in the project’s documentation.

Django

The Django project itself is located at /home/django/django_project It can be started, restarted, or stopped using the Gunicorn service. For instance, to restart the project after having made changes run:

service gunicorn restart

While developing, it can be annoying to restart the server every time you make a change. So you might want to use Django’s built in development server which automatically detects changes:

service gunicorn stop python manage.py runserver localhost:9000

While convenient, the built in server does not offer the best performance. So use the Gunicorn service for production.

Writing Your First Django App

There are many resources that can provide you with an in-depth introduction to writing Django applications, but for now let’s just quickly demonstrate how to get started. Log into your server and switch to the django user. Now let’s create a new app in the project:

cd /home/django/django_project python manage.py startapp hello

Your directory structure should now look like:

. ├── django_project │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── hello │ ├── admin.py │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py └── manage.py

Next, we’ll create our first view. Edit the file hello/views.py to look like:

from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("Hello, world! This is our first view.")

Then, we can connect that view to a URL by editing django_project/urls.py

from django.conf.urls import patterns, include, url from hello import views from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', views.index, name='index'), url(r'^admin/', include(admin.site.urls)), )

After that, we can restart the project as root: service gunicorn restart

If you reload the page, you’ll now see:

Next Steps

Follow our Initial Server Setup guide to give sudo privileges to your user, lock down root login, and take other steps to make your VPS ready for production.

privileges to your user, lock down root login, and take other steps to make your VPS ready for production. Use Fabric to automate deployment and other administration tasks.

Check out the official Django project documentation.

<div class=“author”>By Andrew Starr-Bochicchio</div>