當我在生產中推送我的Django應用程序時,最佳做法是什麼?我將重新啓動這兩個gunicorn
和nginx
服務,與生產更新時是否應重新啓動nginx和gunicorn?
sudo service gunicorn restart
sudo service nginx restart
或只重啓gunicorn
是否足夠?最後,如果必須重新啓動,重新啓動的順序會有什麼不同?謝謝!
當我在生產中推送我的Django應用程序時,最佳做法是什麼?我將重新啓動這兩個gunicorn
和nginx
服務,與生產更新時是否應重新啓動nginx和gunicorn?
sudo service gunicorn restart
sudo service nginx restart
或只重啓gunicorn
是否足夠?最後,如果必須重新啓動,重新啓動的順序會有什麼不同?謝謝!
這完全取決於你如何配置你的盒子。
爲了將停機時間降到最低,我實際上將新版本加載到盒子上的另一個目錄中,而舊版本仍在運行。我基於新版本的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,你就可以走了。
謝謝安娜。非常好的方法!豎起大拇指 – pebox11
我正在使用uWsgi和nginx,我沒有重新啓動它們。我想你不應該重新啓動nginx,除非你改變它的配置文件。你可能想重新加載獨角獸(發送[HUP](http://docs.gunicorn.org/en/19.3/signals.html)信號)。我希望你儘快得到更好的答案。 – Lucas03
非常感謝你 – pebox11