Eu tenho um servidor Flask executando a porta 5000, e está tudo bem. Eu posso acessá-lo em http://example.com:5000
Mas é possível simplesmente acessá-lo em http://example.com ? Estou assumindo que isso significa que tenho que alterar a porta de 5000 para 80. Mas quando tento isso no Flask, recebo essa mensagem de erro ao executá-lo.
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
lsof -i :80
Retornos em execução
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 matar esses processos primeiro? Isso é seguro? Ou existe outra maneira de manter o Flask em execução na porta 5000, mas redirecionar o domínio principal do site de alguma forma?
python
networking
flask
port
quantumtremor
fonte
fonte
Respostas:
Portanto, está
apache2
exibindo essa mensagem de erro porque você está executando na porta 80.Se isso é para desenvolvimento, eu deixaria como está na porta 5000.
Se for para produção:
Não recomendado
apache2
primeiro;Não recomendado conforme indicado na documentação:
Recomendado
HTTP
Tráfego de proxyapache2
até o Flask.Dessa forma,
apache2
pode lidar com todos os seus arquivos estáticos (nos quais é muito bom - muito melhor do que o servidor de depuração incorporado ao Flask) e atuar como um proxy reverso para o seu conteúdo dinâmico, passando essas solicitações para o Flask.Aqui está um link para a documentação oficial sobre a configuração do Flask com Apache + mod_wsgi.
Edição 1 - Esclarecimento para @Djack
Quando uma solicitação chega ao servidor na porta 80 (
HTTP
) ou 443 (HTTPS
), um servidor da Web como Apache ou Nginx lida com a conexão da solicitação e decide o que fazer com ela. No nosso caso, uma solicitação recebida deve ser configurada para ser transmitida ao Flask no protocolo WSGI e manipulada pelo código Python. Esta é a parte "dinâmica".Existem algumas vantagens em configurar seu servidor da web como acima;
fonte
Proxy HTTP traffic to Flask through apache2
" e "reverse proxy for dynamic content
"?1- Interrompa outros aplicativos que estão usando a porta 80. 2- execute o aplicativo com a porta 80:
fonte
Para servidor visível externamente, onde você não usa apache ou outro servidor web, basta digitar
fonte
CMD flask run --host=0.0.0.0 --port=$PORT
dentro do meu Dockerfile (por razões Heroku) e eu continuo recebendo erros sobre a necessidade de um inteiro para o meu portoSe você usar o seguinte para alterar a porta ou o host:
use o código a seguir para iniciar o servidor (minha entrada principal para o balão é app.py):
ao invés de usar:
fonte
Se você deseja que seu aplicativo seja na mesma porta, ou seja, port = 5000, execute apenas este comando no seu terminal:
e então execute:
Se você deseja executar em uma porta especificada, por exemplo, se você deseja executar na porta = 80, em seu arquivo principal, mencione isso:
fonte
Uma maneira conveniente é usar o pacote
python-dotenv
: ele lê um.flaskenv
arquivo onde você pode armazenar variáveis de ambiente para o balão.pip install python-dotenv
.flaskenv
no diretório raiz do seu aplicativoDentro do arquivo que você especificar:
Depois disso, você só precisa executar o aplicativo
flask run
e acessá-lo nessa porta.Observe que o
FLASK_RUN_HOST
padrão é127.0.0.1
e oFLASK_RUN_PORT
padrão é5000
.fonte
Esta é a única solução que funcionou para mim no Ubuntu-18.
Dentro do arquivo
app.py
, use:O código acima dará o mesmo erro de permissão, a menos que
sudo
seja usado para executá-lo:fonte
Seu problema é que você já possui um servidor web apache em execução que já usa a porta 80. Portanto, você pode:
Mate o apache: você provavelmente deve fazer isso via
/etc/init.d/apache2 stop
, em vez de simplesmente matá-los.Implante seu aplicativo de balão no processo do apache, como descrito no balão do apache .
fonte
Eu tive que definir
FLASK_RUN_PORT
no meu ambiente o número da porta especificado. Da próxima vez que você iniciar o aplicativo, o Flask carregará essa variável de ambiente com o número da porta que você selecionou.fonte
Você não precisa alterar o número da porta do seu aplicativo, basta configurar o servidor www (nginx ou apache) para consultas de proxy na porta do balão. Preste atenção
uWSGI
.fonte
defina a porta com
app.run(port=80,debug=True)
você, defina debug como true quando estiver no devfonte
Solução mais fácil e melhor
Salve seu arquivo .py em uma pasta. Nesse caso, o nome da minha pasta é test. No prompt de comando, execute o seguinte
----------------- O seguinte será retornado ----------------
Agora, no seu navegador, digite: http://127.0.0.1:8000 . obrigado
fonte
No meu cenário, as seguintes etapas funcionaram como um encanto:
Instalando o pacote:
Criando um arquivo oculto no diretório do meu aplicativo "flaskr / .flaskenv"
Adicionando o seguinte conteúdo:
Por fim, execute o comando flask mais uma vez:
A versão em que estou trabalhando é:
fonte