簡體   English   中英

如何遠程訪問在 AWS EC2 上運行的 Python flask 應用程序?

[英]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 證書在gunicornnginx后面部署燒瓶應用程序。 您應該會發現自己處於安全組公開端口 80 和 443 的位置,對端口 80 的請求被 nginx 配置重定向到https URL。

如果這聽起來很麻煩/您沒有 Linux 技能/您不想學習 Linux 技能,那么這些是人們選擇 AWS Elastic Beanstalk 等托管服務的常見原因,您可以在其中部署您的 Flask 應用程序(官方指南) ,無需擔心服務器配置。 Heroku 是提供此類功能的另一項(非 AWS)服務。

這實際上取決於您需要/希望獲得什么。 注意安全!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM