The goal for the development environment and deployment is to keep them as similar as possible.
Using Ansible, Vagrant, Docker, Travis-CI.
Vagrant is for local development. It will use the Ansible script to provision itself (using Ansible local).
The same Ansible script will be used to set up a production server to run the application. The main difference will be the Django settings
file used. The production Django settings file needs to be kept private. This means deploying to production will stay a manual task for now.
Ansible will also deploy the web app, using Ansistrano.
This can be tested using Travis CI and Docker.
Use uWSGI and nginx to run the Django application. Django docs, uWSGI docs.