烧瓶应用不能暴露在液滴上

时间:2018-07-05 20:35:27

标签: python flask digital-ocean

我正在将烧瓶服务器部署到Digital Ocean Droplet。

from flask import Flask

app = Flask(__name__)

@app.route("/a/<string:b>")
def deploy(b):
    return "Response"

使用以下命令:

FLASK_APP=server.py python -m flask run --host=0.0.0.0 --port=5555

在本地部署应用程序时,我可以通过这样做收到响应

curl -XGET localhost:5555/a/random

当部署在Droplet上时,它在内部起作用,但是当在外部调用Droplet时(尽管TCP上的端口5555暴露了),它不会连接。

可能会发生什么变化?我还通过docker在同一液滴上部署了flask graphql服务器,效果很好。

2 个答案:

答案 0 :(得分:5)

在使用VPS时,这可能是一个常见问题。 如果密码正确,像我这样的人可能经常会忘记设置防火墙

您提到它在本地有效,但不适用于外部。我想应该是这样。

数字海平面:

  • 在Droplet防火墙设置中添加入站TCP端口5555

系统级别

    iptables:例如iptables -A INPUT -p tcp -dport 5555 -j ACCEPT
  • 防火墙:例如firewall-cmd --permanent --zone=public --add-port=5555/tcp

或者您可以通过systemctl stop [service-name]service [service-name] stop禁用OS防火墙。您可以用谷歌搜索命令。

答案 1 :(得分:2)

Flask默认情况下接受来自本地主机的连接。

为了使您的Flask应用程序公开可用,您必须通过添加--host=0.0.0.0参数将其绑定到0.0.0.0地址。

  

外部可见服务器

     

如果运行服务器,您会注意到   服务器只能从您自己的计算机访问,而不能从任何计算机访问   网络中的其他。这是默认设置,因为在调试模式下,   应用程序的用户可以在您的计算机上执行任意Python代码   电脑。

     

如果禁用了调试器或信任网络上的用户,   您只需添加以下内容即可使服务器公开可用   --host = 0.0.0.0到命令行:

     

flask run --host = 0.0.0.0这告诉您的操作系统侦听   所有公共IP。