当我在我的作品中推出Django应用程序的更新时,最佳做法是什么?我应该重启两个gunicorn
和nginx
服务
sudo service gunicorn restart sudo service nginx restart
或重新启动gunicorn
只够了吗?如果我必须进行两次重启,最后重启的顺序是否会有所不同?谢谢!
这完全取决于您如何配置盒子。
为了将停机时间降到最低,我实际上是在旧版本仍在运行时,将新版本加载到包装箱上的其他目录中。我根据新版本的requirements.txt创建一个新的虚拟环境。然后,我启动第二个gunicorn实例,并在其中运行新版本(通过supervisor和supervisord.conf中的条目完成),并使旧实例仍在运行。
然后,我更新我的nginx vhost文件,将服务器指向新版本的gunicorn套接字,最后重新加载nginx。我快速检查新站点是否正常运行,然后停止旧的gunicorn实例。如果由于某种原因它没有响应,我将我的nginx配置切换回原来的旧配置,然后找出问题所在。
我使用Ansible脚本来完成所有这些操作,但这是一篇很棒的文章,其中包含一些Fabric脚本来做类似的事情:https ://medium.com/@healthchecks/deploying-a-django-app-with-no-downtime-f4e02738ab06
另一方面,如果您只是就地更新代码,则无需对nginx配置进行任何更改,因此您无需重新加载它。只需重新装上金枪鱼就可以了。