Flask dev 서버가 네트워크를 통해 볼 수 있도록 구성


443

이것이 Flask 전용인지 확실하지 않지만 dev 모드 ( http://localhost:5000) 에서 앱을 실행 하면 네트워크의 다른 컴퓨터 ( )에서 액세스 할 수 없습니다 http://[dev-host-ip]:5000. 예를 들어, Dev 모드의 Rails에서는 제대로 작동합니다. Flask dev 서버 구성에 관한 문서를 찾을 수 없습니다. 이것을 활성화하기 위해 무엇이 구성되어야하는지 아십니까?

답변:


713

이것이 가능하지만 프로덕션 환경에서 Flask dev 서버를 사용해서는 안됩니다. Flask dev 서버는 특히 안전하거나 안정적이거나 효율적으로 설계되지 않았습니다. 올바른 솔루션 에 대한 배포 문서를 참조하십시오 .


에 매개 변수를 추가하십시오 app.run(). 기본적으로 localhost에서 app.run(host= '0.0.0.0')실행되므로 시스템 IP 주소에서 실행되도록 변경하십시오 .

빠른 시작 페이지의 "외부 적으로 보이는 서버"아래 Flask 사이트에 문서화되어 있습니다 .

외부에서 볼 수있는 서버

서버를 실행하면 네트워크의 다른 컴퓨터가 아닌 자신의 컴퓨터에서만 서버를 사용할 수 있습니다. 디버깅 모드에서는 응용 프로그램 사용자가 컴퓨터에서 임의의 Python 코드를 실행할 수 있기 때문에 이것이 기본값입니다. 디버그를 비활성화하거나 네트워크의 사용자를 신뢰하는 경우 서버를 공개적으로 사용할 수 있습니다.

run()메소드 호출 을 다음과 같이 변경하십시오.

app.run(host='0.0.0.0')

이것은 운영 체제가 공용 IP에서 청취하도록 지시합니다.


44
PC에 IP가 몇 개인 경우 특정 ip app.run (host = "192.168.1.7", port = 5010)으로 설정하기
lxx

2
내 서버에서 호스팅하여 플라스크 스크립트에 액세스하는 방법
pyd

이 솔루션은 Docker 컨테이너에서도 작동합니다. 이 게시물 에서는 이러한 경우에 대한 솔루션을 설명합니다.

Mac의 경우 : 시스템 환경 설정> 공유에 지정된 도메인을 타겟팅하지 않는 한 플라스크 앱에 0.0.0.0 (제공된 경우에도)에 액세스 할 수 없습니다 . 도메인은 다음과 같아야 mymacname.local합니다.
Nico Cernek

14
어떻게 든 내 Mac flask run --host 0.0.0.0에서는 작동 하도록 명시 적으로 사용해야 합니다.
Minh Nghĩa

122

플라스크 실행 파일을 사용하여 서버를 시작 flask run --host=0.0.0.0하는 경우 기본값을 127.0.0.1에서 변경하여 로컬이 아닌 연결로 열 수 있습니다. 다른 답변에서 설명하는 config 및 app.run 메소드가 더 나은 방법 일 수 있지만 유용 할 수도 있습니다.

외부에서 볼 수있는 서버 서버를 실행하면 네트워크의 다른 컴퓨터가 아닌 자신의 컴퓨터에서만 서버에 액세스 할 수 있습니다. 디버깅 모드에서는 응용 프로그램 사용자가 컴퓨터에서 임의의 Python 코드를 실행할 수 있기 때문에 이것이 기본값입니다.

디버거를 비활성화하거나 네트워크의 사용자를 신뢰하는 경우 명령 줄에 --host = 0.0.0.0을 추가하여 서버를 공개적으로 사용할 수 있습니다.

flask run --host = 0.0.0.0 운영 체제가 모든 퍼블릭 IP를 수신하도록 지시합니다.

참조 : http://flask.pocoo.org/docs/0.11/quickstart/


2
다른 사람이 그것을 경험했는지 모르겠지만 QuickStart 문서에 따라이 방법을 먼저 시도했지만 이상한 이유로 IP가 계속 실행됩니다 127.0.0.1(Flask 실행 파일을 올바르게 설정 했으므로 그렇지 않은 것 같습니다. 내가 뭘 잘못했는지). 그러나 app.run(host='0.0.0.0')다른 답변에 언급 된대로 서버 파일에 추가 한 후 네트워크를 통해 페이지에 액세스 할 수있었습니다. 다른 사람이 내가 설명한 것과 같은 문제가 있거나 그것에 관한 정보가 있습니까?
twknab

2
나를 위해 flask run --host = 0.0.0.0으로 문제를 해결하십시오. url -http : // <ip address> : 5000에 액세스 할 수있었습니다. 먼저 sudo firewall-cmd --zone = public --list-ports 명령을 사용하여 컴퓨터에서 열려있는 포트를 확인한 다음 포트 5000이 열려 있지 않은 것을 알게되었습니다. sudo firewall-cmd --zone = public --permanent --add-port = 5000 / tcp 명령을 사용하여 sudo firewall-cmd --reload 명령을 사용하여이 포트를 열었습니다. 그런 다음 플라스크 앱을 다음과 같이 실행합니다.-flask run --host = 0.0.0.0
Pintu Kumar

24

0.0.0.0 방법이 작동하지 않으면 이것을 시도하십시오

지루한 물건

나는 개인적으로 로컬 서버를 통해 다른 장치 (노트북 및 휴대 전화)에서 내 앱에 액세스 할 수 있도록 많은 어려움을 겪었습니다. 0.0.0.0 방법을 시도했지만 운이 없습니다. 그런 다음 포트 변경을 시도했지만 작동하지 않았습니다. 그래서 여러 가지 다른 조합을 시도한 후이 조합에 도달하여 로컬 서버에 앱을 배포하는 문제를 해결했습니다.

단계

  1. 컴퓨터의 로컬 IPv4 주소를 얻습니다. 이것은 ipconfigWindows와 ifconfigLinux 및 Mac에서 입력하여 수행 할 수 있습니다 .

IPv4 (Windows)

참고 : 위 단계는 앱을 제공하는 컴퓨터가 아닌 액세스하는 컴퓨터에서 수행해야합니다. 또한 네트워크 연결을 끊었다가 다시 연결하면 IPv4 주소가 변경 될 수 있습니다.

  1. 이제 획득 한 IPv4 주소로 플라스크 앱을 실행하면됩니다.

    flask run -h 192.168.X.X

    예를 들어 제 경우 (이미지 참조)는 다음과 같이 실행했습니다.

    flask run -h 192.168.1.100

플라스크 앱 실행

휴대 기기에서

휴대 전화의 스크린 샷

선택적 물건

Windows에서이 절차를 수행하고 Power Shell을 CLI로 사용하면서 웹 사이트에 여전히 액세스 할 수없는 경우 앱을 실행중인 쉘에서 CTRL + C 명령을 시도하십시오. Power Shell이 ​​때때로 멈춰서 소생하기 위해서는 꼬집음이 필요합니다. 이렇게하면 서버가 종료 될 수도 있지만 간혹 트릭을 수행하기도합니다.

그게 다야. 도움이된다면 엄지 손가락을 포기하십시오 .😉

더 선택적인 것들

IP 주소가 필요할 때마다 얻을 수있는 짧은 Powershell 스크립트를 만들었습니다.

$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
    if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
        $ipv4 = $matches[1]
    }
}
echo $ipv4

.ps1 확장명 (PowerShell 용)으로 파일에 저장하고 앱을 시작하기 전에 실행하십시오. 프로젝트 폴더에 저장하고 다음과 같이 실행할 수 있습니다.

.\getIP.ps1; flask run -h $ipv4

참고 : 위의 쉘 코드를 getIP.ps1에 저장했습니다.

쿨 .👌


1
네! 효과가있다. ipv4 ip를 플라스크로 설정하여 모바일에서 사용할 수 있습니다. 잘하면 그것은 또한 다른 도움이됩니다 :)
Ashu Kumar

@nwillo는 모바일을 수행하고 내가 서비스를 제공하는 컴퓨터는 동일한 Wi-Fi / 네트워크에 연결됩니다.
sachin rathod

@sachinrathod 예. 그들은해야만한다. 이것이 동일한 IP 게이트웨이에 액세스 할 수있는 방법입니다.
nwillo

22

귀하의 경우 cool응용 프로그램이 그것의 구성은 외부 파일에서로드처럼 다음 예에서, 다음 = "0.0.0.0"HOST와 해당 설정 파일을 업데이트하는 것을 잊지 마세요

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            

1
이것은 플라스크 구성에 호스트 이름과 포트 번호를 저장하는 좋은 방법입니다. 나는이 솔루션을 정확하게 찾고있었습니다.
compie

20

프로젝트에 아래 줄을 추가하십시오

if __name__ == '__main__':
    app.debug = True
    app.run(host = '0.0.0.0',port=5005)

내가 받고 있어요OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
pyd

해결 방법 run as administrator로 python 파일을 실행하고 포트가 Windows에서 실행 중인지 확인해야합니다 netstat -na|findstr 5005.
Jeevan Chaitanya

10

클라이언트에 서비스를 제공하기 위해 서버에서 특정 포트가 열려 있는지 확인하십시오.

우분투 또는 리눅스 배포판에서

sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000

원격 요청을 처리하도록 애플리케이션 구성

app.run(host='0.0.0.0' , port=5000)


python3 app.py & #run application in background

5

CMD (명령 프롬프트)에서 프로젝트 경로로 이동하여 다음 명령을 실행하십시오.

FLASK_APP = ABC.py 설정

SET FLASK_ENV = 개발

플라스크 실행 -h [yourIP] -p 8080

CMD에서 다음과 같은 o / p를 얻습니다.

  • 플라스크 앱 "expirement.py"제공 (게으른 로딩)
    • 환경 : 개발
    • 디버그 모드 : 켜기
    • stat로 재시작
    • 디버거가 활성화되었습니다!
    • 디버거 PIN : 199-519-700
    • 에서 실행 에 http : // [yourIP] : 8080 / (CTRL + C를 눌러 종료합니다)

이제 http : // [yourIP] : 8080 / url을 사용하여 다른 컴퓨터에서 플라스크 앱에 액세스 할 수 있습니다 .


4

PyCharm을 사용하여 배포 된 Flask 서버에 액세스하는 데 문제 가있는 경우 다음을 고려하십시오.

PyCharm은 기본 .py 파일을 직접 실행하지 않으므로 코드 if __name__ == '__main__':가 실행되지 않으며 변경 사항 (예 app.run(host='0.0.0.0', port=5000):)이 적용되지 않습니다.

대신, 배치, 특히, 실행 구성을 사용하여 플라스크 서버를 구성해야합니다 --host 0.0.0.0 --port 5000추가 옵션 필드.

Flask 서버 PyCharm의 구성 실행

PyCharm에서 Flask 서버 구성 에 대한 추가 정보


이것은 실제로 모든 문제를 해결 했으며이 질문에 대한 정답이어야합니다!
Alberto Bellini

4

나를 위해 위의 답변을 따라 조금 수정했습니다.

  1. 명령 프롬프트에서 ipconfig를 사용하여 ipv4 주소를 가져옵니다.
  2. 플라스크 코드가있는 파일로 이동
  3. 주요 기능에서 app.run (host = 'your ipv4 address')를 작성하십시오.

예 :

여기에 이미지 설명을 입력하십시오


3

나는 같은 문제가 있었고 PyCharm을 편집기로 사용하고 프로젝트를 만들 때 PyCharm은 Flask Server를 만들었습니다. 내가 한 것은 다음과 같은 방법으로 Python으로 서버를 만드는 것입니다.

Python 서버 PyCharm 구성 기본적으로 내가 한 것은 새 서버를 만들었지 만 파이썬이 아닌 경우 플라스크

도움이 되길 바랍니다


이미지 만 게시하지 말고 문제를 해결하는 방법을 구체적으로 설명하십시오.
특정 성능

물론 대답을 개선하기 위해 게시물을 이미 편집하고 있다면 말입니다.
Juanes30

3

이 답변은 플라스크에만 관련이 없지만 다른 호스트 문제로 서비스를 연결할 수없는 모든 사람에게 적용 가능해야합니다 .

  1. netstat -ano | grep <port>주소가 0.0.0.0인지 ::인지 확인하는 데 사용 합니다. 127.0.0.1 인 경우 로컬 요청 전용입니다.
  2. 패킷이 누락되었는지 확인하려면 tcpdump를 사용하십시오. 불균형이 분명하면 iptables로 라우팅 규칙을 확인하십시오.

오늘은 평소대로 플라스크 앱을 실행했지만 다른 서버에서 연결할 수 없음을 알았습니다. 그런 다음 netstat -ano | grep <port>로컬 주소는 ::또는 0.0.0.0이며 두 가지 모두 시도했으며 127.0.0.1은 로컬 호스트에서만 연결을 허용한다는 것을 알고 있습니다. 그런 다음 telnet host port결과는 같습니다 connect to .... 이것은 매우 이상합니다. 그런 다음로 확인하는 것이 더 좋다고 생각했습니다 tcpdump -i any port <port> -w w.pcap. 그리고 나는 그것이 모두 다음과 같은 것을 알았습니다.

tcpdump 결과는 원격 호스트의 SYN 패킷 만 있음을 보여줍니다

그런 다음 iptables --listOUTPUT 섹션 을 확인하면 몇 가지 규칙을 볼 수 있습니다.

iptables 목록 결과

이 규칙은 핸드 쉐이킹에서 출력 tcp 중요 패킷을 금지합니다. 그것들을 삭제하면 문제가 사라집니다.


1

프로젝트 경로 설정으로 이동 FLASK_APP = ABC.py SET FLASK_ENV = development

플라스크 실행 -h [yourIP] -p 8080 CMD에서 o / p를 따를 것입니다 :-* Flask 앱 "expirement.py"제공 (게으른 로딩) * 환경 : 개발 * 디버그 모드 : 설정 * 통계로 다시 시작 * 디버거 활성화 ! * 디버거 PIN : 199-519-700 * http : // [yourIP] : 8080 /에서 실행 (CTRL + C를 눌러 종료)


1

또한 환경 변수를 통해 호스트 (네트워크가 IP 주소를 향하도록) 및 포트를 설정할 수 있습니다.

$ export FLASK_APP=app.py
$ export FLASK_ENV=development
$ export FLASK_RUN_PORT=8000
$ export FLASK_RUN_HOST=0.0.0.0

$ flask run
 * Serving Flask app "app.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on https://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 329-665-000

환경 변수를 설정하기 위해 사용 가능한 모든 명령 옵션을 얻는 방법을 참조하십시오 .


1

.flaskenv프로젝트 루트 디렉토리에 파일 을 작성하십시오 .

이 파일의 매개 변수는 일반적으로 다음과 같습니다.

FLASK_APP=app.py
FLASK_ENV=development
FLASK_RUN_HOST=[dev-host-ip]
FLASK_RUN_PORT=5000

가상 환경이있는 경우이를 활성화하고을 수행하십시오 pip install python-dotenv.

이 패키지는 .flaskenv파일 을 사용할 것이며, 파일 내부의 선언은 터미널 세션을 통해 자동으로 가져 옵니다 .

그럼 넌 할 수있어 flask run

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.