Releasing the site on production

Setting Boorunaut on Heroku with PostgreSQL

Boorunaut is only compatible with Python 3. Check which version is instaled with the command python. You may be required to use the commands python3 and pip3 instead of python and pip.

To install Boorunaut on a Heroku server, you will need to make some changes on the default settings to make it work with PostgreSQL.

First, create a project for your site:

pip install Boorunaut
boorunaut startproject mysite

Once it's done, you need to add Heroku-related files. Create a requirements.txt file on the root of the project with:

Boorunaut==0.1
psycopg2==2.7.6.1
gunicorn==19.9.0

You will probably want to create a virtual environment here and install the requirements.txt with pip to test your project. DigitalOcean has a tutorial for testing on Ubuntu (link).

Create a Procfile for Heroku:

web: gunicorn <mysite>.wsgi --log-file -

Configuring the settings.py file

You will need to make some adjustments to the default settings.py generated to use in production. These involve configurating a new database and transforming sensitive data into environment variables (an security measure).

Automatic configuration

Heroku has an library for automating the configuration of Django apps with Heroku sites, django-heroku. You need to add to your requirements.txt:

requirements.txt
django-heroku==0.3.1

Then, add to the end of your settings.py:

settings.py
# Configure Django App for Heroku.
import django_heroku
django_heroku.settings(locals())

Manual configuration

Firstly, you will need to turn your SECRET_KEY into an enviroment variable.

settings.py
...
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', "DEFAULT_VALUE")
...

Then you can change the default SQLite database with a backend better suited for production.

For PostgreSQL (better compatibility with Heroku), replace the DATABASES variable content with:

settings.py
from urllib.parse import urlparse

db_credentials = urlparse(os.environ.get('DATABASE_URL'))
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': db_credentials.path[1:],
        'USER': db_credentials.username,
        'PASSWORD': db_credentials.password,
        'HOST': db_credentials.hostname,
        'PORT': db_credentials.port,
    }
}

Remember to set environment variables on Heroku with the details of your PostgreSQL database and secret key.

Add your website on ALLOWED_HOSTS:

settings.py
...
ALLOWED_HOSTS = ['<mysite>.herokuapp.com']
...

Publishing

Once the configuration is done, you can initialize git on your project (if haven't already), commit the changes and be ready to push it to Heroku.

Remember to set DEBUG to False on settings.py before sending to production!

Last updated