답변:
이것이 가능하지만 프로덕션 환경에서 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에서 청취하도록 지시합니다.
mymacname.local
합니다.
flask run --host 0.0.0.0
에서는 작동 하도록 명시 적으로 사용해야 합니다.
플라스크 실행 파일을 사용하여 서버를 시작 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를 수신하도록 지시합니다.
127.0.0.1
(Flask 실행 파일을 올바르게 설정 했으므로 그렇지 않은 것 같습니다. 내가 뭘 잘못했는지). 그러나 app.run(host='0.0.0.0')
다른 답변에 언급 된대로 서버 파일에 추가 한 후 네트워크를 통해 페이지에 액세스 할 수있었습니다. 다른 사람이 내가 설명한 것과 같은 문제가 있거나 그것에 관한 정보가 있습니까?
0.0.0.0 방법이 작동하지 않으면 이것을 시도하십시오
지루한 물건
나는 개인적으로 로컬 서버를 통해 다른 장치 (노트북 및 휴대 전화)에서 내 앱에 액세스 할 수 있도록 많은 어려움을 겪었습니다. 0.0.0.0 방법을 시도했지만 운이 없습니다. 그런 다음 포트 변경을 시도했지만 작동하지 않았습니다. 그래서 여러 가지 다른 조합을 시도한 후이 조합에 도달하여 로컬 서버에 앱을 배포하는 문제를 해결했습니다.
단계
ipconfig
Windows와 ifconfig
Linux 및 Mac에서 입력하여 수행 할 수 있습니다 .참고 : 위 단계는 앱을 제공하는 컴퓨터가 아닌 액세스하는 컴퓨터에서 수행해야합니다. 또한 네트워크 연결을 끊었다가 다시 연결하면 IPv4 주소가 변경 될 수 있습니다.
이제 획득 한 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에 저장했습니다.
쿨 .👌
프로젝트에 아래 줄을 추가하십시오
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
netstat -na|findstr 5005
.
클라이언트에 서비스를 제공하기 위해 서버에서 특정 포트가 열려 있는지 확인하십시오.
우분투 또는 리눅스 배포판에서
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
CMD (명령 프롬프트)에서 프로젝트 경로로 이동하여 다음 명령을 실행하십시오.
FLASK_APP = ABC.py 설정
SET FLASK_ENV = 개발
플라스크 실행 -h [yourIP] -p 8080
CMD에서 다음과 같은 o / p를 얻습니다.
이제 http : // [yourIP] : 8080 / url을 사용하여 다른 컴퓨터에서 플라스크 앱에 액세스 할 수 있습니다 .
PyCharm을 사용하여 배포 된 Flask 서버에 액세스하는 데 문제 가있는 경우 다음을 고려하십시오.
PyCharm은 기본 .py 파일을 직접 실행하지 않으므로 코드 if __name__ == '__main__':
가 실행되지 않으며 변경 사항 (예 app.run(host='0.0.0.0', port=5000)
:)이 적용되지 않습니다.
대신, 배치, 특히, 실행 구성을 사용하여 플라스크 서버를 구성해야합니다 --host 0.0.0.0 --port 5000
에 추가 옵션 필드.
PyCharm에서 Flask 서버 구성 에 대한 추가 정보
나를 위해 위의 답변을 따라 조금 수정했습니다.
예 :
이 답변은 플라스크에만 관련이 없지만 다른 호스트 문제로 서비스를 연결할 수없는 모든 사람에게 적용 가능해야합니다 .
netstat -ano | grep <port>
주소가 0.0.0.0인지 ::인지 확인하는 데 사용 합니다. 127.0.0.1 인 경우 로컬 요청 전용입니다.오늘은 평소대로 플라스크 앱을 실행했지만 다른 서버에서 연결할 수 없음을 알았습니다. 그런 다음 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
. 그리고 나는 그것이 모두 다음과 같은 것을 알았습니다.
그런 다음 iptables --list
OUTPUT 섹션 을 확인하면 몇 가지 규칙을 볼 수 있습니다.
이 규칙은 핸드 쉐이킹에서 출력 tcp 중요 패킷을 금지합니다. 그것들을 삭제하면 문제가 사라집니다.
프로젝트 경로 설정으로 이동 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를 눌러 종료)
또한 환경 변수를 통해 호스트 (네트워크가 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
.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