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
ansible 可以定義不同的role,比如裝python是一個role,安裝django是一個role
可以給role的不同步驟定義tag,這樣執行時就可以按tag來執行
關鍵ansible是python寫的,用ssh來執行,不需要安裝agentjenkins
其實我想說docker的,匿了
有一個適合小公司上線版本(測試環境,線上環境)的流程
- 首先 git 採取 fork 主倉庫,然後提 merge request 的方式,這樣可以做 code review
- 提完 pr ,跑完 ci 後, 用 fabric + gitlab api 的方式將 merge request 的代碼部署到測試環境。
- 如果代碼沒問題,合進主倉庫,採用 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新代碼並自動部署。
Capistranomodern php
ssh到伺服器去git pull,手動,或者fabric,或者用Jenkins 的ssh on remote server
目前我管理上十個項目,近十台機子,採用的是在監控機上裝Jenkins統一管理和發布,另外一些定時任務也放在Jenkins來做,方便也減少目標機子壓力我是做自動化版本發布的
推薦閱讀:
※uWSGI 伺服器的 uwsgi 協議究竟用在何處?
※使用了Gunicorn或者uWSGI,為什麼還需要Nginx?
※如何做到R和python的完美配合?
※財務一名,已經工作兩年,現在想轉數據分析師,有沒有r語言和python學習的教程?
※Python小白想爬取網路數據?