django+nginx+uwsgi+git有哪些自動化部署工具?

可以管理上線,發布,回滾,可以根據版本庫進行上線版本的處理,有哪些相關的工具和流程?謝謝


用 `git hooks` 啊,非常好用,部署就和 heroku 一樣簡單。我的具體做法:

1.在伺服器建立一個遠程 git 倉庫

2. 設置 `git hooks`,每當有人推代碼時,執行一系列的操作(更新www目錄下的代碼,collectstatic, 重啟WSGI伺服器等)

3. 在本地開發環境將上面的遠程倉庫添加一個 `remote`

上線時只需要 push 一下

回滾時切換到具體的commit 號或者分支、tag然後強制push就可以了

git push production --force

具體的 `git hooks` 腳本可以參考我的一篇博客 使用 git hooks 自動部署 Python 應用


ansible 可以定義不同的role,比如裝python是一個role,安裝django是一個role

可以給role的不同步驟定義tag,這樣執行時就可以按tag來執行

關鍵ansible是python寫的,用ssh來執行,不需要安裝agent


jenkins


其實我想說docker的,匿了


有一個適合小公司上線版本(測試環境,線上環境)的流程

  1. 首先 git 採取 fork 主倉庫,然後提 merge request 的方式,這樣可以做 code review
  2. 提完 pr ,跑完 ci 後, 用 fabric + gitlab api 的方式將 merge request 的代碼部署到測試環境。
  3. 如果代碼沒問題,合進主倉庫,採用 fabric 部署到線上。


首先,我覺得python環境如何部署才是關鍵。

我目前的做法是,單獨編譯一個python,然後用編出來的二進位來安裝包管理工具,例如pip,發布的時候得帶著這整個python文件夾。發布之後得保證部署機器上使用這個python二進位來運行django。實測virtualenv生成python部署環境並不靠譜。或者假設你的項目不會使用新增的包,那隻要迭代django即可,就不用考慮這個。

nginx的更新一般僅僅是配置文件,改動也並不頻繁,不需要頻繁重啟,可以單獨做自動化。

其次,用hook在git push之後立刻發布版本,這個得看hook怎麼加。例如你的網站10個人開發,發布分之在發版之前必須merge這一版的所有更新,在測試之前,你必須push,這樣才有送測的版本。現實情況是大家在發版之前,都分別搞定了自己的開發,並且不斷merge到主幹。主幹在上線前拉出上線分之送測,測試沒有問題,再上線,這個hook也許專門加在一個用於上線的分支上比較靠譜。

再次,我覺得jekins靠譜,用docker部署python環境應該也是靠譜的。

最後,本屌只知道這一點點,有大神有python環境部署的心得還求賜教。


github 連接 liaotup/AutoDeployer這個應該會比較好用 多種環境都支持 Git 一提交 所以伺服器都會收到通知 然後自動pull新代碼並自動部署。


Capistrano

modern php


ssh到伺服器去git pull,手動,或者fabric,或者用Jenkins 的ssh on remote server

目前我管理上十個項目,近十台機子,採用的是在監控機上裝Jenkins統一管理和發布,另外一些定時任務也放在Jenkins來做,方便也減少目標機子壓力


我是做自動化版本發布的


推薦閱讀:

uWSGI 伺服器的 uwsgi 協議究竟用在何處?
使用了Gunicorn或者uWSGI,為什麼還需要Nginx?
如何做到R和python的完美配合?
財務一名,已經工作兩年,現在想轉數據分析師,有沒有r語言和python學習的教程?
Python小白想爬取網路數據?

TAG:Python | Django框架 | Nginx | uwsgi |