Embora isso seja possível, você não deve usar o servidor de desenvolvimento Flask na produção. O servidor de desenvolvimento Flask não foi projetado para ser particularmente seguro, estável ou eficiente. Consulte os documentos sobre implantação para soluções corretas.
Adicione um parâmetro ao seu app.run()
. Por padrão, ele é executado no host local, altere-o para app.run(host= '0.0.0.0')
ser executado no endereço IP da sua máquina.
Documentado no site do Flask em "Servidor visível externamente" na página Início rápido :
Servidor externamente visível
Se você executar o servidor, notará que o servidor está disponível apenas no seu próprio computador, não em qualquer outro na rede. Esse é o padrão, porque no modo de depuração, um usuário do aplicativo pode executar código Python arbitrário no seu computador. Se você tiver desabilitado a depuração ou confiar nos usuários da sua rede, poderá disponibilizar o servidor publicamente.
Apenas mude a chamada do run()
método para ficar assim:
app.run(host='0.0.0.0')
Isso diz ao seu sistema operacional para ouvir em um IP público.
mymacname.local
.flask run --host 0.0.0.0
para fazê-lo funcionar.Se você usar o executável do balão para iniciar o servidor, poderá
flask run --host=0.0.0.0
alterar o padrão de 127.0.0.1 e abri-lo para conexões não locais. Os métodos config e app.run descritos pelas outras respostas provavelmente são práticas recomendadas, mas isso também pode ser útil.Referência: http://flask.pocoo.org/docs/0.11/quickstart/
fonte
127.0.0.1
(eu configurei meu executável do Flask corretamente ou, pelo que parecia, não foi certo o que eu estava fazendo errado). No entanto, depois de adicionarapp.run(host='0.0.0.0')
como observado em outra resposta ao meu arquivo do servidor, consegui acessar a página através das redes. Alguém mais tem um problema como o que eu descrevi ou tem alguma informação sobre ele?Tente isso se o método 0.0.0.0 não funcionar
Coisas chatas
Pessoalmente, lutei bastante para tornar meu aplicativo acessível a outros dispositivos (laptops e telefones celulares) por meio de um servidor local. Eu tentei o método 0.0.0.0, mas sem sorte. Então tentei mudar a porta, mas simplesmente não funcionou. Então, depois de tentar várias combinações diferentes, cheguei a essa e resolvi meu problema de implantar meu aplicativo em um servidor local.
Passos
ipconfig
no Windows eifconfig
no linux e Mac.Observe: A etapa acima deve ser executada na máquina em que você está servindo o aplicativo e não na máquina em que está acessando. Observe também que o endereço IPv4 pode mudar se você se desconectar e se reconectar à rede.
Agora, basta executar o aplicativo do balão com o endereço IPv4 adquirido.
flask run -h 192.168.X.X
Por exemplo, no meu caso (veja a imagem), executei-o como:
flask run -h 192.168.1.100
No meu dispositivo móvel
Material opcional
Se você estiver executando este procedimento no Windows e usando o Power Shell como CLI, e ainda não conseguir acessar o site, tente um comando CTRL + C no shell que está executando o aplicativo. O Power Shell fica congelado algumas vezes e precisa de uma pitada para reviver. Fazer isso pode até finalizar o servidor, mas às vezes funciona.
É isso aí. Dê um joinha se você achou isso útil.😉
Algumas coisas mais opcionais
Criei um script curto do Powershell que fornecerá seu endereço IP sempre que você precisar de um:
Salve-o em um arquivo com extensão .ps1 (para PowerShell) e execute-o antes de iniciar seu aplicativo. Você pode salvá-lo na pasta do projeto e executá-lo como:
Nota: Salvei o código do shell acima em getIP.ps1.
Cool.👌
fonte
Se o seu
cool
aplicativo tiver sua configuração carregada de um arquivo externo, como no exemplo a seguir, não se esqueça de atualizar o arquivo de configuração correspondente com HOST = "0.0.0.0"fonte
Adicione linhas abaixo ao seu projeto
fonte
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
netstat -na|findstr 5005
.Verifique se a porta específica está aberta no servidor para atender o cliente ou não?
na distribuição Ubuntu ou Linux
Configure o aplicativo para lidar com solicitações remotas
fonte
Vá para o caminho do seu projeto no CMD (prompt de comando) e execute o seguinte comando: -
defina FLASK_APP = ABC.py
SET FLASK_ENV = desenvolvimento
execução do balão -h [yourIP] -p 8080
você receberá o / p no CMD: -
Agora você pode acessar seu aplicativo de balão em outra máquina usando http: // [yourIP]: 8080 / url
fonte
Se você estiver tendo problemas para acessar o servidor Flask, implantado usando o PyCharm , leve em consideração o seguinte:
O PyCharm não executa seu arquivo .py principal diretamente, portanto, nenhum código
if __name__ == '__main__':
será executado e quaisquer alterações (comoapp.run(host='0.0.0.0', port=5000)
) não terão efeito.Em vez disso, você deve configurar o servidor Flask usando Configurações de execução, em particular, colocando
--host 0.0.0.0 --port 5000
no campo Opções adicionais .Mais sobre como configurar o servidor Flask no PyCharm
fonte
Eu tive o mesmo problema, uso o PyCharm como editor e, quando criei o projeto, o PyCharm criou um servidor de balão. O que eu fiz foi criar um servidor com Python da seguinte maneira;
basicamente o que eu fiz foi criar um novo servidor, mas balão, se não python
Espero que ajude você
fonte
Esta resposta não está relacionada apenas ao balão, mas deve ser aplicável a todos que não podem conectar o serviço de outro problema de host .
netstat -ano | grep <port>
para ver se o endereço é 0.0.0.0 ou ::. Se for 127.0.0.1, será apenas para solicitações locais.Hoje, eu executo meu aplicativo de balão como de costume, mas notei que ele não pode se conectar a partir de outro servidor. Então eu corro
netstat -ano | grep <port>
, e o endereço local é::
or0.0.0.0
(tentei ambos, e sei que 127.0.0.1 permite apenas a conexão do host local). Então eu useitelnet host port
, o resultado é comoconnect to ...
. Isso é muito estranho. Então eu pensei que seria melhor verificar comtcpdump -i any port <port> -w w.pcap
. E eu notei que é tudo assim:Então, marcando a
iptables --list
seção OUTPUT, pude ver várias regras:essas regras proíbem pacotes vitais de saída TCP em handshaking. Ao excluí-los, o problema se foi.
fonte
Para mim, segui a resposta acima e a modifiquei um pouco:
Por exemplo:
fonte
vá para o conjunto de caminhos do projeto FLASK_APP = ABC.py SET FLASK_ENV = development
flask run -h [yourIP] -p 8080 você seguirá o / p no CMD: - * Servindo o aplicativo Flask "expirement.py" (carregamento lento) * Ambiente: desenvolvimento * Modo de depuração: ativado * Reiniciando com stat * O depurador está ativo ! * PIN do depurador: 199-519-700 * Executando em http: // [yourIP]: 8080 / (Pressione CTRL + C para sair)
fonte
Você também pode definir o host (para expô-lo em uma rede voltada para o endereço IP) e a porta por meio de variáveis de ambiente.
Consulte Como obter todas as opções de comando disponíveis para definir variáveis de ambiente?
fonte
Crie um arquivo
.flaskenv
no diretório raiz do projeto.Os parâmetros neste arquivo são geralmente:
Se você tiver um ambiente virtual, ative-o e faça a
pip install python-dotenv
.Este pacote usará o
.flaskenv
arquivo e as declarações nele serão automaticamente importadas nas sessões do terminal.Então você pode fazer
flask run
fonte