生产更新后,我要重新启动nginx和gunicorn吗?

时间:2015-12-15 23:42:38

标签: django nginx gunicorn

在我的制作中推送我的Django应用程序的更新时,最佳做法是什么?我应该使用

重新启动gunicornnginx服务
sudo service gunicorn restart
sudo service nginx restart

或仅重启gunicorn就足够了?如果我必须进行两次重启,最后重启的顺序是否会有所不同?谢谢!

1 个答案:

答案 0 :(得分:4)

这完全取决于您配置盒子的方式。

为了将停机时间保持在最低限度,我实际上将新版本加载到包装盒上的另一个目录中,而旧版本仍在运行。我根据新版本的requirements.txt创建了一个新的虚拟环境。然后我启动了第二个gunicorn实例,其中运行了新版本(通过supervisord以及supervisord.conf中的条目完成),并让旧实例仍在运行。

然后我更新我的nginx vhost文件,将服务器指向新版本的gunicorn套接字,最后重新加载nginx。我快速检查新网站是否正常运行,然后我停止了旧的gunicorn实例。如果由于某种原因它没有响应,我会再次将我的nginx配置切换回指向旧的配置,然后找出错误的原因。

我使用Ansible脚本完成所有这些操作,但这里有一篇很棒的文章,其中包含一些Fabric脚本来做类似的事情:https://medium.com/@healthchecks/deploying-a-django-app-with-no-downtime-f4e02738ab06

另一方面,如果您只是就地更新代码,那么您的nginx配置不需要进行任何更改,因此您不需要重新加载它。只需重新加载gunicorn就可以了。

相关问题