Skip to content

Latest commit

 

History

History
128 lines (78 loc) · 3.74 KB

deployment-on-heroku.rst

File metadata and controls

128 lines (78 loc) · 3.74 KB

Deployment on Heroku

Heroku

Script

Run these commands to deploy the project to Heroku:

heroku create --buildpack heroku/python

heroku addons:create heroku-postgresql:hobby-dev
# On Windows use double quotes for the time zone, e.g.
# heroku pg:backups schedule --at "02:00 America/Los_Angeles" DATABASE_URL
heroku pg:backups schedule --at '02:00 America/Los_Angeles' DATABASE_URL
heroku pg:promote DATABASE_URL

heroku addons:create heroku-redis:hobby-dev

# Assuming you chose Mailgun as mail service (see below for others)
heroku addons:create mailgun:starter

heroku config:set PYTHONHASHSEED=random

heroku config:set WEB_CONCURRENCY=4

heroku config:set DJANGO_DEBUG=False
heroku config:set DJANGO_SETTINGS_MODULE=config.settings.production
heroku config:set DJANGO_SECRET_KEY="$(openssl rand -base64 64)"

# Generating a 32 character-long random string without any of the visually similar characters "IOl01":
heroku config:set DJANGO_ADMIN_URL="$(openssl rand -base64 4096 | tr -dc 'A-HJ-NP-Za-km-z2-9' | head -c 32)/"

# Set this to your Heroku app url, e.g. 'bionic-beaver-28392.herokuapp.com'
heroku config:set DJANGO_ALLOWED_HOSTS=

# Assign with AWS_ACCESS_KEY_ID
heroku config:set DJANGO_AWS_ACCESS_KEY_ID=

# Assign with AWS_SECRET_ACCESS_KEY
heroku config:set DJANGO_AWS_SECRET_ACCESS_KEY=

# Assign with AWS_STORAGE_BUCKET_NAME
heroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=

git push heroku master

heroku run python manage.py createsuperuser

heroku run python manage.py check --deploy

heroku open

Notes

Email Service

The script above assumes that you've chose Mailgun as email service. If you want to use another one, check the documentation for django-anymail to know which environment variables to set. Heroku provides other add-ons for emails (e.g. Sendgrid) which can be configured with a similar one line command.

Warning

Heroku & Docker

Although Heroku has some sort of Docker support, it's not supported by cookiecutter-django. We invite you to follow Heroku documentation about it.

Optional actions

Celery

Celery requires a few extra environment variables to be ready operational. Also, the worker is created, it's in the Procfile, but is turned off by default:

# Set the broker URL to Redis
heroku config:set CELERY_BROKER_URL=`heroku config:get REDIS_URL`
# Scale dyno to 1 instance
heroku ps:scale worker=1

Sentry

If you're opted for Sentry error tracking, you can either install it through the Sentry add-on:

heroku addons:create sentry:f1

Or add the DSN for your account, if you already have one:

heroku config:set SENTRY_DSN=https://xxxx@sentry.io/12345

Gulp & Bootstrap compilation

If you've opted for a custom bootstrap build, you'll most likely need to setup your app to use multiple buildpacks: one for Python & one for Node.js:

heroku buildpacks:add --index 1 heroku/nodejs

At time of writing, this should do the trick: during deployment, the Heroku should run npm install and then npm build, which runs Gulp in cookiecutter-django.

If things don't work, please refer to the Heroku docs.