【问题标题】:Shall I restart both nginx and gunicorn when production is updated?更新生产时我应该重新启动 nginx 和 gunicorn 吗?
【发布时间】:2016-03-21 23:18:58
【问题描述】:

当我在生产中推送 Django 应用的更新时,最佳做法是什么?我是否应该重新启动 gunicornnginx 服务,使用

sudo service gunicorn restart
sudo service nginx restart

或者只重启gunicorn就够了?最后,如果我必须同时进行两次重新启动,重新启动的顺序有什么不同吗?谢谢!

【问题讨论】:

  • 我正在使用 uWsgi 和 nginx,但我没有重新启动它们。我认为除非您更改其配置文件,否则您不应该重新启动 nginx。而且您可能想重新加载独角兽(发送HUP 信号)。我希望你能尽快得到更好的答案。

标签: django nginx gunicorn


【解决方案1】:

这完全取决于你如何配置你的盒子。

为了将停机时间降至最低,我实际上在旧版本仍在运行时将新版本加载到盒子上的不同目录中。我根据新版本的 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 就可以了。

【讨论】:

  • 谢谢安娜。非常好的方法!竖起大拇指
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2020-05-27
  • 2018-05-23
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
相关资源
最近更新 更多