星期五, 11月 27, 2015

From Gitlab to Gogs

經過幾年使用 Git ,終於等到 微軟也使用 Git,有理由要求同事也來用 Git
前兩年架了 Gitlab ,但是效能實在太差,幾度Survey後決定改用 Gogs。  
Gitlab 的問題在於Rails的效能很差,偏偏又把所有Git的Request都用Rails處理。有一個最近做的案子,把framework放進去之後,每次push都要很久。

天下武功,唯快不破。我的首選當然就是強調快的Go,原本測試時使用 sqlite還看不出效能,後來決定灌個VM搭配Postgresql。現在使用時CPU都不到1%,原本用Gitlab不管開多少vCPU都是100%。

以下簡述安裝過程,為了爾後升級方便,決定使用原始碼安裝
  1. 安裝VM,用  Ubuntu LTS會比較方便(我自己用FreeBSD,好孩子不要學)。
  2. 把  postgresql-server和  git、wget裝進去,最好再加上 Nginx。
  3. 照原廠的建議
    sudo su - git
    cd ~
    # create a folder to install 'go'
    mkdir local
    # Download go (change go$VERSION.$OS-$ARCH.tar.gz to the latest realse)
    wget https://storage.googleapis.com/golang/go$VERSION.$OS-$ARCH.tar.gz
    # expand it to ~/local
    tar -xzf /home/git/local -xzf go$VERSION.$OS-$ARCH.tar.gz
  4. 設定Go的環境變數
    sudo su - git
    cd ~
    echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
    echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
    echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
    source $HOME/.bashrc
  5. 安裝
    # Download and install dependencies
     go get -u github.com/gogits/gogs
    # Build main program
     cd $GOPATH/src/github.com/gogits/gogs
     go build
  6. 測試
    因為我沒有裝sqlite3,原廠測試就沒過。
    cd $GOPATH/src/github.com/gogits/gogs
    ./gogs web
  7. 設定Postgresql,自己搜一下吧。
    設定Gogs ,改 custom/conf/app.ini
    [database]
    DB_TYPE = postgres
    HOST = 127.0.0.1:5432
    NAME = gogs
    USER = gogs
    PASSWD =
    [service]
    DISABLE_REGISTRATION = false
  8. 做好後,依照參考資料加Supervisord。由於FreeBSD預設沒有Supervisord的套件,我是自己寫script處理,好孩子不要學,乖乖用Linux吧。
  9. 設定Nginx,由於Gogs預設是用SSL連線,我也順便加上SSL。
  10. 啟動後,第一個註冊成功的用戶就是管理員,可以再回去改app.ini,關掉註冊功能。
目前遇到比較奇怪的情況是若用現有資料大量push時會有錯誤,因為用內建介面上的 Migration,雖然可能Timeout,但事實上卻完整Migrated。
遇到SSL的key是自簽時,就用 git config --global http.sslVerify false  吧!

結論:雖然目前還稍嫌陽春,偶爾會有問題,但像我只是拿來做提交追踪,也不需要漂亮的圖表時,Gogs是不錯的選擇,若希望多功能和圖表,還是去用Gitlab 吧。我現在的做法很簡單,預設origin是Gogs,另外Gitlab留著要圖表時再一次push過去。

1 則留言:

johnpupu 提到...

怎麼不送個 pr 造福其他的 freebsder *推坑