我有一个烧瓶应用程序,我已经克隆到我的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 2的公共IP或主机名远程访问暴露的路由。但是,每当我试图访问它时,我都会得到一个清除错误。我认为这是因为我在虚拟环境中运行烧瓶应用程序,但我不确定。我找不到任何关于如何揭露这个问题的好教程。我哪里出问题了?
发布于 2020-02-11 20:34:03
快速安全解决办法:
因为您正在运行开发服务器,这不是用于生产的。我想说,从您自己的机器连接到这个应用程序的最好方法是使用ssh隧道:
ssh -L 5000:localhost:5000 ec2_addr
然后,您可以将您的web浏览器指向客户端计算机上的http://localhost:5000/
,并将其隧道到EC2实例上的端口5000。这是一种快速连接到远程Linux盒上的Flask (或任何)服务器的方法。当您停止ssh会话时,隧道就会被破坏。
较长的方法:
我想使用AWSEC2的公共IP或主机名远程访问暴露的路由。
超时并不是因为它在虚拟环境中运行:您可能会发现,这是因为您需要通过EC2控制台为实例分配安全组。这些允许您在公共IP上打开某些端口。
看看我写的关于EC2安全组的另一个答案。
然而,要小心,。您不应该以这种方式公开开发服务器。有许多类似来自数字海洋的教程,包括在gunicorn
和nginx
后面部署一个带有Let's Encrypt
SSL证书的烧瓶应用程序。您应该发现自己处于一个安全组公开端口80和443的位置,通过nginx配置将对端口80的请求重定向到https
URL。
如果这听起来像一大堆麻烦/您没有Linux技能/您不想学习Linux技能,那么这些是人们选择像AWSElasticBean秸秆这样的托管服务的常见原因,您可以对其进行部署您的烧瓶应用程序(官方指南),而不必担心服务器配置。Heroku是另一个(非AWS)服务,它提供这样的功能。
这真的取决于你需要什么/希望得到什么。注意安全!
https://stackoverflow.com/questions/60176077
复制相似问题