Executando vários sites de um único framework web Python
-
01-07-2019 - |
Pergunta
O que vem boa (ou pelo menos inteligentes) formas de executar vários sites de um único framework web, comum Python (ou seja: Pilões, TurboGears, etc)? Eu sei que você pode fazer o redirecionamento com base no domínio ou caminho para reescrever o URI para apontar para uma localização específica do local e eu também vi alguns "if site == 'site1' / elseif / elseif / etc
" brutal que eu gostaria de evitar.
Solução
Django tem esta embutido. Consulte o framework sites .
Como uma técnica geral, incluem uma coluna de 'host' no seu esquema de banco de dados anexado aos dados que você quer ser específico do host, em seguida, incluir o Host
cabeçalho HTTP na consulta quando você está recuperando dados.
Outras dicas
Usando Django no Apache com mod_python, múltiplos host I (não relacionada) Django locais simplesmente com o seguinte apache config:
<VirtualHost 1.2.3.4>
DocumentRoot /www/site1
ServerName site1.com
<Location />
SetHandler python-program
SetEnv DJANGO_SETTINGS_MODULE site1.settings
PythonPath "['/www'] + sys.path"
PythonDebug On
PythonInterpreter site1
</Location>
</VirtualHost>
<VirtualHost 1.2.3.4>
DocumentRoot /www/site2
ServerName site2.com
<Location />
SetHandler python-program
SetEnv DJANGO_SETTINGS_MODULE site2.settings
PythonPath "['/www'] + sys.path"
PythonDebug On
PythonInterpreter site2
</Location>
</VirtualHost>
Não há necessidade de várias instâncias Apache ou servidores proxy. Usando uma directiva PythonInterpreter diferente para cada site (o nome digitado é arbitrária) mantém os namespaces separados.
Eu uso CherryPy como meu servidor web (que vem com Turbogears), e eu simplesmente executar várias instâncias do servidor web CherryPy em diferentes portos ligados a localhost. Então eu configurar o Apache com mod_proxy e mod_rewrite aos pedidos de forma transparente para a frente para a porta apropriada com base na solicitação HTTP.
Usando várias instâncias de servidor em portas locais é uma boa idéia, mas você não precisa de um servidor web cheio de recursos para solicitações de redirecionamento HTTP.
Gostaria de usar libra como um proxy reverso para fazer o trabalho. É pequeno, rápido, simples e faz exatamente o que precisamos aqui.
O QUE libra é:
- um reverse-proxy:. Passa solicitações de navegadores cliente para um ou mais servidores de back-end
- um balanceador de carga:. Ele vai distribuir os pedidos dos navegadores cliente entre vários servidores back-end, mantendo as informações da sessão
- um SSL de fardos:. Pound irá descriptografar HTTPS solicitações de navegadores cliente e passá-los como HTTP simples para os servidores back-end
- um HTTP / HTTPS desinfetante:. Pound vai verificar pedidos de correção e aceitar aqueles única bem formadas
- um failover do servidor:. Deve um servidor back-end falhar, Pound tomará nota do fato e parada passando solicitações para ele até que ele recupera
- um redirecionador pedido:. Pedidos podem ser distribuídos entre os servidores de acordo com a URL solicitada