Depois de muito tempo parado resolvi voltar a estudar um pouco de Django e desta vez preferi utilizar o Heroku como suporte. Até para entender melhor seu funcionamento! Então segue as anotações!!

Minha aplicação já estava desenvolvida e no GitHub, logo, segui a ideia de fazer o deploy a partir do GitHub mesmo sem usar o git do próprio Heroku.

Inicialmente eu criei no heroku a aplicação e já configurei o add-on do Postgresql. Não configurei ainda o GitHub, deixei para fazer isso bem no final.

Criando a aplicação

Depois eu baixei e instalei o CLI do Heroku aqui.

Com essas etapas superadas fui realizar as adequações no projeto para subir ele para o Heroku.

Primeiro eu instalei as dependências do Heroku para Django, bem simples:

pip install gunicorn
pip install django-heroku
pip install psycopg2-binary==2.8.6
pip install dj_database_url

Também aproveitei e gerei o requirements.txt, é importante fazer isso somente depois de ter adicionado as dependência acima, pois ao fazer o deploy o Heroku irá ler o arquivo e fazer as atualizações. Note que o psycopg2 é bem específico pois na época que escrevi esse texto estava apresentando um erro de “unsupported locale setting”.

Depois criei alguns arquivos na raiz da aplicação que detalho abaixo o que tem neles:

.locales
Procfile
runtime.txt

Esses arquivos servem para informar o Heroku o que será rodado na aplicação. O .locales é em razão da configuração de localidade e formatação de data e hora. Dentro do arquivo coloque o texto:

pt_BR.UTF-8

O Procfile é para rodar a aplicação propriamente dita. Lembre que “myproject” é o nome do seu projeto. Coloque:

web: gunicorn myproject.wsgi

No runtime.txt coloque qual a versão do python deve rodar. Note que isso pode mudar com o tempo, no meu caso consultei antes o link AQUI para ver a versão compatível.

python-3.6.15

Agora vamos modificar o arquivo settings.py do projeto. As alterações foram:

ALLOWED_HOSTS = [‘0.0.0.0’, ‘localhost’, ‘127.0.0.1’, ‘nameofapp.herokuapp.com’] – nameofapp é o nome do seu APP.

SECRET_KEY = os.environ.get(‘SECRET_KEY’) – Depois vamos gerar o SECRET KEY pelo CLI do Heroku

DEBUG = False – Consulte os erros pelo Log. Até pode habilitar se não conseguir entender direito os erros. Mas cuidado!

import django_heroku – Para importar a dependência

django_heroku.settings(locals()) – Para que ele configure o restante para você.

import dj_database_url - Para fazer a conexão com o banco de dados
db_from_env = dj_database_url.config()
DATABASES = {'default': dj_database_url.config()}

Depois dessas alterações partimos para o CLI Heroku. Digite:

heroku login

Faça o login e depois e rode para já resolver as questões de locale:

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-locale

Vamos cadastrar a chave secreta. Para isso abra um terminal python e rode os comandos:

import secrets
secrets.token_hex(24)

O valor gerado vamos inserir no Heroku como variável de ambiente e você também deve fazer o mesmo de acordo com seu ambiente de produção:

heroku config:set SECRET_KEY=SUACHAVEAQUI

Da mesma forma vamos criar uma forma de sempre que ele subir para produção já ficar como DEBUG=False. Para isso, altere o setting.py para:

DEBUG = os.environ.get('DEBUG') == True

E criamos as váriaveis de ambiente no Heroku e na maquina local. Uma sempre False e a outra sempre True. Assim ele já faz a comparação:

heroku config:set DEBUG="False"

Agora faça o push das alterações para o GitHub e depois faça a conexão com o GitHub no Heroku:

Utilizei o GitHub diretamente

Agora volte para o CLI Heroku e digite:

heroku run -a nomedaaplicacao python manage.py makemigrations
heroku run -a nomedaaplicacao python manage.py migrate
heroku run -a nomedaaplicacao python manage.py createsuperuser

Neste caso (meu caso) eu não subo os arquivos de migrations, eles estão no .ignore, mas se você quiser subir os arquivos migrations e fazer com que ele já rode sempre os migrations, altere o arquivo Procfile para:

web: gunicorn myapp.wsgi
release: python manage.py migrate

Dessa forma você não precisa rodar o makemigrations e o migrate.

Após isso você deve estar com a aplicação rodando. Veja os logs para confirmar:

Para que seja possível inserir as imagens no static faça o seguinte:

pip install whitenoise

Depois faça as configurações no settings.py

MIDDLEWARE = [
    ...
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

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

Bom, é isso. Espero ter ajudado de alguma forma!

No responses yet

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.