我正在将烧瓶服务器部署到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服务器,效果很好。
答案 0 :(得分:5)
在使用VPS时,这可能是一个常见问题。 如果密码正确,像我这样的人可能经常会忘记设置防火墙。
您提到它在本地有效,但不适用于外部。我想应该是这样。
数字海平面:
系统级别
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。