我想制作Flask + Nginx + Gunicorn部署。我有Nginx设置和运行,我运行gunicorn,如文档中所述:
gunicorn app:app
但是当我退出服务器时,gunicorn进程会退出吗?正确的方法是确保它能够继续运行以便Nginx连接,并在崩溃时重新启动?
答案 0 :(得分:35)
在运行gunicorn时使用--daemon
选项。
例如:
gunicorn grand56.wsgi:application --name grand56 --workers 3 --user=root --group=root --bind=127.0.0.1:1001 --daemon
答案 1 :(得分:18)
我会查看类似Supervisor的内容。
答案 2 :(得分:7)
需要注意的关键是,当您从命令行启动进程时,它是终端进程的子进程(即bash
的子进程)。当您退出服务器时,bash
进程将被终止 - 与其所有子进程一样。
你会想要使用你所拥有的任何系统来管理nginx,也可以管理gunicorn(从init.d
或Upstart脚本到Monit,Supervisor,Bluepill,Foreman等专业应用程序进程监视器)。< / p>
答案 3 :(得分:7)
使用--daemon来绑定gunicorn。 例如:
gunicorn --bind 0.0.0.0:8001 your_project.wsgi --daemon
答案 4 :(得分:6)
注意肖恩。
但是你可以像这样运行它:
nohup gunicorn -c config.py </dev/null >/dev/null 2>&1
它将不再依赖于终端连接。如果要保存任何输出,可以用>/dev/null
替换>somelogfile
。
但对于生产用途,最好将其集成到用于管理流程的任何工具中。
答案 5 :(得分:3)
试试这个:
nohup gunicorn app:app &
答案 6 :(得分:0)
我尝试了systemd选项并且工作正常,下面的链接有我的完整答案并且有所有步骤,以调用你的应用程序作为gunicorn服务。
https://askubuntu.com/questions/930589/running-upstart-script-on-17-04/1010398#1010398
答案 7 :(得分:0)
像这样运行hug api。
-daemon 是将进程保留在后台。
-access-logfile 保留请求日志
-bind =
gunicorn <pyscirpt_name>:__hug_wsgi__ --name caassist -w 4 --access-logfile /var/logs/gunicorn/gunicorn_access.log --daemon --bind=<ip>:<port>
答案 8 :(得分:0)
Supervisor
是用于过程管理的出色的跨平台解决方案。它具有非常丰富的功能,并且(在我看来)比一些普通的Linux替代方案(新贵,sysv,systemd)需要更多的配置。您绝对应该使用类似的方法来启动,监视和(如果需要)重新启动过程。
无论您最终使用什么流程管理器,您都仍然可以很容易地使gunicorn“运行不正常”(即以root用户身份)。我认为其他答案遗漏的一些重要细节是,您可能应该让一个用户拥有gunicorn进程,该进程绑定到该用户和nginx组拥有的,并具有权限770
的unix套接字。使用gunicorn
时,您指定一个掩码,因此将770
转换为007
并使用-m
标志。这样,只有gunicorn和nginx可以对套接字进行读/写/执行,并且不需要端口。您可以使用-u
和-g
标志来指定gunicorn进程的用户和组,它将使用这些所有者创建套接字。无论最终用于进程mgmt,nginx / gunicorn的是什么,您都可能在启动脚本中想要这样的东西:
exec gunicorn wsgi:app -u gunicorn -g nginx -m 007 -b gunicorn.sock >> /var/log/$<service_name>.sys.log 2>&1
确保gunicorn用户对日志文件具有写权限。然后,在nginx中,您以前拥有ip /端口(即0.0.0.0:5000
),然后将路径放入套接字(即/usr/share/nginx/html/gunicorn.sock
)。
您可以找到所有不同的标记here。