使用 gunicorn 使 python Flask 应用程序可从 Internet 访问

Make python Flask application accessible from the Internet with gunicorn

我有:
我使用 Flask 制作了一个简单的 Web 应用程序,它在 localhost.

上运行良好

我想达到的目标:
我想部署它以便它在 Internet 上可见。


因为 Flask 说生产服务器不应该用于部署我安装了 gunicorn。
我设法让它在 localhost (运行ning gunicorn server:app) 上工作。

然后我尝试使用 -b 0.0.0.0:5000 选项使其成为 public。它说它在 192.168....:5000 上 运行ning 现在我可以使用我的计算机以及连接到同一 wifi 的 phone 使用该 IP 地址访问该网站。但是当我没有使用这个wifi时,我无法连接到网站。

当我搜索这个时,我发现 192.168.... ip 地址范围是保留给本地网络的,不能从其他任何地方访问。

我如何需要 运行 脚本以便可以从任何地方访问它?我需要修改防火墙设置吗?也许有更好的方法使用不同的框架在本地机器上部署这样的应用程序?

一些补充信息:

我对gunicorn一无所知。但是我以前在需要部署flask app的时候用的是pythonanywhere。他们提供出色且完全免费的托管服务。它的部署速度非常快,不需要您的计算机资源,而且非常棒。此外,您还必须为您的计算机转发端口 5000,以使不在同一网络中的其他设备能够访问您的 computer/flask 应用程序。这带来了安全问题。但是,在使用 pythonanywhere 时不需要这些。

还有其他类似的出色托管服务。这是我唯一知道和使用过的一个,但如果你不喜欢那个,你肯定会找到其他的。

您需要执行以下步骤:

  • 阅读并了解很多关于 Web 服务器安全的知识,然后再阅读一些,充满风险

  • 在您的本地网络上找到您的 Mac 的 IP 地址并确保它是固定的,即在您的 Mac(在 “系统偏好设置->网络” 下)或 reserved 在路由器的 DHCP 表中(通过将 Mac' s MAC 地址在其分配表中)以便它在引导时始终在您的内部网络上获得相同的本地地址

  • 登录您的路由器并设置“端口转发” 以转发端口 5000(或其他端口)的外部请求(来自 Internet)到你的 Mac 的固定 IP 地址和 Gunicorn 服务的端口 5000

  • 登录您的路由器并找到您的 WAN IP 地址,或转到 http://whatsmyip.com 获取您需要输入浏览器的地址,或者您的朋友需要输入他们的浏览器看看你闪亮的新网站

  • 就目前而言,这将一直有效,直到下次您的路由器重新启动时,您的 ISP 可能会为其分配一个新的 IP 地址。如果您希望它永久有效,您需要 1) 向您的 ISP 索要静态 IP 地址,或 2) 订阅 DDNS 服务(例如 noip.com 或 dyndns.com)或 3) 告诉您的朋友您的新每次重启路由器时的 IP 地址

这个问题与 Python 或 Gunicorn 无关,而是与网络相关(因此 Whosebug 可能不是正确的提问地点,但其他社区如 ServerFault

目前您的应用程序已经在您的机器上的定义端口中公开,因此下一步是将到达您路由器的所有流量转发到那里。

为此,您必须将路由器的防火墙配置为接受通过所需端口的传入流量,并最终将来自该端口的流量转发到端口 5000 中的计算机.

此外,如果您已配置好所有内容,则只有在您的 ISP 为您提供单个 IPv4 时它才会起作用,目前不会再发生这种情况,但您实际上正在与更多人共享它。其他选项是您配置 IPv6 传入流量。

如您所见,这不是一项简单的任务,如果没有适当的注意也不应该完成,因为您实际上是在向可能的攻击者开放您的网络。


所以,为了最大程度地简化它,因为你已经有了 Gunicorn,我建议你使用任何其他用户公开的资源作为 Heroku or Netlify,这些资源是免费的应用程序,无需大量网络知识即可满足您的期望。