Como ativar HTTPS no seu site no Heroku, usando Domínio próprio e Django

Gabriel Amancio
CITi
Published in
5 min readOct 19, 2018

Olá, pessoal! Vou mostrar pra vocês como ativar o HTTPS no seu site hospedado no heroku com domínio próprio e também ativar o redirecionamento automático, utilizando Django.

Mas antes de começar efetivamente, você sabe a importância do seu site possuir HTTPS? E você sabe realmente o que é isso? Então, HTTPS é um dos serviços proporcionados por sites que possuem SSL. "Mas o que é SSL?", Calma que eu já te explico! SSL é um protocolo de segurança que garante que seus dados e comunicação através de determinado site serão sigilosos, afinal, ninguém quer ser bisbilhotado, né!? E uma informação interessante é que, neste ano de 2018, o Google começou a ranquear mal sites sem SSL, categorizando eles como inseguros. Que tal darmos um jeito para que isso não ocorra com seu site, hein? Vamos lá!

Supondo que você já está com o seu site no Heroku, com o seu domínio comprado e com o DNS já apontado para o domínio adquirido, iniciamos o trabalho.

Caso ainda não tenha redirecionado o seu site, esse texto ajuda bastante.

Na aba de Settings do Heroku, desça sua tela até os domínios registrados. Lá existe um campo de nome DNSTarget; você irá copiar essa informação para utilizar no PointDNS.

Observe que existe dois links, um com WWW e o outro sem, presta atenção nisso!

Agora, já no DNS, você irá editar os campos de ALIAS e CNAME. Lembrando que você deve checar se está pegando o DNSTarget correspondente ao domínio que você vai colocar no ALIAS ou CNAME, se é o que possui WWW ou não. O dado copiado do DNSTarget - no ALIAS - irá no campo Target; Já o do CNAME, vai ser colocado no campo Hostname.

Na primeira tela do PointDNS você clicará aqui.
Já na segunda, você irá modificar indo nesse botão com o símbolo de um lápis (Lembrar que, no ALIAS vai o DNS sem o WWW, e no CNAME vai com WWW).
Campo de edição do CNAME
Campo de edição do ALIAS

Pronto, seu site já está com o https ativado! Provavelmente, se você acessar ele colocando o https na frente deve funcionar, porém, ainda precisamos fazer com que qualquer link referente a ele, sem colocar o https, seja redirecionado para ele. Então, vamos lá!

Até aqui não mexemos em nada de código, mas agora iremos fazer umas coisinhas no projeto em si.

As modificações no código serão referentes a parte de settings do projeto. Primeiramente, seu settings deve estar modularizado, e não apenas com o padrão do Django que é o arquivo settings.py. "Mas porque isso?" você se questiona. Simples meu caro gafanhoto, a modularização do settings te dá a liberdade e segurança de testar coisas apenas enquanto está em fase de desenvolvimento, mesmo deixando tudo pronto para quando o projeto finalmente estiver no ar. Muita informação, né? Deixe-me explicar como se faz isso para tentar ajudar.

Ao invés apenas do arquivo settings.py, você criará uma pasta chamada settings, onde nela terá, essencialmente, 4 arquivos, sendo eles:

__init__.py

base.py

development.py

production.py

Ps.: É obrigatório a utilização dessa modularização. Caso não seja feita, você não conseguirá rodar localmente enquanto estiver em desenvolvimento com as configurações de redirecionamento para https, ocasionando problemas no desenvolvimento.

Explicando pra quê cada arquivo desse serve:

O __init__.py serve para a inicialização da pasta, para ser reconhecida como parte real do projeto. Não precisa ter nada nesse arquivo, apenas sua existência.

No base.py irão todos os dados padrão do settings, que serão usados tanto na fase de desenvolvimento, como também após a entrega do projeto.

No development.py estarão dados que só são interessantes de serem usados no momento de desenvolvimento, que não são usados após a entrega, como a função DEBUG = True, que durante a fase de desenvolvimento é utilizada constantemente.

No production.py é justamente o que só é interessante de se ter após a entrega do projeto, e onde a função DEBUG deve estar setado False, por exemplo.

E é no production que vem o código principal a ser inserido. Antes de tudo, se você não está fazendo seu settings nesse modelo, segue o link do Webplate do CITi - que é aberto para uso geral - e é de grande ajuda para quem está começando. Dá uma olhada no settings dele, e estrutura da mesma maneira:.

Após ter dividido seu settings nessa estrutura, você deve modificar o BASE_DIR, presente no base.py para isto:

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

Isso sinaliza que o settings agora está agora em uma pasta, acrescentando mais um pedaço de encapsulamento nessa linha de código.

No production.py você irá colocar o seguinte código:

SECURE_SSL_REDIRECT = True

SECURE_PROXY_SSL_HEADER = (‘HTTP_X_FORWARDED_PROTO’, ‘https’)

Esse código faz o seu site ser redirecionado automaticamente para o https que já foi configurado no seu domínio, na parte inicial desse texto.

Após tendo feito tudo isso, você precisa ter conhecimento de certos detalhes. Para você rodar seu projeto localmente, você não pode rodar o settings de production, pois o localhost não identifica o https. Para configurar isso, você precisa modificar o seu wsgi.py e o manage.py.

Em ambos arquivos existe uma linha na qual deve conter o seguinte código:

os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “Nome_do_seu_projeto.settings”)

Essa linha define qual arquivo de settings está rodando quando você dá o comando "python manage.py runserver".

Para mudar isso, localmente você deve mudar para “Nome_do_seu_projeto.settings.development”, sinalizando que é o settings de development.py que vai ser utilizado.

Entretanto, como já foi dito, o settings de development.py contém coisas que não devem ir para o projeto no ar, então no Heroku, você deverá ir na aba de settings novamente, ir em Reveal Config Vars.

Ao abrir as variáveis, você deverá criar uma nova com o nome: DJANGO_SETTINGS_MODULE, e no valor você colocará “Nome_do_seu_projeto.settings.production” e pronto, seu projeto está pronto e configurado para redirecionar automaticamente para seu domínio com https.

Espero ter ajudado no seu projeto :)

--

--

Gabriel Amancio
CITi
Writer for

Graduando em Ciência da Computação, e sim, eu posso formatar o seu computador. Atualmente, Desenvolvedor Web no CITi.