[ Tutorial ] Como preparar a aplicação Django para por em produção
O propósito deste, é compartilhar como configurar o ambiente de desenvolvimento para Produção.
Antes de enviar sua aplicação para produção, você precisa configurar o ambiente de desenvolvimento.
Configure as variávéis no core da aplicação em settings.py
.
Altere:
// De
DEBUG = True
// Para
DEBUG = False
// De
ALLOWED_HOSTS = [ ]
// Para
ALLOWED_HOSTS = ["*"]
// Ou
ALLOWED_HOSTS = ["seudominio.com"]
- Configure para servir os arquivos Staticos com WhiteNoise
Primeiro, com seu virtualenv ativado, precisamos instalar o WhiteNoise utilizando o pip.
pip install whitenoise
Rode o comando para gerar novamente o arquivo requirements.txt da aplicação:
pip freeze > requirements.txt
Logo após, devemos adicionar a seguinte linha no arquivo de settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# Certifique-se que o WhiteNoise seja adicionado acima de todos os middlewares do Django, exceto o de security.
# ...
]
Por fim, para ativar arquivos de cache e com campactação, adicionamos a seguinte linha (eu gosto de adicionar abaixo de STATIC_URL e STATIC_ROOT para manter um padrão):
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Por fim, rode o coolestatic novamente:
python manage.py collectstatic
Configurando o domínio de acesso
Em settings.py
, coloque o domínio que podem dar acesso a aplicação por meio do crfs token:
//Coloque aqui seu domínio
CSRF_TRUSTED_ORIGINS = ['https://seu-domínio']
Sua aplicação está pronta para por em produção, epois de configurar o ambiente de desenvolvimento, você pode enviar sua aplicação para produção. Isso inclui criar um servidor da web e configurar o aplicativo para ser executado nele, leve em conta também de configurar as variáveis de ambiente no ambiente de produção a qual ficará hospedada a aplicação.
È só isso, obrigado !!
Também seria bom adicionar a configuração 'SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")' para lidar com terminação https no proxy.
Só algumas melhorias:
De ALLOWED_HOSTS = ["*"]
Para ALLOWED_HOSTS = ["seudominio.com"]
Por segurança também é bom ter um valor de SECRET_KEY diferente para os ambientes de desenvolvimento e produção, por isso eu mantenho 2 arquivos settings.py diferentes, um para cada ambiente.
Show de bola mano! Gostaria de complementar que é uma boa prática colocar as variáveis de ambiente em um arquivo .ENV e utilizar o python-dotenv para carregar essas variáveis no arquivo settings.py. Assim pode-se ter diferentes configurações para diferentes ambientes, e essas variáveis que são sensíveis, também não apareceriam no Github.
Muito boa iniciativa, sua publicação poderia se tornar um lugar para partilhar padrões e boas práticas usadas para preparar uma aplicação Django para produção. Seria interessante adicionar, com o tempo, como configurar a aplicação com Nginx, Docker, Docker Compose, Gunicorn, Postgresql, Redis, etc.
Sou apaixonado por Python e estou me dedicando ao Django e Pygame. Tenho uma vps pela hostinger e nao consigo subir meus testes em Django pq nao estou conseguindo configurar o Ngnix no ubuntu ou outra distribuição linux. Se alguem tiver algo ansugerir, fico agradecido.
Pela publicação excelente e dicas msravilhosas de todos.
Legal. Nas minhas aplicações eu uso o nginx pra servir os arquivos estáticos. E deixo a aplicação atrás de um proxy reverso.