[英]How to access a Python flask application running on AWS EC2 remotely?
我有一個燒瓶應用程序,我已經將它克隆到我的 aws ec2 實例上。 我只能使用虛擬環境運行它(我通過運行以下命令激活它):
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install flask==1.1.1
下面是我的應用程序:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
執行env FLASK_APP=app.py flask run
時它運行得很好。 問題是,我想使用我的 aws ec2 的公共 IP 或主機名遠程訪問公開的路由。 但是,每當我嘗試訪問它時,都會出現 tiemout 錯誤。 我認為這是因為我在虛擬環境中運行 Flask 應用程序,但我不確定。 我找不到關於如何公開這一點的任何好的教程。 我哪里出錯了?
當您運行不用於生產的開發服務器時。 我想說從你自己的機器連接到這個應用程序的最好方法是使用 ssh 隧道:
ssh -L 5000:localhost:5000 ec2_addr
然后,您可以將 Web 瀏覽器指向客戶端計算機上的http://localhost:5000/
,該計算機將通過隧道連接到 EC2 實例上的端口 5000。 這是連接到遠程 Linux 機器上的 Flask(或任何)服務器的快速方法。 當您停止該 ssh 會話時,隧道將被破壞。
我想使用我的 aws ec2 的公共 IP 或主機名遠程訪問公開的路由。
超時不是因為它在虛擬環境中運行:您可能會發現這是因為您需要通過 EC2 控制台為您的實例分配安全組。 這些允許您在公共 IP 上打開某些端口。
請參閱我寫的有關EC2 安全組的其他答案。
不過要小心。 您不應該以這種方式公開開發服務器。 有很多這樣的教程來自數字海洋,其中包括使用Let's Encrypt
SSL 證書在gunicorn
和nginx
后面部署燒瓶應用程序。 您應該會發現自己處於安全組公開端口 80 和 443 的位置,對端口 80 的請求被 nginx 配置重定向到https
URL。
如果這聽起來很麻煩/您沒有 Linux 技能/您不想學習 Linux 技能,那么這些是人們選擇 AWS Elastic Beanstalk 等托管服務的常見原因,您可以在其中部署您的 Flask 應用程序(官方指南) ,無需擔心服務器配置。 Heroku 是提供此類功能的另一項(非 AWS)服務。
這實際上取決於您需要/希望獲得什么。 注意安全!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.