Deploy no Heroku

Deploy de aplicação Django no Heroku
Voltar

Instruções

Partindo do princípio que você possua uma aplicação Django pronta e que deseja publicá-la, então pode-se fazer pelo Heroku.



Pré-requisitos:

  • Git (Instalado e configurado)
    
    sudo apt install git
    git config --global user.name "seuusuariogit"
    git config --global user.email "seuemailgit"
    
  • Conta no Heroku
  • Heroku CLI (Instalado e configurado)
    
    curl https://cli-assets.heroku.com/install.sh | sh
    heroku login #Redirecionará para login via Browser
    
  • Projeto Django (Exemplo modelo no link acima)
  • Library environ (pip3 install django-environ)
  • WhiteNoise (pip3 install whitenoise)

Preparo

  1. Entrar na pasta raíz do projeto Django (Mesmo local do arquivo 'manage.py')
  2. Em 'pastaProj', a mesma que possui o arquivo 'settings.py', criar pasta 'settings', mover o arquivo 'settings.py' para dentro dela, renomeando-o para 'base.py'
  3. No arquivo 'base.py', modificar linha BASE_DIR (3 parent no fim):
    
    BASE_DIR = Path(__file__).resolve().parent.parent.parent
    
  4. Nessa pasta 'settings', criar arquivo 'heroku.py', com o seguinte conteúdo:
    
    import environ
    from NOMEPASTAPROJETO.settings.base import *
    env = environ.Env()
    DEBUG = env.bool("DEBUG", False)
    SECRET_KEY = env("SECRET_KEY")
    ALLOWED_HOSTS = env.list("ALLOWED_HOSTS")
    DATABASES = {
        "default": env.db(),
    }
    
  5. Em 'pastaProj', modificar linha do arquivo 'wsgi.py':
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NOMEPASTAPROJETO.base')
    
  6. Modificar linha do arquivo 'manage.py':
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NOMEPASTAPROJETO.base')
    

  7. WhiteNoise
  8. Em 'base.py', inserir trecho no final do arquivo:
    
    STATIC_URL = "/static/"
    STATIC_ROOT = BASE_DIR / "staticfiles"
    STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
    
  9. Em 'base.py', array MIDDLEWARE, inserir como 2º elemento do array:
    
    "whitenoise.middleware.WhiteNoiseMiddleware",
    

  10. Requirements
  11. Inserir, na pasta raíz do projeto (Pasta onde está o 'manage.py'), conteúdo no 'requirements.txt' com o comando: pip3 freeze > requirements.txt
    • Observação: Pode-se manter somente no arquivo: Django==3.2.12, django-environ==0.8.1, gunicorn==20.0.4, psycopg2==2.9.2, whitenoise==6.2.0 #Modificar nºs de versões conforme seu ambiente
  12. Inserir, nessa mesma pasta raíz do projeto, arquivo 'runtime.txt', com o conteúdo: python-3.8.5
  13. Inserir, nessa mesma pasta raíz do projeto, arquivo 'Procfile', com o seguinte conteúdo:
    
    release: python3 manage.py migrate
    web: gunicorn tutorialdjango.wsgi --preload --log-file –
    

  14. Heroku CLI
  15. Na pasta raíz do proejto, criar app do projeto no Heroku CLI com o comando: heroku create #Gerará url do projeto '.herokuapp.com'
  16. Ver nome do app criado: heroku apps
  17. Criar variáveis de ambiente e BD, nesse mesmo diretório, com o comando:
    
    (Exemplo: heroku config:set ALLOWED_HOSTS=boiling-meadow-14806.herokuapp.com -a boiling-meadow-14806)
    heroku config:set ALLOWED_HOSTS=urlProjeto -a nomeAppCriado
    heroku config:set DJANGO_SETTINGS_MODULE=nomePastaProjeto.settings.heroku -a nomeAppCriado
    heroku config:set SECRET_KEY=informarSenhaDesejada -a nomeAppCriado
    heroku config:set DEBUG=False -a nomeAppCriado
    heroku addons:create heroku-postgresql:hobby-dev -a nomeAppCriado
    

  18. Push aplicação
  19. Criar repositório Git e fazer Push via Git Heroku, com o código:
    
    git init
    git add .
    git commit -m "Arquivos iniciais inseridos"
    git push heroku master
    

  20. Acessar aplicação
  21. Na mesma pasta raíz do projeto, abri-lo com o comando, que abrirá o Browser com a página inicial do projeto: heroku open
  22. (Opcional) Criar usuário para Dashboard Django Admin, com o comando: heroku run python3 manage.py createsuperuser
  23. (Opcional) Conectar-se ao Bash do heroku, com o comando: heroku run bash

Elaborado por Mateus Schwede
ubsocial.github.io