可以在没有端口的情况下运行烧瓶吗? [复制]

Posted

技术标签:

【中文标题】可以在没有端口的情况下运行烧瓶吗? [复制]【英文标题】:Is it possible to run flask without port? [duplicate] 【发布时间】:2019-07-02 05:14:00 【问题描述】:

我尝试使用以下方式在托管中启动 Flask:

if __name__ == "__main__":
    app.run('0.0.0.0', 8000)

但是hoster关闭了8080端口,可以用默认80端口运行Flask吗?

我试过它给了我这个错误:

Use a production WSGI server instead.                                                                                                                                                                     
 * Debug mode: off                                                                                                                                                                                           
Traceback (most recent call last):                                                                                                                                                                           
  File "__init__.py", line 461, in <module>                                                                                                                                                                  
    app.run('0.0.0.0', 80)                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/flask/app.py", line 943, in run                                                                                          
    run_simple(host, port, self, **options)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 814, in run_simple                                                                            
    inner()                                                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 774, in inner                                                                                 
    fd=fd)                                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 660, in make_server                                                                           
    passthrough_errors, ssl_context, fd=fd)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 577, in __init__                                                                              
    self.address_family), handler)                                                                                                                                                                           
  File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__                                                                                                                                           
    self.server_bind()                                                                                                                                                                                       
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind                                                                                                                                      
    SocketServer.TCPServer.server_bind(self)                                                                                                                                                                 
  File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind                                                                                                                                        
    self.socket.bind(self.server_address)                                                                                                                                                                    
  File "/usr/lib/python2.7/socket.py", line 224, in meth                                                                                                                                                     
    return getattr(self._sock,name)(*args)                                                                                                                                                                   
socket.error: [Errno 1] Operation not permitted   

所以,楼主说 80 端口是开放的。

【问题讨论】:

好像端口已经被系统打开了,但是如何运行应用程序呢? @DariusMorawiec 那是不相关的。 @OPV 您是否以 root 身份运行?普通用户不能绑定1024以下的端口。 【参考方案1】:

Flask documentation 声明:

虽然轻量级且易于使用,但 Flask 的内置服务器不是 适合生产,因为它不能很好地扩展。一些选项 可用于在生产中正确运行 Flask 已记录在案 在这里。

该文档还说明了使用 WSGI 服务器部署 Web 应用程序的几种方法。 WSGI(Web 服务器网关接口)是一种将请求从 Web 服务器转发到用 Python 编写的 Web 应用程序的标准。您需要使用 WSGI 服务器在您的主机上运行您的网站,因为这听起来像是您正在尝试将 Flask 应用程序部署到生产环境中。

为了回答您最初的问题,当您尝试在端口 80 上运行 Flask 库时故意抛出错误,因为他们明确表示您不应该将 Flask 的内置服务器用于生产用途。这就是你的堆栈跟踪的这一部分:

Use a production WSGI server instead.                                                                                                                                                                     
* Debug mode: off    

socket.error: [Errno 1] Operation not permitted   

对于懒人,或者如果上面的链接失效,这里有一个使用 Gunicorn 的示例 (copied directly from the above documentation link)

独角兽

Gunicorn ‘Green Unicorn’ 是一个用于 UNIX 的 WSGI HTTP 服务器。它是 从 Ruby 的 Unicorn 项目中移植的 pre-fork worker 模型。它支持 eventlet 和 greenlet。在此服务器上运行 Flask 应用程序 很简单:

gunicorn myproject:app

Gunicorn 提供了许多命令行选项 - 请参阅 gunicorn -h。为了 例如,运行具有 4 个工作进程的 Flask 应用程序 (-w 4) 绑定到 localhost 端口 4000 (-b 127.0.0.1:4000):

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

【讨论】:

您能否提供说明,如何运行它 单击 Flask 文档的链接。有很多选择,而且都有说明。 问题是我有简单的主机,而不是 VDS,并且开放了 80 端口 在apache下运行更好,有什么推荐的吗?我只能编辑 htaccess @OPV,请尝试使用我链接的资源。如果你看一下,你会发现 apache 的说明:flask.pocoo.org/docs/1.0/deploying/mod_wsgi

以上是关于可以在没有端口的情况下运行烧瓶吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 VScode 调试器中更改烧瓶运行端口

在烧瓶中运行 dash 应用程序

jhipster 生成的应用程序可以在没有纱线启动的情况下正常工作,只需在 8080 上运行,那么为啥要在端口 9000 上运行

在两个烧瓶服务器之间共享会话

apache spark可以在没有hadoop的情况下运行吗?

JProfiler 可以在没有 GUI 的情况下运行吗?