我用烧瓶制作了一个API。我的应用程序没有任何静态资产,因此我没有理由使用nginx。
我希望在80号港口开枪。
我有一个“部署脚本”:
mkdir .log 2> /dev/null
DEBUG=0 gunicorn -b 0.0.0.0:80 backend:app --access-logfile .log/access.log --error-logfile .log/general.log
我希望用authbind
在端口80上运行gunicorn。我在这里跟着这个guide。
请注意,我可以运行authbind python -m SimpleHTTPServer 80
当我尝试运行authbind ./deployment.run 80
时,
我看到以下错误:
2013-04-25 15:32:55 [24006] [ERROR] Can't connect to ('0.0.0.0', 80)
2013-04-25 15:33:08 [24018] [INFO] Starting gunicorn 0.17.4
2013-04-25 15:33:08 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:09 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:10 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:11 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:12 [24018] [ERROR] Retrying in 1 second.
为什么我无法将gunicorn绑定到端口80的任何想法?
有什么建议吗?
答案 0 :(得分:24)
如果您处于类似unix的环境中,则端口< 1024(如80)将需要超级用户权限。
答案 1 :(得分:3)
尝试将authbind放入部署脚本中,例如:
mkdir .log 2> /dev/null
DEBUG=0 authbind gunicorn -b 0.0.0.0:80 backend:app --access-logfile .log/access.log --error-logfile .log/general.log
然后运行./deployment.run 80
。
(另外,您的脚本似乎没有使用任何参数;可能会将脚本中的80
替换为$1
?)
答案 2 :(得分:1)
您可以使用authbind
来实现。
安装authbind
sudo apt-get install authbind
然后使用auth bind修改端口80,以确保非超级用户可以使用端口80(又名没有超级用户特权)。这是可以用来实现此目的的三个命令。
sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown USER /etc/authbind/byport/80
USER -可以是您系统上的任何用户,例如bhatman或ubuntu或ec2-user。
注意:只需将80更改为任何所需的端口,它将适用于任何端口。负责任地使用此为我的朋友。 :)
现在,您的gunicorn命令将如下所示:
authbind gunicorn -c gunicorn.conf wsgi:app
只需在您的gunicorn命令之前附加authbind
奖励:如果您在枪口之前使用了诸如newrelic等之类的命令,则需要在authbind之后添加--deep标志
authbind --deep newrelic-admin run-program gunicorn -c gunicorn.conf wsgi:app
有关authbind检出其ubuntu联机帮助页的更多信息:here
但是在盲目运行这些命令之前,我建议您阅读以下要点。
NGINX不是必不可少的,您可以使用任何Web服务器。您的架构应始终看起来像这样。
WEB SERVER (NGINX, AWS ALB etc) -> APPLICATION SERVER (Gunicorn, uWsgi etc) -> Application (Flask, Django etc)
希望这对您有所帮助。