Eu tenho um servidor Flask rodando através da porta 5000, e ele's tudo bem. Eu posso acessá-lo em http://example.com:5000
Mas é possível aceder simplesmente a ele em http://example.com? I'estou assumindo que isso significa que eu tenho que mudar a porta de 5000 para 80. Mas quando tento isso no Flask, recebo esta mensagem de erro quando o corro.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Rodando lsof -i :80
retorna
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
Preciso de matar estes processos primeiro? Isso é seguro? Ou existe outra forma de manter o Flask funcionando na porta 5000, mas ter o domínio do site principal redirecionado de alguma forma?
Então ele'está vomitando aquela mensagem de erro porque você tem apache2
rodando na porta 80.
Se isto é para o desenvolvimento, eu deixá-lo-ia como está no porto 5000.
Se ele's para produção também:
**Não recomendado***
*Pára primeiro o apache2
;
Não recomendado, como consta na documentação:
Você pode usar o servidor builtin durante o desenvolvimento, mas você deve usar uma opção de implantação completa para aplicações de produção. (Não utilize o servidor de desenvolvimento builtin em produção).
**Recomendado***
HTTP
tráfego através do apache2
para o Flask.Dessa forma, o apache2
pode lidar com todos os seus arquivos estáticos (que ele's é muito bom - muito melhor que o servidor de depuração embutido no Flask) e agir como um proxy reverso para o seu conteúdo dinâmico, passando esses pedidos para o Flask.
Aqui's um link para a documentação oficial sobre como configurar o Flask com Apache + mod_wsgi.
**Editar 1 - Esclarecimento para @Djack***
Tráfego HTTP Proxy para o Flask através do apache2
Quando um pedido chega ao servidor na porta 80 (HTTP
) ou porta 443 (HTTPS
), um servidor web como Apache ou Nginx lida com a conexão do pedido e trabalha no que fazer com ele. No nosso caso, um pedido recebido deve ser configurado para ser passado para o Flask no protocolo WSGI e tratado pelo código Python. Este é o " dinâmico" parte.
proxy reverso para conteúdo dinâmico
Há algumas vantagens em configurar o seu servidor web como o acima descrito;
Seu problema é que você já tem um webserver apache rodando que já está usando a porta 80. Então, você também pode:
Mata o Apache: Você provavelmente deveria fazer isso via `/etc/init.d/apache2 stop', ao invés de simplesmente matá-los.
Implante seu aplicativo de frasco em seu processo apache, como frasco em apache descreve.