Deployment on Heroku ==================== .. index:: Heroku Script ------ Run these commands to deploy the project to Heroku: .. code-block:: bash 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:: .. include:: mailgun.rst 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. .. _Docker support: https://devcenter.heroku.com/articles/build-docker-images-heroku-yml 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: .. code-block:: bash # 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`_: .. code-block:: bash heroku addons:create sentry:f1 Or add the DSN for your account, if you already have one: .. code-block:: bash heroku config:set SENTRY_DSN=https://xxxx@sentry.io/12345 .. _Sentry add-on: https://elements.heroku.com/addons/sentry 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: .. code-block:: bash 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. .. _multiple buildpacks: https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app