Como hospedar um site feito em Python

Publicado em 2016-10-13 por Vinicius Assef

Hospedar um site feito em Python é mais complicado do que hospedar um feito em PHP, mas não é o fim do mundo.

Pronto, falei.

Para hospedar um site ou sistema feito em qualquer web framework para Python que use a especificação WSGI, você não encontrará dificuldade. Django, Flask, Pyramid, Bottle, Web2py, e todos os atuais usam. Existe muito material bom sobre isso, gratuitamente na internet. O importante é saber, em linhas gerais, qual o perfil de hospedagem que você vai precisar e que as instruções de como fazer o projeto funcionar variam conforme a empresa de hospedagem contratada.

Vamos analisar nesse artigo as alternativas em termos de plataforma de hospedagem: compartilhada, dedicada, VPS, etc.

Servidor web

Não tem jeito, como seu sistema vai rodar na web, você precisa de um servidor web. O mais famoso é o Apache. O Nginx ganhou muito mercado nos últimos anos por ser mais leve e ter excelente desempenho. A maioria das pessoas que eu conheço usa Nginx em projetos Python.

A cada requisição de URL o servidor web repassa a execução para o Python. De forma parecida com o PHP. Geralmente o servidor web lida diretamente com os arquivos estáticos e o Python, assim como o PHP, lida com a execução dos programas que você desenvolveu.

"Servidor de aplicação"

É, está entre aspas porque o Python não tem exatamente um servidor de aplicação, mas existem diferentes formas de fazer o servidor web conversar com o Python para que os programas sejam executados.

Não vou entrar em detalhes nesse artigo, mas se você usar um VPS ou um servidor dedicado, vai se deparar com os seguintes nomes: uWSGI e Gunicorn. Esses dois softwares recebem requisições do servidor web (Apache ou Nginx), executam um ou vários programas Python e devolvem o resultado.

Isso fica transparente quando você usa um servidor compartilhado ou um PaaS.

Quando você faz um deploy a nova versão dos programas só será executada quando o "servidor de aplicação" for reiniciado.

Esse reload é muito rápido, mas por que é necessário? Por questão de desempenho. Os programas são carregados uma vez no início da aplicação e só são atualizados quando o servidor é iniciado. Normalmente isso é feito executando o comando touch em um determinado arquivo que é sempre monitorado. Quando esse arquivo é atualizado, o servidor reinicia e a nova versão dos programas é executada.

Banco de dados

A famosa dupla PHP/MySQL não encontra um paralelo de unanimidade no mundo Python. É muito comum vermos sistemas escritos em Python acessando MySQL ou Postgres. Muita gente tem usado MongoDB ultimamente.

SQLite resolve boa parte dos problemas de sites com poucos acessos e pouca concorrência, mas não é recomendado para sites maiores, principalmente com muitas atualizações. Eu mesmo tenho sites rodando com SQLite há vários anos sem problema algum, mas a característica principal deles é leitura com pouquíssima atualização.

Os bancos NoSQL também fazem sucesso no mundo Python. MongoDB praticamente domina esse nicho. Entretanto, Postgres e MySQL já suportam manipulação eficiente de dados JSON.

Acesso shell

Para hospedar Python, geralmente você vai precisar de acesso ao shell do servidor. Sim, a linha de comandos do Linux.

É rotineiro usarmos bibliotecas de terceiros e elas precisam ser instaladas. Nesse caso dois componentes importantes entram em ação:

  1. pip
  2. virtualenv

Não vou me alongar na descrição dessas ferramentas. Se você quer hospedar seu projeto, provavelmente já conhece ambos.

Como referência, você pode ler Entendendo virtualenv aqui mesmo nesse blog.

O pip permite instalar as bibliotecas usadas por sua aplicação. Ele equivale ao Composer do PHP.

Mesmo que você pense em não usar nenhuma biblioteca de terceiros, é inviável desenvolver em Python para web sem usar um framework. Atualmente temos várias excelentes opções como Django, Pyramid, Flask e outros.

O framework em si é um conjunto de bibliotecas de terceiros, por isso você vai usar o pip. Como ele é executado pela linha de comandos, você vai precisar do shell.

Então não tem alternativa, você precisa do shell. A não ser que você use uma plataforma que permita instalar bibliotecas de outra maneira. Vou falar sobre isso daqui a pouco.

Tarefas em background

Python é muito usado para sistemas web que vão além de sites. Muitas vezes eles precisam realizar tarefas mais demoradas. Eis alguns exemplos que podem e devem rodar como processos independentes:

  • Envio de emails.
  • Atualização de estatísticas.
  • Geração de sumários.
  • Tratamento automático de imagens.
  • Compactação de video.

Talvez não para sites, mas para sistemas, atividades como essas são quase obrigatórias. Os cronjobs já vêm com todo Linux e é muito bem testado pelo tempo. Ele existe há décadas. Há outras alternativas, mas a cron é uma das mais simples.

Tipos de hospedagem

Certo, mas será que consigo rodar meu sistema em uma hospedagem compartilhada? Preciso de um servidor dedicado?

A resposta a essas perguntas vai depender do porte do seu sistema ou da quantidade de acessos que ele terá. Eu não posso responder em seu lugar, mas listei características de algumas alternativas de hospedagem para tentar ajudar a esclarecer um pouco.

Como esse artigo é destinado a iniciantes, o objetivo não é esgotar todas as características de cada alternativa abaixo.

Hospedagem compartilhada

Em geral, aplicações pequenas podem usar hospedagem compartilhada sem problemas. Sistemas maiores devem partir para um VPS/Dedicado ou rodar em um PaaS.

Vantagens da hospedagem compartilhada:

  • Você não tem que administrar um serviço de email.

  • Você não precisa manter o servidor atualizado/seguro.

  • Você não tem que saber administrar servidor web, servidor de banco de dados, cache, etc.

  • Backup dos arquivos e do banco de dados é de responsabilidade do provedor. Mas eu teria também a minha cópia por precaução.

  • Mensalidade fixa. Mesmo com aumento de tráfego ou de utilização de espaço em disco o valor continua o mesmo, desde que dentro dos limites contratados para o seu plano.

Desvantagens da hospedagem compartilhada:

  • Pode haver dificuldade em instalar alguns módulos que dependam de bibliotecas do sistema operacional como, por exemplo, a libxml. Também pode haver restrição de acesso a compiladores. É comum que servidores bloqueiem compiladores por padrão. Nesse caso, um contato com o suporte explicando sua necessidade pode resolver essa limitação.

  • Mensalidade fixa. Usando ou não, você vai pagar sempre o mesmo valor.

  • É provável que você não terá a liberdade de usar todas as ferramentas que gostaria. Por exemplo, é bem possível que seu sistema rode com Apache, mas você gostaria do Nginx. Como a administração do servidor web fica por conta do seu provedor de hospedagem, geralmente você não pode escolher o servidor web. Mas pode valer a pena, já que você não terá a responsabilidade de administrá-lo.

  • Pode haver limites para envio de email e cada provedor tem suas regras específicas.

Ouço muita gente dizer que profissional de verdade não usa hospedagem compartilhada. Mas você precisa analisar suas necessidades. Normalmente, mas nem sempre, a hospedagem compartilhada é mais barata do que as outras alternativas.

Uma dica que dou para quem escolhe hospedagem compartilhada, é: automatize seu deploy ao máximo. Não caia na tentação de usar ftp para fazer deploy!

VPS ou Servidor dedicado

Não aceite um VPS sem acesso root. Isso é normal nos dedicados.

Vantagens de VPS ou Servidor dedicado:

  • Você tem a máquina toda à sua disposição para fazer o que quiser.

  • Mensalidade fixa. Mesmo com aumento de tráfego ou de utilização de espaço em disco o valor continua o mesmo, desde que dentro dos limites contratados para o seu plano.

  • Em alguns provedores de VPS você pode ter mais de uma instância e pagar por cada uma delas. Alguns permitem que você pare/destrua sua instância a qualquer momento, economizando no valor.

Desvantagens de VPS ou Servidor dedicado:

  • Você tem que saber administrar o servidor e mantê-lo seguro/atualizado, inclusive contra brechas de firewall.

  • Geralmente você é o responsável pelos backups, pelo servidor de banco de dados, pelo servidor web, pelas configurações de rede, desempenho, monitoramento, etc.

  • Tudo é por sua conta.

  • Mensalidade fixa, independente do uso, se sua instância ficar ligada o mês todo.

Uma observação importante sobre VPS/Dedicado: email. Eu não arrisco administrar o serviço de email em um VPS nem em um dedicado. Recomendo que você use serviço de email contratado. Caso contrário, é receita para dor de cabeça.

PaaS (Platform as a Service)

Vantagens de PaaS:

  • Mais simples de operar do que um VPS/Dedicado.

  • Pague pelo que usa, quando usa. Em geral, isso vale para rede, espaço em disco, processador ou instâncias inteiras.

  • Pode montar estratégias de deploy automático e focar no código do seu sistema.

  • Não se preocupar tanto com crescimento explosivo de acessos. Mas você ainda precisa se preocupar com isso, principalmente na questão custo.

Desvantagens de PaaS:

  • Cada fornecedor de PaaS tem um modelo de cobrança diferente. Por isso, fique atento aos detalhes do contrato.

  • Os valores variáveis podem trazer surpresas desagradáveis no fim do mês se seu tráfego aumentar muito, por exemplo.

  • Cada fornecedor de PaaS tem um jeito próprio de administrar os recursos da aplicação e de fazer deploy. Portanto, existe uma curva de aprendizado e você vai precisar aprender as particularidades do seu provedor antes de realmente colocar o sistema no ar.

  • Normalmente cada fornecedor dá nomes específicos a tecnologias conhecidas, dificultando a utilização de quem está acostumado com um serviço convencional.

Em um PaaS você faz deploy sem ter acesso ao shell. Mas, como citei acima, cada um tem suas próprias regras e nomenclaturas. Você vai precisar estudar um pouco para usá-los.

IaaS (Infrastructure as a Service)

Se você está buscando esclarecimento nesse texto, provavelmente não precisa de IaaS. Definitivamente, IaaS não é para iniciantes.

Cada fornecedor continua dando nomes específicos a tecnologias já existentes em um grau muito maior. Portanto, cada fornecedor de IaaS é um mundo diferente.

Talvez o fornecedor de IaaS mais conhecido seja a Amazon Web Services

Onde eu posso hospedar?

A lista abaixo é apenas uma sugestão. Hospedagem de sistemas web é um assunto delicado e as opiniões/experiências podem divergir.

Abaixo segue uma pequena lista com provedores que eu uso/já usei e não tive problemas, ou que foram recomendados por pessoas de minha confiança:

Observação: como esse artigo é direcionado a principiantes em hospedagem de sistemas Python eu deixei de fora, intencionalmente, os fornecedores de IaaS.

Quando contratar a hospedagem

Eu recomendo contratar a hospedagem logo no início do projeto.

Faça deploy logo no 1º dia e verifique se o plano que você contratou tem o que você precisa. Infelizmente algumas empresas divulgam seus planos, mas não sabem o que é realmente necessário para fazer um projeto Python funcionar com liberdade.

Para terminar, quero agradecer ao Filipe Ciffali pelo tempo e conhecimento cedidos à comunidade, colaborando com esse artigo.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.