Deploy de um sistema web com Django na KingHost (2020)

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

Deploy Sistema web Django painel controle

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.

Versão estavel Python 3.7

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.

Eu utilizo sempre Psycopg2-binary que pode ser instalado por nós, e tudo funciona bem até agora, por isso nunca tive de contactar o suporte por esse problema.

Para instalar o Psycopg2-binary.

pip install psycopg2-binary

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.

AN Sistemas utiliza estes Bancos de Dados

Instalações e atualizações

Usando o FileZilla, podemos ver as pastas que temos no ‘home’ do servidor.

Programador web diretórios Linux
No meu caso tinha no ‘home’ a pasta ‘www’ e a pasta ‘awstets_data, pastas criadas originalmente, a pasta ‘.cache’ por já ter atualizado o PIP, e as pastas ‘.pki’ e ‘.wp-cli’ criadas quando instalei o WordPress. Vamos aceder agora ao nosso domínio com o PuTTY, o usuário e a password dependem das configurações que realizamos no painel de controle da KingHost. Para vermos o que temos instalado no servidor, vamos usar o comando:
pip freeze
ou
python -m pip freeze
Aplicações sistema Django

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
Aplicativos do sistema Django

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

Arvore do dominio do projeto KingHost

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 media
cd www
mkdir static
mkdir media
ls
com o comando ‘ls’ vamos ver as pastas criadas
Diretórios no servidor Apache na KingHost

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.

Deploy Django painel KingHost

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.

Instalação Django na KingHost

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

Instalação 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.

Diretório WSGI deploy Django

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

Pastas do site AN sistemas

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.

Download diretórios e arquivos

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.

Backups periódicos do site
Sistemas gestão Canaã dos Carajás

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”.

site internet Django upload de arquivos
Criação de site Canaã dos Carajás

Arquivos estáticos

Lembram das pastas que criamos no diretório ‘www’?

Vamos configurar no arquivo ‘settings.py’.

Sistema de Gestão, AN Sistemas

Problemas com arquivos estáticos

O Django não serve arquivos estáticos, o apache pode ser configurado para servi-los, mas dependendo da configuração da hospedagem, eu prefiro usar WhiteNoise e sempre funcionou bem em todos os meus projetos.

Para configurarmos é muito fácil. Instalamos com o comando:

pip install whitenoise

Em seguida basta alterar a secção de middlewares no arquivo ‘setting.py’. A posição onde deve estar este middleware é importante.
Podem encontrar as instruções completas em:
http://whitenoise.evans.io/en/stable/

AN Sistemas, Desenvolvimento Web

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.

Sistema de gestão escolar, AN Sistemas

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 YouTubeSiteFacebookTwitterGitHub.

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.

This Post Has 14 Comments

  1. 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.

    1. 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

    1. 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’

  2. 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.

Deixe uma resposta