저는 우분투 18.04를 사용하는 Digital Ocean Droplet을 가지고 있으며 이 가이드에 따라 Flask 앱을 만들고 Gunicorn + nginx를 사용하여 호스팅하려고 합니다.
따라서 가이드의 시작 부분에서 샘플 Flask 애플리케이션(myproject.py라는 이름)을 만들었습니다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
if __name__ == "__main__":
app.run(host='0.0.0.0')
그런 다음 다음을 수행하여 인터넷에 노출되는지 여부를 테스트할 수 있습니다.
sudo ufw allow 5000
python myproject.py
내 질문:
내 터미널에서는 앱이 제대로 실행되는 것 같지만 브라우저가 URL에 액세스하려고 하면 로드되지 않습니다.
이제 저에게 이상한 점은 이 두 명령을 실행하고 애플리케이션을 시작하면 매우 정상적인 출력이 생성된다는 것입니다.
(myprojectenv) root@ubuntu-s-1vcpu-1gb-nyc1-01:/home/root/myproject# python myproject.py
* Serving Flask app "myproject" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
하지만 실제로 URL에서 Droplet에 액세스하려고 하면 다음과 같습니다.http://165.227.205.175:5000(구글 크롬에서)
전형적인 "사이트에 접근할 수 없음 오류"가 나타납니다.
또한 터미널은 알림을 받지 못하며 내 플라스크 애플리케이션은 누군가가 이에 액세스하려고 한다는 사실을 전혀 인식하지 못합니다.
그러나 애플리케이션을 다음과 같이 변경하면:
[... flask boilerplate ...]
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
그런 다음 다음을 실행하십시오.
sudo ufw allow 5000
python myproject.py
사이트가 다음 위치에 표시되는 것을 볼 수 있습니다. http://165.227.205.175! 또한 Flask 앱은 명확하게 로그(200개 요청...)를 생성하고 다시 코드를 약간 조정합니다(그래서 포트 번호에 대해 더 명시적입니다).
[... flask boilerplate ...]
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
명령을 다시 실행하십시오.
sudo ufw allow 5000
python myproject.py
이제 로드하려고 하면 아무것도 볼 수 없습니다.http://165.227.205.175다시 말하지만, Flask 앱은 내 브라우저가 이를 로드하려고 한다는 사실을 전혀 인식하지 못하는 것 같습니다.
"sudo ufw allowed 5000" 명령의 출력은 항상 다음과 같습니다.
Skipping adding existing rule
Skipping adding existing rule (v6)
이 문제에 대해 어떻게 진전을 이룰 수 있습니까?
답변1
Droplet을 삭제하고 다시 시작하여 이 문제를 성공적으로 해결했습니다. 정확히 무슨 일이 일어나고 있는지 잘 모르겠지만(아마도 방화벽 구성 오류일 수 있음) 인터넷에서 이 문제를 발견하면 모든 코드와 데이터를 백업하고 재부팅하는 것이 좋습니다. 첫 번째 선택이 되지 않는 것은 쉽습니다.