難部署的taiga,式微的circus——趨勢從進程管理到容器管理,簡單才是美


一直需要一個項目管理系統,一直沒時間弄。

taiga是github上搜project management star最多的項目,又是基於django用python寫的后端,所以就用它:

 

 

但是,集中精力折騰了一下,給我的感覺並不好。

taiga的部署,總的來說非常難受。

 

我沒想到一個后端用django做api 前端coffee-script的玩意,竟然搞這么多配置文件,各種配置項互相引用。

 

它完全沒趕上容器化的趨勢,沒有提供官方的docker鏡像。

官方的部署教程, 讀下來總體感覺就是亂。東1個配置文件,西1個配置文件,往下讀后面還經常給出另外版本的配置文件。把http改成https,居然是多配置文件,每個給2個版本。TM有病啊。

越是難部署的過程,就越值得腳本化、容器化部署。但它復雜到搜taiga docker   項目好幾個,但星級都不高,而且做法也都五花八門。

這些星級多的,也僅僅是按官方的前后,分成了2個鏡像而已。有的也沒有配官方給的taiga-events  沒有celery。

我真正參考的是一個只有10星的(有顆還是我打的)項目:https://github.com/douglasmiranda/docker-taiga

優點是

1除了3個官方工程backend frontend events之外,還獨立出了postgres的db,rabbitmq,celery_worker

2用了docker-compose,-配置了端口和存儲路徑,docker-compse up 直接啟動 

這才真正有點體現容器化的優勢的意思。而且rabbitmq和celery的部署套路,對手里自己的項目的容器化部署,也有很好的借鑒意義(自己寫的docker版的rabbitmq和celery的小demohttps://github.com/xuqinghan/celery-with-docker-compose)。還是給作者點個贊.

 

不爽的地方集中在:

1 把git clone寫在dockerfile里了,但是taiga工程本身是會演進變化,有BUG的!這樣看都不看直接打包進去,直接后果就是taiga配置項變化和小錯誤導致的部署失敗,有些taiga docker 的作者都不知道怎么改。(其實老實把代碼下載下來看看,都不難的)

2 因為難部署,所以為每個鏡像再寫點sh。本來就覺得配置復雜了啊,還要每個鏡像再加點sh腳本。雖然一時配好了沒問題,但是更增加了復雜度

總的來說——不滿足:一處修改,多次執行的要求,而是到處修改,1次執行

 

最終,這些用docker部署taiga的項目,我哪個都覺得別扭,參考它們之后,自己搞了一套。

總的原則是:

1代碼和配置文件盡量都放在鏡像外,啟動時用-v掛進去。

2保證眼睛能看到到掛進去、COPY進去的都是什么東西.而且位置要集中,不要讓我到處翻看(git clone 肯定得放外面)

3配置項太雜,配置文件太多,互相依賴(各端口號、主機名、本地路徑、SERECT_KEY之類)需要腳本自動產生配置文件,自動添加配置文件

簡單說:把所有值得配置的參數集中到唯一1個yml配置文件里,然后搞一套各種配置文件模板(包括全局的docker-compose, 和back front events db rabbitmq celery_work的dockerfile 以及需要COPY進各image的配置文件)。

運行的時候大致步驟:

讀全局yml參數

用jinja2渲染出各配置文件

git clone下載好taiga各工程代碼

執行docker-compose up(用它調用各鏡像的build和容器啟動)

——結果幾天下來,一不留神就寫成了1個工程https://github.com/xuqinghan/taiga-docker-compose

 

 回頭看,其實是taiga的開發、部署統統落伍了。

taiga是2014年開發的,2015年獲各種獎。

 

 

它官方安裝文檔里 部署時的進程管理工具,不是常用的supervisor,而用是circus。星級不高,近期也不活躍了。因為沒人維護,導致在容器環境下,難安裝(debian系的沒有官方apt源,只有ppa,但其實也是2013年的,現在不能用),難用(自己添加服務腳本):

而它當年(2013)打出的賣點是:

1它支持py3,而supervisor不支持,

2它1個可以負責各種服務,取代 supervisor 和gunicorn 兩個

 

但是今天:

circus:

supervisor 

 

gunicorn 

 

 

注意雖然這些年這些都不再活躍了,但是在2014-2017,后兩個的人氣還是比circus大太多了(2013之后幾乎沒人管了)

 

再看它的2個賣點:

1 py3:

直到今天,supervisor 官方還是說不要在生產環境用py3版

但是我照樣用supervisor。為啥?因為gunicorn 有py3的版本

單機上的服務啟動是 supervisor(py2)-> [ gunicorn(py3),  nginx] 

gunicorn(py3)再啟動app 就OK了

2 1個人伺候多種服務:

這個問題更有意思了,可以說,隨着容器的崛起,這個問題直接不存在了。

為什么對進程的管理變得更簡單了(或者說,保存簡單就夠了,不需要更復雜的管理工具)?

因為單機運行多個服務的方式變了,從多進程,變成了多容器。

當年它圖里的redis等等這些玩意,都拿出去放到單獨的容器里了。

 

 

所以,不再是進程管理工具之間的競爭,而是加入了docker,  k8s這些容器管理工具。

從更高抽象層次(虛擬環境 操作系統),對配置工作進行了切分。

 

監控、控制服務的啟動停止  從使用進程管理工具,到在docker-compose里設置restart 就可以管起來,端口設置ports就管起來了。

這樣就保證了每個容器內部,跑的進程都不復雜(甚至比原來還簡單,種類還少),但還多少需要點管理工具,所以supervisor gunicorn仍然活的很好,而試圖取代它兩個的復雜的circus,卻衰落了。

 

應對復雜問題的演進:共性是:

通過建立多個抽象層次,在每個層次上讓任務保持、或者變得更簡單;而不是在某1個維度上,變得更復雜。

知識不是1條線,也不是2維的書架和窗格,而是一個宮殿。

 

而跨抽象級別的映射,決不孤立。所以架構和套路,是可以復用的。

 

taiga項目顯示出技術發展快速的殘酷性:3年前這種前后分離的架構,也許是驚艷的,但是現在優劣互現了:

優勢:

1后端用古老的django做api(易開發);

2前端分離出來,可以搞得很好看;

但現在:

1部署方式落后,進程管理工具circus完全式微;

2前端的coffee-script angularjs已經落伍(ts+ ngx了);

 

——對taiga要學習優點(前后端分離,前后端的技術壽命完全不一樣),對缺點要盡量避免(難部署)。

——對circus,要引以為戒,不要把產品搞成這個樣子,這是犯了路線錯誤啊啊啊。

 
但在業務和產品定位上,taiga卻仍然是成功的:
 
沒有明顯的競品出現!定位精准
 
——這是必須學習的
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM