Python 如何在自己的域中运行Flask

Python 如何在自己的域中运行Flask,python,flask,server,Python,Flask,Server,例如,我有一个带有域的服务器。但是当我启动Flask时,当我连接时域就不工作了。有什么问题吗 代码: 和日志: * Running on https://127.0.0.1:3030/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 284-971-705 我在浏览器中连接到,并进行“永久加载”我将假设您的Flask实例仍在本地运行。要测试这一理论,请在浏览

例如,我有一个带有域的服务器。但是当我启动Flask时,当我连接时域就不工作了。有什么问题吗

代码:

和日志:

 * Running on https://127.0.0.1:3030/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 284-971-705

我在浏览器中连接到,并进行“永久加载”

我将假设您的Flask实例仍在本地运行。要测试这一理论,请在浏览器中尝试localhost:3030或127.0.0.1:3030,看看您的项目是否在那里加载而没有问题

要从测试过渡到部署,您需要使用一些额外的基础设施来承载您的项目。它不会像从IDE运行它那样简单。最明显的起点可能是使用PythonAnywhere,这将允许您使用免费帐户托管一个Flask实例。他们的文件是可靠的:

从内存来看,我认为他们的免费层不允许您使用自定义域,这意味着您需要升级到每月5美元或更高的付费帐户


如果你想要更严格的或正在考虑如何进步,你也可以考虑把你的烧瓶项目扔进GITHUB储存库,然后注册微软Azure。然后,您可以在Azure中创建一个webapp,并将其指向您的GitHub存储库。这将更加昂贵,但可以扩展到您需要的任何内容,并允许使用自定义域。

为了解决问题本身,日志表明您的Flask应用程序正在侦听IP 127.0.0.1(本地主机):

这样,Flask将只接受到此地址的连接(127.0.0.1)。相反,您需要开始告诉它在服务器的公共IP上侦听新连接。像这样:

flask run --host=PUBLIC_IP
或者,只需在所有IP上收听:

flask run --host=0.0.0.0
(其中
0.0.0.0
表示“操作系统可用的所有IP”)

另见:


生产中的烧瓶

根据问题的原始记录,在投入生产之前,似乎还有一些其他问题需要解决。从安全角度来看,在忽略这些项目的同时公开服务器(如上所述)是危险的,而且危险是非常真实的。特别是注册DNS,除了最初的用途外,它还充当每个机器人的广告。由于主题本身相当大,以下仅概述主要项目:

最低限度:

  • 禁用调试。调试器允许远程代码执行,并且通过启用调试器的服务器服务“公共”请求是一个巨大的安全风险

  • 生成并配置服务器机密。例如,服务器机密用于对Cookie进行签名,它必须是唯一的,并且是机密的

  • 运行WSGI服务器而不是Flask开发服务器。当您启动
    flask run
    时,它运行的开发服务器不是为性能或可靠性而设计的。然而,使用Flask框架实现的应用程序是有效的WSGI应用程序,并且可以由任何WSGI服务器软件提供服务,例如uWSGI,或者,或者举几个流行的软件

通常还包括:

  • 在反向代理后运行Flask server,例如。反向代理可以处理一系列功能,例如以非常有效的方式(在性能方面)提供静态文件、SSL终止(https)、压缩、缓存等

  • 考虑持久化Flask应用程序日志。如果遇到任何麻烦,你可能想知道发生了什么。默认情况下,Flask日志被定向到stdout,如果服务器重新启动,它将不会被持久化。(因此,所有过去的日志都将丢失)

投入生产的检查表当然会不断地进行,但我认为以上是必须解决的问题,以避免出现严重的问题


备选地,您可以考虑其他大多数典型的“生产”配置的选项。下面的选项可能是一个好主意,因为这样您将依赖于专家提供的现有和支持良好的配置。例如:

  • 部署到托管服务,如AWS ElasticBeanstalk、Heroku等
  • <> LI>如果您喜欢对环境进行更多的控制,请考虑将应用程序打包为基于一些支持良好的基础图像的DOCKER图像,其中一些预先配置的(例如:)

另见:


@MCcodemaster,它不是本地服务器。我曾经digitalocean@RickPetrev,这更有意义。也许可以尝试将主机参数添加到app.run()。“host='0.0.0.0'”我试过了,没有结果
flask run --host=PUBLIC_IP
flask run --host=0.0.0.0