Como habilitar aplicações Django na Locaweb

Os clientes Locaweb, dos planos compartilhados Linux, já podem instalar suas aplicações desenvolvidas nos mais modernos frameworks Python que suportam WSGI, incluindo o novíssimo Django 1.0!

O Web Server Gateway Interface (WSGI) é o novo padrão de comunicação entre o Web Server, no caso o Apache, com suas aplicações Python. Dentre suas principais características está a simplicidade e facilidade de utilização.

Por que a Locaweb não utiliza mod_python: simples, é lento. mod_python funciona no estilo CGI, ou seja, para qualquer nova requisição ele precisa recarregar a aplicação inteira e depois descarregar. Aplicações pequenas, pouco acessadas de fato faz pouca diferença. Mas tente rodar algo mais pesado e logo o tempo por requisição ficará insuportável. Já o WSGI funciona em esquema persistente: ele carrega sua aplicação apenas uma vez e as requisições seguintes rodam todas mais rápidas. 

Por que outras hospedagens utilizam mod_python: para economizar recursos. WSGI consome mais RAM da máquina, uma vez que ela deixa o processo de pé em vez de descarregar o tempo todo de memória. Isso é bom para a hospedagem e ruim para o cliente. WSGI não é tão bom para a hospedagem mas é melhor para o cliente.

Contrate já!

Para saber se sua conta suporta Python, entre nela via SSH e digite o comando:

cat /etc/redhat-release

Se for RedHat 5 você já tem Python e já pode seguir este tutorial. Caso contrário será necessário abrir um chamado para pedir migração para uma máquina mais atualizada.

Para começar não se esqueça de configurar seus domínios pelo Painel de Controle. Para este exemplo, suponha que você criou um Site Adicional ou Site Principal, chamado “exemplo.tempsite.ws” apontando para a pasta “~/public_html/djangodemo”. Lembre-se que existe um tempo de recarga da configuração no Apache e o tempo de propagação do DNS caso você tenha acabado de se registrar.

Claro, “djangodemo” é apenas um nome de exemplo, substitua pelo nome correto da sua aplicação.

Recomenda-se criar e desenvolver suas aplicações na sua máquina local e só depois de pronta transferir os arquivos à sua conta.

Via SSH, na linha de comando da sua conta, faça assim:

> user-wsgi-autostart djangodemo

Isso criará um projeto Django vazio (que você pode substituir por uma aplicação em Pylons, por exemplo) no diretório “~/wsgi_apps/djangodemo”. Coloque sua aplicação nesse diretório, seja via FTP ou SFTP. A pasta “~/public_html/djangodemo” também será criada e configurada automaticamente, sem sua intervenção.

Finalmente, ainda é preciso “dizer” ao Apache que você quer ativar a funcionalidade de WSGI. Você deve habilitar o WSGI para cada um dos domínios onde deseja instalar sua aplicação Web. Por exemplo:

> user-wsgi-activate exemplo.tempsite.ws

Lembre-se que isso exige que o Apache recarregue a configuração, isso costuma acontecer a cada 2 horas, por isso pode não ser imediato. Se quiser desativar esse suporte, faça:

> user-wsgi-deactivate exemplo.tempsite.ws

E para listar os domínios configurados com WSGI use o seguinte comando:

> user-wsgi-list

wsgi: [ exemplo.dominio.ws www.exemplo.dominio.ws wap.exemplo.dominio.ws ]

Desta maneira, você pode instalar quantas aplicações web Python quiser. Nesse caso:

  • Crie um novo projeto com user-wsgi-autostart
  • Transfira os arquivos do seu projeto no diretório correto
  • Ative seu domínio usando o comando user-wsgi-activate

Pronto! Sua aplicação está pronta para funcionar!

Observação: no exemplo acima, sua aplicação estará disponível pela URL http://exemplo.tempsite.ws. Mas digamos que você queira algo assim: http://exemplo.tempsite.ws/djangodemo. Ou seja, você quer múltiplas aplicações no mesmo domínio?

Nesse caso, pelo Gerenciador de Domínio, você apontará o domínio “exemplo.tempsite.ws” diretamente para “~/public_html”

O resto dos passos é o mesmo, mas será necessário um pequeno ajuste. Edite o arquivo “~/public_html/djangodemo/.htaccess” e modifique a linha:

RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]

Para:

RewriteRule ^(.*)$ /djangodemo/index.wsgi/$1 [QSA,PT,L]

Isso deve fazer com a aplicação passe a funcionar.

Tags: , , ,

22 respostas to “Como habilitar aplicações Django na Locaweb”

  1. Paulo Cassiano Says:

    Bom saber que depois da tua entrada na Locaweb muitas coisas estão mudando… Suporte à Rails… Suporte à Django… Só falta vocês oferecerem VPSs de qualidade e com preços competitivos…

  2. dterror Says:

    É o Phusion Passenger?

  3. Daniel F. Martins Says:

    Algumas dúvidas de um possível-futuro-cliente:

    1) Qual é a versão do Python instalada nos servidores?
    2) Se minha aplicação precisar de uma versão diferente do Python e/ou de outras bibliotecas para funcionar (como python-markdown, por exemplo)?

    []s

  4. AkitaOnRails Says:

    @Paulo, então veja a nossa plataforma de “Cloud Computing” (http://www.locawebidc.com.br/assinaturas/cloud.asp). É um produto que estará em constante evolução e inicialmente funciona como uma VPS também e está bastante acessível (http://www.locawebidc.com.br/assinaturas/cloud.asp)

    @dterror, não, eu conversei com o pessoal da Phusion, e chegamos à conclusão que o Passenger com WSGI ainda não estava estável o suficiente. Por outro lado evoluímos no mod_wsgi que agora está estável e também trivialmente simples de configurar.

    @daniel, a versão do Python é o 2.4.3. Acho que a maioria das coisas deve funcionar nesta versão. Você pode instalar bibliotecas na sua própria área e acrescentar seu diretorio local no path da aplicação. Qualquer coisa, se for alguma biblioteca que necessariamente precisa estar no sistema, nos envie o caso e colocaremos rapidamente se for realmente necessário. Principalmente porque acabamos de lançar, o feedback de vocês é muito importante para sempre melhorarmos o produto.

  5. Andre Says:

    Altero os arquivos mas o site continua refletindo a posição anterior. Há como restartar o WSGI, por exemplo, para forçar a atualização?

  6. Daniel F. Martins Says:

    Contratei a hospedagem e tudo tem funcionado de acordo. Apesar de ter faltado algumas bibliotecas importantes (MySQLdb e PIL, por exemplo), eu estou conversando com o pessoal do suporte para resolver a questão.

    A propósito, os scripts user-wsgi-* são uma mão na roda. :)

  7. Juliano Says:

    @Andre Para isso só é necessário fazer um touch no seu index.wsgi que ai apache sabe que sua aplicação foi alterada e far o reload.

  8. Juliano Says:

    @Daniel F. Martins Já estou providenciando a PIL e MYSQLdb para todas as máquinas :D

  9. Bruno Marchioro Says:

    Estou com um problema no envio de e-mails pela função send_mail(). Localmente tudo funciona 100%, porém, no servidor ocorre o seguinte erro: unable to select on socket. O que devo fazer?

  10. Ronaldo Says:

    Duas perguntas:
    1) Se eu somente rodar os user-wsgi-* scripts como descrito no documento acima, eu deveria ver a página de “It works!” do Django?
    2) É possível ver logs de acesso para o meu site?

  11. Paulo Nova Says:

    Bruno Marchioro, também tive o mesmo problema, será que alguém teve o mesmo problema?

  12. Paulo Nova Says:

    Pesquisando em alguns posts pela net, descobri que o problema é por causa de uma diferença de versão no Python, na Locaweb é usado 2.4.3 e estamos trabalhando com uma versão mais recente. A versão 2.4.4 já não tem este problema, a questão é a seguinte, como evitar este problema?

    abs

  13. Audren Cezar Says:

    Deu pau aqui:
    $ user-wsgi-autostart nomedoprojeto
    -bash: /usr/bin/user-wsgi-autostart: /bin/bash: bad interpreter: Permission denied

    Não me pergunte o porque do erro :)

    Macete bem simples, de qualquer forma aí ai.
    $ bash user-wsgi-autostart nomedoprojeto

  14. Alexandre Farinelli Says:

    Olá Audren Cezar,

    Por favor nos informe seu login de hospedagem, para verificarmos o erro informado.

    Atenciosamente,

  15. Audren Cezar Says:

    Alexandre,

    O problema que comentei acima já foi resolvido!

    Consegui rodar o django hoje, adicionei algumas dicas no wiki da locaweb http://wiki.locaweb.com.br/pt-br/Como_instalar_uma_aplica%C3%A7%C3%A3o_Django%3F

    Eu acho que na imagem do tutorial o campo da pasta do redirecionamento está escrito “site” e deveria ser “djangodemo”. Para quem está começando até uma “.” pode dar dor de cabeça.

    Obrigado.

  16. eduardo Says:

    Ola estou com um problema. Aparentemente existem 2 versoes do python, a 2.4 e a 2.6, por padrão quando você chama o python ele te joga para o 2.4. Nesta versão o django não esta instalado, então resolvi usar a versão 2.6, porém nessa versão não existe o MySQLdb.

    Encontrei esse post no forum relacionado, mas nenhuma solução.
    http://forum.locaweb.com.br/showthread.php?p=10409#post10409

  17. Juliano Says:

    @eduardo Vi seu post no blog e procurei as máquinas que estavam com problema no MySQLdb, agora estão ok e com o easy_install certinho. Muito obrigado por avisar sobre isso :D

  18. Gian Carlo Says:

    Qual a versão do Django atualmente utilizada pela LocaWeb?

  19. Andre Says:

    Gian Carlo, a versão atual do django é a 1.0, o release mais recente. Quanto ao Python, estão instaladas a versão 2.4 e a 2.6.

  20. Gabriel Says:

    Não estou conseguindo instalar minha aplicação em um servidor dedicado. Para começar, não está disponível a configuração para apontar o domínio para a pasta “~/public_html/djangodemo”. Mesmo assim, executo os comando user-wsgi-*. É gerado um projeto básico do django, e não aparece nenhum erro. Porém quando digito o comando “user-wsgi-list”, não é exibido nenhum domínio. Consequentemente, minha aplicação não roda de jeito nenhum. Já tentei falar com o chat, mas não obtive êxito. Já abri um chamado há três dias e vocês nunca responderam. Será que alguém pode me ajudar???

  21. Daniel Says:

    Nao utilizem, a hospedagem django da locaweb e um lixo, nao tem modulos intalados, o que tem ta cheio de erros, o suporte e horrivel nao sabem o que fazem, fora a reconhecida instabilidade do servidor que de hora em hora parece uma carroça

  22. Rodolfo Pereira Says:

    Olá, eu sou desenvolvedor Python e estou tendo alguns problemas, não estou conseguindo fazer minha aplicação Django funcionar, primeiramente, eu preciso de MySQLdb, PIL, ImageMagick… eu consigo compilar alguns módulos separados sem problema… inclusive, eu compilei tudo separado…

    A versão do Django que eu uso é modificada (por mim mesmo) para acelerar o processo e também porque eu adicionei algumas opções (as modificações serão aplicadas na versão oficial do Django 1.2)

    Eu gostaria de saber se há possibilidades de informar ao wsgi qual interpretador Python utilizar, pretendo utilizar o que eu compilei, assim como a versão do Django que ele vai trabalhar porque eu gostaria de usar a versão modificada.

    Não consegui fazer o django funcionar no meu document_root, mesmo porque, mesmo sem django sem nada aparece Error 500 :(

    Enfim, existe a abertura dessas possibilidades para os desenvolvedores que utilizam os servidores da Locaweb?

    Abraços a todos.

Deixe um comentário