1. Install heroku cli


2. Add Procfile to your project, and add this command below:

$ cd yourenv/yourproject/
$ vim Procfile

# then, add this command below to the file:

web: python manage.py runserver$PORT --noreload

3. Add runtimes.txt

Add your python version, default is python-2.7.13. Docs: https://devcenter.heroku.com/articles/python-runtimes

$ cat runtime.txt

4. Installing Whitenoise

First, install WhiteNoise with pip, and add it to your requirements.txt file.
Docs: https://devcenter.heroku.com/articles/django-assets#whitenoise

$ pip install whitenoise
$ pip freeze > requirements.txt

Next, install WhiteNoise into your Django application. This is done in wsgi.py.

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

Finally, if you’d like gzip functionality enabled, add the following setting to settings.py.

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
    os.path.join(PROJECT_ROOT, 'static'),

5. Disabling Collectstatic
Sometimes, you may not want Heroku to run collectstatic on your behalf.
You can disable the collectstatic build step with the DISABLE_COLLECTSTATIC configuration:
Docs: https://devcenter.heroku.com/articles/django-assets#disabling-collectstatic

$ heroku config:set DISABLE_COLLECTSTATIC=1

6. Login to heroku & Deploy

$ heroku login

Create a new Git repository

Initialize a git repository in a new or existing directory

$ cd my-project/
$ git init
$ heroku git:remote -a your_app_name

Deploy your application

Commit your code to the repository and deploy it to Heroku using Git.

$ git add .
$ git commit -am "make it better"
$ git push heroku master

Existing Git repository

For existing repositories, simply add the heroku remote

$ heroku git:remote -a your_app_name

Database Migrations

$ heroku run python manage.py migrate
$ heroku run python manage.py makemigrations yourapp_name
$ heroku run python manage.py migrate yourapp_name
$ heroku ps
$ heroku ps:scale web=1
146 7 7 0