How To Use the Django One-Click Install Image for Ubuntu 16.04
This article exists for historical reference and is no longer maintained.
Reason: This version is no longer available
- The latest Django One-Click Application documentation.
Django is a high-level Python framework for developing web applications rapidly. DigitalOcean's Django One-Click Application quickly deploys a preconfigured development environment to your VPS with Django, Nginx, Gunicorn, and Postgres.
Creating a Django Droplet
To create a Django Droplet, start on the Droplet creation page. In the Choose an image section, click the One-click apps tab and select the Django 1.8.7 on 16.04 image.
Next, select a size for your Droplet, your desired region, and any additional settings (like private networking IPv6 support, or backups). Add any SSH keys and fill in a hostname for your Droplet. When you're ready, click Create Droplet to spin up the server.
Once it's created, navigate to
http://your_server_ip in your favorite browser to verify that Django is running. You'll see a page with the header It worked! Congratulations on your first Django-powered page.
You can now log into to your Droplet as root.
- ssh root@your_server_ip
Make sure to read the Message of the Day, which contains important information about your installation, like the username and password for both the Django user and the Postgres database.
Login output------------------------------------------------------------------------------- Thanks for using the DigitalOcean Django One-Click Application Image The "ufw" firewall is enabled. All ports except for 22, 80, and 443 are BLOCKED. Let's Encrypt has been pre-installed for you. If you have a domain name, and you will be using it with this 1-Click app, please see: http://do.co/le-lemp Django is configured to use Postgres as the database back-end. You can use the following SFTP credentials to upload your files (using FileZilla/WinSCP/Rsync): Host: your_server_ip User: django Pass: 2fd21d69bb13890c960b965c8c88afb1 You can use the following Postgres database credentials: DB: django User: django Pass: 9853a37c3bc81bfc15f264de0faa9da5 Passwords have been saved to /root/.digitalocean_passwords
If you need to refer back to this later, you can find the information in the file
The Django project is served by Gunicorn, which listens on
/home/django/gunicorn.socket. Gunicorn is proxied by Nginx, which listens on port
The Nginx configuration file is located at
/etc/nginx/sites-enabled/django. If you rename the project folder, remember to change the path to your static files.
Gunicorn is started on boot by a Systemd file at
/etc/systemd/system/gunicorn.service. This Systemd script also sources a configuration file located at
/etc/gunicorn.d/gunicorn.py that sets the number of worker processes. You can find more information on configuring Gunicorn in the Gunicorn project's documentation.
The Django project itself is located at
Note: If you rename the project folder, you need to make a few configuration file updates. Specifically, you need to change the path to your static files in the Nginx configuration. You also need to update the
pythonpath in the Gunicorn Systemd file.
The project can be started, restarted, or stopped using the Gunicorn service. For instance, to restart the project after having made changes, run:
- systemctl restart gunicorn.service
While developing, it can be annoying to restart the server every time you make a change. In that case, you might want to use Django's built-in development server, which automatically detects changes:
- systemctl stop gunicorn.service
- python manage.py runserver 0.0.0.0:8000
You can then access the application through
http://your_server_ip:8000 in a browser. This built-in server does not offer the best performance, so it's best practice to use the Gunicorn service for production.
Writing Your First Django App
There are many in-depth guides on writing Django applications, but this step will just get you up and running with a very basic Django app.
If you haven't already, log into your server as root.
Next, switch to the django user.
- su django
Move into the project directory.
- cd /home/django/django_project
Now create a new app called
python manage.py startapp hello
This will create a new directory named
hello in the folder
django_project. The whole directory tree will be structured like this:
. ├── django_project │ ├── __init__.py │ ├── __init__.pyc │ ├── settings.py │ ├── settings.pyc │ ├── settings.py.orig │ ├── urls.py │ ├── urls.pyc │ ├── wsgi.py │ └── wsgi.pyc ├── hello │ ├── admin.py │ ├── __init__.py │ ├── migrations │ │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py └── manage.py
It's not necessary, but you can generate this output yourself with the
tree utility. Install it with
sudo apt-get install tree and then use
Next, create your first view. Open the file
hello/views.py for editing using
nano or your favorite text editor.
- nano hello/views.py
It'll look like this originally:
from django.shortcuts import render # Create your views here.
Modify it to match the following. This tells Django to return Hello, world! This is our first view. as an HTTP response.
from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("Hello, world! This is our first view.")
Save and close the flie. Next, we need to connect the view we just created to a URL. To do this, open
django_project/urls.py for editing.
- nano django_project/urls.py
Add the following two lines to the file, which imports the view you just created and sets it to the default URL:
. . . from django.conf.urls import include, url from django.contrib import admin from hello import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^admin/', include(admin.site.urls)), ]
Save and close the file, then log out of the django user and return to the root shell.
As root, restart the project.
- systemctl restart gunicorn.service
Now, if you reload your Droplet's IP address,
http://your_server_ip, you'll see a page with Hello, world! This is our first view.
You're ready to start working with Django. From here, you can: