可以在没有端口的情况下运行烧瓶吗? [复制]
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以上是关于可以在没有端口的情况下运行烧瓶吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
jhipster 生成的应用程序可以在没有纱线启动的情况下正常工作,只需在 8080 上运行,那么为啥要在端口 9000 上运行