Servidor web leve para o Django com pequenas cargas de trabalho

2

Estou escrevendo um pequeno aplicativo no Django que será usado como interface administrativa para um conjunto de aplicativos geralmente configurado por arquivos de texto. Não vai fazer muito (analisar a entrada do usuário, converter entradas do banco de dados em arquivos simples e exibir tabelas bonitas com informações) e provavelmente será usado no máximo por um usuário por vez.

A única restrição é que o servidor em que ele será executado é pouco especificado (Pentium M 1,8 GHz, 512 MB RAM) e eu quero a maior parte de seu poder de computação disponível para aplicativos gerenciados e não para a interface de gerenciamento. Para o registro, estou usando o CentOS 5.

Qual servidor posso usar? Até agora, reuni as seguintes opções e opiniões:

  • O Apache pode ser muito importante para esse tipo de implantação
  • lighttpd + FCGI - pode ser instável
  • lighttpd / nginx como proxy rev + servidor web django - parece estranho para mim, como eu pensei que o servidor web django é destinado a fins de desenvolvimento / depuração

Você pode me recomendar uma boa solução para esse tipo de ambiente? Eu não estou focado em grandes cargas de trabalho ou simultaneidade (como a maioria das pessoas fazendo perguntas semelhantes), eu só quero que ele use o mínimo de RAM e tempo de CPU quando estiver ocioso ou em sessões únicas.

Além disso, observe que não tenho muita experiência em implantações de servidores da Web, proxies reversos etc. (embora eu saiba o básico e possa encontrar meu caminho com o google), então eu realmente aprecio a ajuda de pessoas que têm experiência com este tipo de problemas.

    
por galo 24.06.2011 / 12:38

5 respostas

4

Uma das soluções mais fáceis de configurar, com desempenho consideravelmente bom na minha opinião, é nginx , juntamente com gunicorn .

Para '' gunicorn '', você só precisa fazer algo como:

$ cd path/to/yourdjangoproject
$ gunicorn_django --workers=4

E uma configuração nginx bem padrão para isso é

server {
    ...

    location / {
        proxy_pass http://127.0.0.1:8000;
        break;
    }
}

Certamente melhor do que usar o fcgi e dependendo do flup, mas se você não se importa em sujar a mão, eu sugiro que você tente nginx + uwsgi como o zaub3r3r sugeriu.

    
por 24.06.2011 / 13:12
2

Considerando sua falta de experiência e sua excelente GUI de gerenciamento , eu recomendo Cherokee . Um servidor web rápido e fácil de usar com um assistente integrado para configurar um projeto do Django.

    
por 24.06.2011 / 14:21
1

Use o Apache e desabilite os módulos que você não precisa e garanta que você não esteja gerando muitos processos para começar.

A ideia de que o núcleo do Apache é de alguma forma pesado é um mito - pode ser tão robusto ou leve quanto você precisar, graças ao design modular.

Isso traz o benefício adicional de trabalhar com o sistema de atualização e empacotamento de distribuição existente.

PS: O sistema operacional trará com prazer as páginas não utilizadas no disco quando os aplicativos estiverem em execução, mas a interface de administração do servidor da Web não estiver sendo acessada. Confie no SO para manter residente o que ele precisa, quando precisar.

PPS: um DIMM de 2 GB custa menos do que o tempo gasto digitando essa consulta. Tire algum tempo para fazer uma metanálise da sua pergunta.

    
por 24.06.2011 / 16:30
0

A solução non plus ultra, aos meus olhos, é nginx + uwsgi (é um pouco mais difícil de configurar, porque você tem que compilar por conta própria e configurar mais). O mais fácil e recomendado é o Apache + mod_wsgi. Eu acho que um Apache2 bem configurado com mod_wsgi é a escolha certa para você.

    
por 24.06.2011 / 12:42
0

Django (Python) + servidor da web? Então talvez dê uma olhada em Tornado também (embora ele possa lidar com muito mais do que você quer).

    
por 24.06.2011 / 15:11