Pergunta

Estou prestes a implantar um site de médio porte desenvolvido com Django.Eu tenho um servidor Ubuntu dedicado.

Estou realmente confuso sobre qual software de servidor usar.Então pensei comigo mesmo:por que não perguntar ao stackoverflow.

O que estou procurando é:

  • Fácil de configurar
  • Rápido e fácil em recursos
  • Pode servir arquivos de mídia
  • Capaz de servir vários djangosites no mesmo servidor
  • Prefiro não instalar PHP ou qualquer outra coisa que sugue recursos e para a qual não tenho utilidade.

Já ouvi falar de mod_wsgi e mod_python no Apache, nginx e lighty.Quais são os prós e os contras disso e senti falta de alguém?

@Barry:De alguma forma, sinto que o Apache está muito inchado para mim.E as alternativas?

@BrianLy:Ok, vou dar uma olhada no mod_wsgi um pouco mais.Mas por que preciso do Apache se sirvo arquivos estáticos com lighty?Também consegui servir o próprio aplicativo Django com lighty.Isso é ruim de qualquer maneira?Desculpe por ser tão estúpido :-)

ATUALIZAR:E quanto ao lighty e ao nginx - quais são os casos de uso quando são a escolha perfeita?

Foi útil?

Solução

Como estava procurando respostas mais aprofundadas, decidi pesquisar a fundo o assunto.Por favor, deixe-me saber se eu entendi mal alguma coisa.

Algumas recomendações gerais são usar um servidor web separado para lidar com mídia.Por separado, quero dizer um servidor web que não está executando o Django.Este servidor pode ser, por exemplo:

  • Lighttpd (Lighty)
  • Nginx (EngineX)
  • Ou algum outro servidor leve

Então, para o Django, você pode seguir caminhos diferentes.Você também pode:

  • Servir Django via Apache e:

    • mod_python

      Esta é a forma estável e recomendada/bem documentada.Contras:usa muita memória.

    • mod_wsgi

      Pelo que entendi, mod_wsgi é uma alternativa mais recente.Parece ser mais rápido e mais fácil em termos de recursos.

    • mod_fastcgi

      Ao usar FastCGI você está delegando o serviço do Django para outro processo.Como o mod_python inclui um interpretador python em cada solicitação, ele usa muita memória.Esta é uma forma de contornar esse problema.Também existem algumas preocupações de segurança.

      O que você faz é iniciar seu servidor Django FastCGI em um processo separado e então configurar o Apache por meio de reescritas para chamar esse processo quando necessário.

Ou você pode:

  • Servir Django sem usar Apache mas com outro servidor que suporte FastCGI nativamente:

    (A documentação menciona que você pode fazer isso se não tiver nenhuma necessidade específica do Apache.Acho que o motivo deve ser para economizar memória.)

    • Lighttpd

    Este é o servidor que executa o Youtube.Parece rápido e fácil de usar, mas tenho visto relatos de vazamentos de memória.

    • nginx

    Já vi benchmarks afirmando que este servidor é ainda mais rápido que o lighttpd.No entanto, está documentado principalmente em russo.

Outra coisa, devido às limitações do Python, seu servidor deve estar rodando em modo bifurcado, não encadeado.

Então esta é minha pesquisa atual, mas quero mais opiniões e experiências.

Outras dicas

estou a usar Cherokee.

De acordo com seus benchmarks (grão de sal com eles), ele lida com carga melhor que Lighttpd e nginx ...Mas não é por isso que eu uso.

Eu uso porque se você digitar cherokee-admin, ele inicia um novo servidor no qual você pode fazer login (com uma senha de uso único) e configurar todo o servidor por meio de um webmin bem feito.Esse é um recurso matador.Já me salvou um muito de tempo.E está economizando muitos recursos para meu servidor!

Quanto ao Django, estou executando-o como um processo SCGI encadeado.Funciona bem.Cherokee também pode mantê-lo funcionando.Novamente, um recurso muito bom.

A versão atual do repositório do Ubuntu é muito antiga, então eu aconselho você a usar seu PPA.Boa sorte.

Como disse @Barry, a documentação usa mod_python.Não usei o Ubuntu como servidor, mas tive uma boa experiência com mod_wsgi no Solaris.Você pode encontrar documentação para mod_wsgi e Django no mod_wsgi site.

Uma rápida revisão de seus requisitos:

  • Fácil de configurar Achei o Apache 2.2 bastante fácil de construir e instalar.
  • Rápido e fácil em recursos Eu diria que isso depende do seu uso e tráfego.* Você pode não querer servir todos os arquivos usando Apache e usar LightTPD (lighty) para arquivos estáticos do servidor.
  • Pode servir arquivos de mídia Presumo que você queira dizer imagens, arquivos flash?O Apache pode fazer isso.
  • Vários sites no mesmo servidor Hospedagem de servidor virtual em Apache.
  • Prefiro não instalar outras extensões Comente tudo o que você não deseja na configuração do Apache.

A maneira oficialmente recomendada de implantar um projeto Django é usar mod_python com Apache.Isto é descrito em a documentação. A principal vantagem disso é que é a forma mais bem documentada, mais suportada e mais comum de implantação.A desvantagem é que provavelmente não é o mais rápido.

A melhor configuração não é tão conhecida, eu acho.Mas aqui está:

  1. Use o nginx para atender solicitações (dinâmicas para o aplicativo, conteúdo estático diretamente).
  2. Use o servidor web python para servir conteúdo dinâmico.

Duas soluções mais rápidas para servidor web baseado em python são:

Você precisa procurar no Google para encontrar a melhor configuração atual para Django (ainda em desenvolvimento).

Estou a usar nginx (0.6.32 tirado de Sid) com mod_wsgi.Funciona muito bem, embora não possa dizer se é melhor do que as alternativas porque nunca experimentei nenhuma.Nginx tem memcached suporte integrado, que talvez possa interoperar com o middleware de cache do Django (na verdade, não o uso, em vez disso, preencho o cache manualmente usando python-memcache e o invalido quando as alterações são feitas), portanto, os acessos ao cache ignoram completamente o Django (meu desenvolvimento máquina pode atender cerca de 3.000 solicitações por segundo).

Uma advertência:nginx’ mod_wsgi não gosta muito de locais nomeados (ele tenta passá-los SCRIPT_NAME), então o óbvio 'error_page 404 = @django’ causará numerosos erros obscuros.Eu tive que corrigir a fonte mod_wsgi para consertar isso.

Também estou lutando para entender todas as opções.Em esta postagem do blog Encontrei alguns benefícios do mod_wsgi em comparação com o mod_python explicados.

Vários sites de baixo tráfego em um VPS pequeno tornam o consumo de RAM a principal preocupação, e mod_python parece ser uma má opção nesse caso.Usando lighttpd e FastCGI, consegui reduzir o uso mínimo de memória de um site Django simples para 58 MiB virtuais e 6,5 MiB residentes (após reiniciar e atender uma única solicitação sem muita memória RAM).

Percebi que a atualização do Python 2.4 para 2.5 no Debian Etch aumentou o consumo mínimo de memória dos processos Python em alguns por cento.Por outro lado, o melhor gerenciamento de memória do 2.5 pode ter um efeito oposto maior em processos de longa execução.

Mantenha simples: Django recomenda Apache e mod_wsgi (ou mod_python).Se servir arquivos de mídia for uma grande parte do seu serviço, considere o Amazon S3 ou o Rackspace CloudFiles.

Na minha opinião, a pilha melhor/mais rápida é verniz-nginx-uwsgi-django.E estou usando com sucesso.

Se estiver usando lighthttpd, você também pode usar FastCGI para servir Django.Não tenho certeza de como a velocidade se compara ao mod_wsgi, mas se a memória funcionar corretamente, você obterá alguns dos benefícios que obteria com o mod_wsgi e que não obteria com o mod_python.A principal delas é que você pode dar a cada aplicativo seu próprio processo (o que é realmente útil para manter a memória de diferentes aplicativos separada, bem como para aproveitar as vantagens de computadores com vários núcleos.

Editar:Apenas para acrescentar em relação à sua atualização sobre o nginix, se a memória funcionar corretamente novamente, o nginix usará "greenlets" para lidar com a simultaneidade.Isso significa que talvez você precise ter um pouco mais de cuidado para garantir que um aplicativo não consuma todo o tempo do servidor.

Usamos nginx e FastCGI para todas as nossas implantações do Django.Isso ocorre principalmente porque geralmente implantamos no Slicehost e não queremos doar toda a nossa memória para o Apache.Acho que este seria o nosso "caso de uso".

Quanto às observações sobre a documentação ser principalmente em russo - encontrei a maior parte das informações no Wiki em inglês ser muito útil e preciso.Este site também possui exemplos de configurações para Django, a partir dos quais você pode ajustar sua própria configuração do nginx.

Existem muitas maneiras de fazer isso. Por esse motivo, recomendo ler atentamente o artigo relacionado ao processo de implantação no DjangoAdvent.com:Eric Florenzano - Implantando Django com FastCGI: http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ Leia também:Mike Malone - Blog de Scaling Django Stocastictechnologies:A configuração perfeita do Django Mikkel Hoegh Blog:35% Mudança de melhoria do tempo de resposta-uwsgi-nginx

Cumprimentos

Tenho um aviso para usar o Cherokee.Quando você faz alterações no Django Cherokee mantém o processo ANTIGO, em vez de eliminá-lo e iniciar um novo.

No Apache, recomendo fortemente este artigo.

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

É fácil de configurar, fácil de eliminar ou redefinir após fazer alterações.

Basta digitar no terminal

sudo /etc/init.d/apache2 restart

e as mudanças são vistas instantaneamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top