2015-12-15 71 views
4

當我在生產中推送我的Django應用程序時,最佳做法是什麼?我將重新啓動這兩個gunicornnginx服務,與生產更新時是否應重新啓動nginx和gunicorn?

sudo service gunicorn restart 
sudo service nginx restart 

或只重啓gunicorn是否足夠?最後,如果必須重新啓動,重新啓動的順序會有什麼不同?謝謝!

+1

我正在使用uWsgi和nginx,我沒有重新啓動它們。我想你不應該重新啓動nginx,除非你改變它的配置文件。你可能想重新加載獨角獸(發送[HUP](http://docs.gunicorn.org/en/19.3/signals.html)信號)。我希望你儘快得到更好的答案。 – Lucas03

+0

非常感謝你 – pebox11

回答

1

這完全取決於你如何配置你的盒子。

爲了將停機時間降到最低,我實際上將新版本加載到盒子上的另一個目錄中,而舊版本仍在運行。我基於新版本的requirements.txt創建了一個新的虛擬環境。然後,我開始運行新版本的gunicorn的第二個實例(通過supervisord在supervisord.conf中的條目完成),並讓舊實例保持運行。

然後我更新我的nginx vhost文件,將服務器指向新版本的gunicorn套接字,最後重新加載nginx。我做了一個快速檢查,確認新網站已經正常運行,然後我停止了舊的gunicorn實例。如果由於某種原因它沒有響應,我將我的nginx配置再次切換回老指針,然後找出錯誤。

我做這一切使用Ansible腳本,但這裏有一個偉大的文章,一些面料腳本做類似的事情:https://medium.com/@healthchecks/deploying-a-django-app-with-no-downtime-f4e02738ab06

如果,另一方面,您只需更新就地你的代碼,然後有應該不需要修改你的nginx配置,所以你不需要重新加載它。只需重新裝上gunicorn,你就可以走了。

+0

謝謝安娜。非常好的方法!豎起大拇指 – pebox11

相關問題