更新:显然,端口没有问题。我能够重新绑定端口并在端口80上为我的应用程序提供服务,但是我没有解决问题。问题是我的应用程序实际上没有在Heroku上正确部署。这是通过Heroku构建日志显示的内容:
原始问题:我在尝试在Heroku上设置Flask应用程序时遇到问题。我想让Flask服务器在端口5000上运行,并建立一个Nginx代理以从80端口向5000端口提供流量,以便我仍然可以从Heroku访问该网页(默认情况下,该端口在80端口提供流量)。>
当前,我已经在我的Heroku配置中添加了heroku-buildpack-runit和heroku-buildpack-nginx,但是我不确定如何正确启动Nginx来完成我想要的事情。我的Procfile看起来像:
web: bin/start-nginx gunicorn app:app
这没有按照我的意愿去做。实际上,我不确定它是否真的在做任何事情。
注意,gunicorn是我用来启动Flask应用程序的东西。
有什么想法吗?
答案 0 :(得分:1)
在Heroku上,您无需选择要使用的端口。您必须使用Heroku通过PORT
环境变量分配给您的端口。您也不需要Nginx来运行Flask。只需使用gunicorn
或其他WSGI Web服务器。
来自the documentation(添加了重点):
Web服务器
在Heroku之外,有时会在Web服务器容器内执行Web应用程序。例如,PHP应用程序可以作为模块在Apache HTTPD中运行,或者Java应用程序可以在Tomcat中运行。
在Heroku上,应用程序是完全独立的,并且不依赖于将运行时的Web服务器注入执行环境来创建面向Web的服务。 每个Web进程仅绑定到一个端口,并侦听该端口上的请求。 Heroku将port to bind to分配为
PORT
环境变量。这通常是通过使用依赖项声明将Web服务器库添加到应用程序来实现的,例如Tornado for Python ,Unicorn for Ruby或Jetty for Java和其他基于JVM的语言。这完全发生在用户空间内,即在应用程序代码内。与Heroku签订的合同是将进程绑定到端口以处理请求。 Heroku’s routers然后负责将HTTP请求定向到正确端口上的进程。
使用环境变量(如果存在)的一种简单方法是执行以下操作:
import os
# Set up your Flask app here
port = os.getenv('PORT', default='5000')
app.run('0.0.0.0', port=port)
您似乎已经using gunicorn
,这很好。您的Procfile
应该包含以下内容:
web: gunicorn my_project.wsgi
其中my_project.wsgi
是您的WSGI文件的名称。