Neste artigo vou explicar como é fácil fazer o Deploy de um sistema web com Django na KingHost, em uma hospedagem compartilhada, rapidamente, sem complicações, sem problemas.
Django é sem dúvida um dos mais completos frameworks para desenvolvimento de sistemas web na atualidade. É rápido, robusto, seguro, facilmente escalável, muito versátil e desenvolvido em Python.
Quando comecei a aprender a desenvolver sistemas web com Django, uma das etapas que achei mais confusas e complicadas foi exatamente o momento de colocar em produção um projeto, normalmente em locais grátis, necessitando de outras tecnologias como Gunicorn e WhiteNoise, e muitos problemas com arquivos estáticos, etc.
Depois de muita pesquisa, descobri que no Brasil, poucas empresas de hospedagem permitem alojar um site desenvolvido com Django em hospedagem compartilhada, e dessas poucas a maioria permite apenas a utilização de Python2 e Django1.
A KingHost pelo contrário, permite uma grande autonomia e liberdade na configuração da hospedagem compartilhada, tem seus servidores no Brasil, oferece certificado grátis SSl, um painel de controle próprio, possibilidade de utilizar Python na sua última versão estável e qualquer versão Django que desejarmos, Virtualenv, WSGI e muitas outras características positivas para qualquer programador web.
Considerações Iniciais
Acredito que ao terminar um sistema e colocar em produção, para que o seu cliente comece a utilizar, não existe a necessidade de utilização de ambientes virtuais para testar diferentes versões de software, razão pela qual as instalações dos softwares vão ser diretamente na “home” do servidor.
A raiz do domínio tem um front page, um site institucional criado com WordPress, e o sistema Django em uma subpasta.
Vamos utilizar a principal plataforma de deploy do Django que é WSGI, a KingHost permite a instalação e utilização desta plataforma facilmente.
A versão do Python é a 3.7, Django 3.0.2 e Bootstrap4.
Banco de dados PostgreSQL versão 11, com acesso SSD.
Certificado SSL Let’s Encrypt grátis.
Plataforma Linux com servidor Apache.
Windows 10
Ferramentas necessárias
FileZilla para acesso FTP.
PuTTy para emular o terminal SSH.
É necessário para qualquer programador conhecer o mínimo sobre como utilizar um terminal no servidor, comandos Linux, saber como mover-se entre os diretórios, criar e mover pastas, etc.
Esta apostila é incrível, “Guia 500 comandos do Linux” do Bruno Andrade um dos membros da equipe da página GNU/Linux – Brasil no Facebook.
Python 3
No painel de controle da KingHost vamos ativar o acesso SSH, no caso de ainda estar desativado. E gerenciar também o acesso FTP

Precisamos também ter a certeza de que o nosso domínio está em um servidor com Python3.
Com o Putty vamos acessar ao nosso domínio e confirmar.

Normalmente ao incluirmos um domínio no nosso plano de hospedagem este é colocado em um servidor com Python2, é só pedir a migração para um servidor com suporte a Python3, é grátis e em poucas horas solucionam o problema.
Em seguida é necessário configurar novamente a senha de acesso ao FTP.
O recomendado é que seja a primeira coisa a fazer ao incluir um domínio na nossa hospedagem.
Eu costumo abrir um chamado e logo em seguida contactar o suporte via chat, respondem em dois minutos e em menos de 3 horas realizam a migração.
O suporte na Kinghost é incrível.
Agora temos uma situação que devemos considerar com alguma calma.
Por que estamos em uma hospedagem compartilhada, as configurações são imensas.
Neste momento precisamos ter a certeza do banco de dados que queremos usar.
É possível que o nosso servidor tenha a ultima versão de Python e uma versão muito antiga de PostgreSQL, ou ter uma versão estável de Python3, a ultima versão de PostgreSQL, mas uma versão do conector Psycopg2 incompatível com o PostgreSQL do servidor, aqui temos um problema, enquanto podemos escolher e instalar a versão de Django que queremos e muitos outros apps para que o nosso sistema funcione, o Psycopg2 só pode ser instalado pela própria KingHost.
Por esta razão, é importante que antes de fazermos algo mais, contactar o suporte e pedir uma configuração que satisfaça as necessidades do sistema, vamos manter o ultimo de PostgreSql, um conector Psycopg2 compatível e sacrificar a versão do Python? Questionem-se, conversem com o suporte e encontrem juntos uma solução para uma migração para um servidor em que o sistema vai rodar sem problemas.
E para finalizar este item, não vale a pena tentar usar psycopg2-binnary, vai funcionar com imensos problemas.
Vamos usar o comando.
pip freeze
Para vermos tudo que está instalado no servidor.

Base de Dados
Depois de termos a certeza que o nosso servidor tem a configuração desejada, ativarmos o SSH e configurarmos o acesso FTP, é o momento de criar a base de dados, incrivelmente fácil também na KingHost.
Eu vou usar PostgreSQL.
No painel de controle, criamos e configuramos tudo o que precisamos.

Instalações e atualizações
Usando o FileZilla, podemos ver as pastas que temos no ‘home’ do servidor.

pip freezeou
python -m pip freeze

Vamos também ver a versão do PIP e se necessário atualizar.
python -m pip --version
Se for necessário atualizar:
python -m pip install --upgrade pip --user
Dependendo dos requerimentos do seu projeto, instalamos agora os aplicativos necessários, vamos usar o comando:
python -m install nome_da_aplicação --user
No meu caso desinstalei o Django
python -m pip uninstall django --user
e instalei a versão 3.0.2
python -m pip install django==3.0.2 --user
Instalei o Bootstrap4
python -m pip install django-bootstrap4 --user
Depois de tudo o que precisamos instalar, vamos conferir, usando o comando:
python -m pip freeze

Com o FileZilla olhamos como está a arvore de pastas no nosso servidor.

Criação das pastas ‘static’ e ‘media’
Para que os arquivos estáticos e de media sejam servidos corretamente, vamos criar as pastas dentro da pasta ‘www’, usando o PuTTY, com o comando ‘cd www’ entramos em ‘www’, e digitamos mkdir static e mkdir mediacd www mkdir static mkdir media lscom o comando ‘ls’ vamos ver as pastas criadas

Instalação WSGI e Django
Vamos voltar ao painel de controle, instalar o WSGI e criar o projeto Django.
Não recomendo criar o projeto pelo terminal, a instalação deve ser realizada pelo painel de controle.

Neste momento é hora de escolher como vai funcionar o nosso site.
O projeto Django vai incluir a página principal?
Vamos criar apenas uma API?
Ao realizar a instalação pelo painel da Kinghost, vai ser criado um diretório ‘apps_wsgi’, e dentro deste diretório vai estar o arquivo mais importante para que tudo funcione ‘nome_projeto.wsgi’, e dentro também outro diretório, o nosso projeto com o nome que escolhemos, já criado (o próprio sistema realiza ‘… createproject nome_projeto’).
Nesta fase ainda é permitido cometer alguns erros de planejamento, se algo não for exatamente como prevíamos, é extremamente fácil desinstalar através do painel o Django e o WSGI e voltar a instalar quantas vezes for necessário, sem problemas.
Mas atenção que depois de desinstalar devemos apagar manualmente a pasta ‘apps_wsgi’ que vai ser criada ao instalar a aplicação e onde vai estar o diretório com o nosso projeto.
Creio, que depois de muito planejamento e programação para desenvolver um sistema Django e fazer o deploy para produção, já é certo como tudo vai funcionar no geral, foi uma das primeiras coisas que aprendi na programação, a maior tempo gasto é pensando e planejando.

Em poucos segundos a confirmação de que a instalação foi bem sucedida.

Novos Diretórios
Vale muito a pena agora com o Filezilla, olharmos com atenção os diretórios que foram criados.
Temos então um novo diretório ‘apps_wsgi’ que inclui a pasta ‘nome_projeto’ e o arquivo ‘nome_projeto.wsgi’
A pasta ‘.python-eggs’ já não é utilizada atualmente.

E podemos também olhar o nosso projeto já criado.

Baixar, alterar e subir os arquivos
Existem várias maneiras de manusear os arquivos, mas o mais importante é que depois de qualquer alteração nos ficheiros do diretório ‘apps_wsgi’ é necessário “avisar” o servidor de que houve mudanças, para que tudo funcione.
Eu sempre utilizo o Filezilla para fazer o download e upload.
Podemos escolher a opção baixar, alterar o que for necessário e arrastando voltar a subir.

Ou podemos escolher a opção ‘ver/editar’, alteramos o arquivo, salvamos e confirmamos no popup do Filezilla, que queremos fazer o upload do arquivo alterado.


Arquivo .wsgi
Vamos agora alterar o arquivo ‘nomeprojeto.wsgi’.
Existem muitas maneiras, mas esta configuração funciona comigo e eu continuo utilizando.
import os, sys
sys.path.append('/home/meudominio/apps_wsgi')
sys.path.append('/home/ meudominio /apps_wsgi/gestao')
os.environ['DJANGO_SETTINGS_MODULE'] = 'gestao.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
“Avisando” o servidor que algo mudou
Mais uma vez existem várias maneiras, mas a ideia essencial é “substituir” o arquivo ‘nomeprojeto.wsgi’.
Podemos simplesmente baixar e voltar a subir aceitando o aviso de substituição do arquivo.
Ou ‘ver/editar’ e só dar um ‘CTRL+S’ para salvar e confirmar no popup do Filezilla.
Para quem gosta ou precisa usar o terminal, dentro do diretório do arquivo, usar o comando:
touch nomeprojeto.wsgi
Quase terminando
Chegou a hora de confirmar que tudo está pronto para o deploy do nosso sistema web desenvolvido com Django.
Aqui têm uma ferramenta indispensável para que tudo dê certo.
Lista de verificação para distribuição.
Tudo confirmado, é hora de mover arquivos e pastas para o servidor, eu sempre uso o “arrastar, soltar, confirmar substituição”.


Arquivos estáticos
Lembram das pastas que criamos no diretório ‘www’?
Vamos configurar no arquivo ‘settings.py’.

Quase no final
Chegou a hora de ir para o PuTTY e no diretório onde está o arquivo ‘manage.py’ digitar alguns comandos para indicar onde o Django deve guardar e aceder aos arquivos estáticos, criarmos nossas tabelas no banco de dados, criar um super-usuário, etc.
python manage.py collectstatic
python manage.py makemigrations
python manage.py migrate
python manage.py makemigrations academico
python manage.py migrate
python manage.py createsuperuser
Lembrem, é necessário “avisar” o servidor…
Voltamos a pasta apps_wsgi e fazemos ’touch’.
touch meuprojeto.wsgi
Final. – meudominio.com/meuprojeto/admin
Django no ar.
Terminamos.
Fazer deploy de um sistema web com Django na KingHost é super fácil.

Obrigado
Quero agora terminar, agradecendo a você que chegou até ao final deste tutorial, quero agradecer a Deus e dizer Obrigado, a um grupo de jovens que nos últimos anos mudaram a minha vida, com o seu conhecimento, com a sua disponibilidade, esforço e dedicação em ajudar com uma imensidão de conteúdo de grande qualidade, disponível gratuitamente na internet.
Um dito chino cuenta que cúando el aprendiz está listo, el maestro aparece, eso es lo que me pasó. Gracias Juan Díaz, todo comenzó contigo. Juan es Pildoras Informáticas y tiene sin duda uno de los más completos canales de YouTube sobre la enseñanza de la programación.
Referência no desenvolvimento desktop com Kivy e Python, e na programação em geral, um Professor exemplar, criador do projeto eXcript e do maior e mais completo curso sobre Kivy , atualmente no mercado, Cláudio Rogério Carvalho Filho. YouTube
Impossível falar de Django, autonomia, freelancer, empreendedorismo, programação, Python, sem lembrar do Henrique Bastos e Welcome to the Django. Canal YouTube — Site — Facebook — Twitter — GitHub.
Muito mais do que ensinar Python e Django estes dois jovens transmitem uma imensidade de conhecimento sobre a vida, sobre o dia a dia de um programador e sobre como alcançar um lugar de destaque na profissão. Obrigado Moacir Moda e Renzo instrutor do curso Python Pro e criador do curso grátis Python Birds.
Obrigado
De nada
Fantastic Webpage, Continue the very good work. Appreciate it.
Thanks
I adore this website – its so usefull and helpfull.
Thanks
You made some really good points there. I checked on the net to learn more about the issue and found most people will go along with your views on this web site.
Thanks
Obrigado pelo post. Foi o melhor que achei até agora. Você poderia me ajudar com mais um ponto. Estou tentando algo muito semelhante ao que você fez (WordPress como site e o Django em uma pasta). Só que recebo sempre erro 500. Fui no log e acho isso:
[Tue Jul 14 20:13:49.085660 2020] [:error] [pid 48491:tid 140453296486144] [client 10.17.70.112:50420] [client 10.17.70.112] ModSecurity: Audit log: Failed to create subdirectories: logs/20200714/20200714-2013 (Permission denied) [hostname “.com.br”] [uri “/wp-admin/admin-ajax.php”] [unique_id “”], referer: https://.com.br/wp-admin/admin-ajax.php
Você tem ideia de como se sai dessa? Obrigado.
Olá Hamilton, obrigado, fico feliz que o post tenha sido útil.
Sobre o erro 500 tem uma solução sim.
Chama no WhatsApp e eu explico-te o que precisas.
94 992980227
Os arquivos estáticos não carregaram no meu :(, somente a pagina html.
Olá Vinicius, fizeste python manage.py collectstatic ?
A pasta está em www ?
O teu settings.py está assim?
STATIC_URL = ‘/static/’
STATIC_ROOT = ‘/home/nome_do_dominio/www/static’
MEDIA_URL = ‘media/’
MEDIA_ROOT = ‘/home/nome_do_dominio/www/media’
I’m extremely inspired along with your writing talents as neatly as with the format to your weblog. Is that this a paid topic or did you customize it yourself? Anyway stay up the excellent quality writing, it’s rare to see a great weblog like this one these days.
Thank you.
I use OceanWp free theme and Elementor free to.
All page content I start from scratch and kept the WordPress post structure at the end.