在平常的開發和協做工做中,隨着團隊規模的慢慢增大,不少人都會遇到Github Enterprise(簡稱GHE)服務器負載太高或者存儲空間不足的現象,尤爲是遊戲或者多媒體等相關行業的開發人員,處於保密和業務需求,在git推送的過程當中每每會有海量的的二進制媒體文件,若是讀過我以前的文章GIT工具簡單學習總結的話,就會發如今git默認的業務邏輯中,全部文件的每一次push或者merge都至關於從新向服務器上傳一次,這個邏輯雖然保證了分佈式開發的可用性和穩定性,可是事實上存在一個問題:對於大型文件,推送N次就會多佔用(N-1)倍的體積,尤爲是二進制媒體文件每每是更新率極低的。這樣就會致使一段時間以後,團隊在使用GHE時會發現系統負載動不動變高,尤爲是在大文件推送的時候。前端
這個時候,一個開源項目橫空出世了。大概是在2015年左右,git-lfs
正式發佈,這個技術從根本上改變了大文件佔用所帶來的一切問題。全部的lfs標記的文件都會經過lfs系統進行單獨推送,而不會像普通的repo文件同樣,在每次merge
和push
的時候都被從新推送一次。這樣的改變大大節省了系統的負載和磁盤佔用,對無數團隊來講真的是救人於水火。git
但是,人是貪得無厭的。隨着項目體積的龐大和硬件技術的提高,尤爲是近幾年手機性能的飛速發展,移動項目的二進制文件的數量愈來愈多,同時體積也飛速變大,儘管LFS的業務邏輯依然可以承載這些推送的請求,可是在數千人的大型團隊裏,若是GHE
的架設架構不是分佈式,或者說總性能不足的話,亦或者出現高併發集中推送的時候,會出現GHE
自己的嚴重卡頓甚至掉線。這種掉線不少時候就是因爲過多的LFS
推送致使的。所以,把LFS-server
從GHE
獨立出來的業務請求就出現。下面會詳細介紹配置的過程,總的來講仍是很是簡單的。github
目前在Github上的git-lfs
頁面中,開發組爲使用者提供了一個還處於測試狀態的LFS-test-server
,可是通過測試,這個服務器功能基本已經可以負擔多數的LFS
請求,事實上GHE
內建的LFS
服務自己也是基於這個開源頁面LFS-test-server。下面咱們會詳細說一下LFS server
的搭建過程。數據庫
## 首先安裝go環境並安裝軟件,由於`LFS server`使用go寫的,此處用CentOS爲例:
$ yum install -y go
## 而後編輯/etc/profile添加環境變量
$ vim /etc/profile
--------------------------
export GOROOT=$HOME/go # don't forget to create a go/ folder in your home folder
export PATH=$PATH:$GOROOT/bin
## 編輯完畢後wq保存並應用配置。
$ source /etc/profile
## 配置完成後,開始按步驟安裝軟件
$ go get github.com/github/lfs-test-server
$ cd ~
$ cd go/src/github.com/github/lfs-test-server
$ go build
複製代碼
到這一步位置,須要的環境和軟件已經安裝完畢,在下一節會介紹啓動配置文件的寫法。vim
由於目前的LFS Server
還處於未正式發佈階段,所以還須要用戶手動編輯啓動腳本去配置啓動選項。相信在將來能夠用更加舒服的參數配置模式來進行服務器的啓動。若是動手能力強的話咱們能夠直接作文件夾映射並把LFS-server
運行在容器中,這也是一個很好的選擇。瀏覽器
不過本章仍是以直接運行服務爲例進行講解。咱們當前已經進入了~/go/src/github.com/github/lfs-test-server
文件夾內,咱們須要配置一個run.sh
來做爲啓動腳本。下面是啓動腳本參數的參考表:安全
LFS_LISTEN # tcp監聽端口,默認爲: "tcp://:8080"
LFS_HOST # 服務器地址,默認是: "localhost:8080"
LFS_METADB # 服務器用來存儲lfs數據的數據庫文件,默認是: "lfs.db"
LFS_CONTENTPATH # 用來存儲lfs文件的路徑,默認是: "lfs-content",建議自定義配置
LFS_ADMINUSER # 初始用戶名,必須建議自定義配置
LFS_ADMINPASS # 初始密碼,必須建議自定義配置
LFS_CERT # HTTPS限定,crt認證文件路徑
LFS_KEY # HTTPS限定,key認證文件路徑
LFS_SCHEME # 默認是http模式,暴露外網時建議使用https
LFS_USETUS # 是否開啓TUSD服務的選項。
LFS_TUSHOST # 用來啓動TUSD上傳服務的端口,默認"localhost:1080"
複製代碼
因爲咱們是內網服務器,所以對於安全的需求沒有這麼高,只要符合內部安全要求便可,所以通常推薦http模式進行配置。示例以下:bash
#!/bin/bash
set -eu
set -o pipefail
LFS_LISTEN="tcp://:9999"
LFS_HOST="$HOSTNAME:9999"
LFS_CONTENTPATH="$HOME/lfs"
LFS_ADMINUSER="$USER"
LFS_ADMINPASS="$PASSWD"
LFS_SCHEME="http"
export LFS_LISTEN LFS_HOST LFS_CONTENTPATH LFS_ADMINUSER LFS_ADMINPASS LFS_SCHEME
./lfs-test-server
複製代碼
在一切配置完成後,後臺啓動run.sh
便可:$ nohup bash run.sh &
服務器
在服務端進行配置並啓動服務後,客戶端只須要很是簡單的設置,就能夠體驗LFS
服務器分流帶來的流暢度提高和開發爽快感了。架構
前往客戶端服務器,進入須要使用LFS
的repo
目錄,在裏面新建一個.lfsconfig
,在裏面設置相關的服務地址,而後保存便可:
$ vim ./.lfsconfig
------------------
[lfs]
url = "http://$USER:$PASSWD@$HOSTNAME:9999/"
複製代碼
以後,咱們能夠直接像什麼都沒有變化同樣無感知使用LFS
服務了,而事實上的上傳工做會交給剛纔配置的服務器來進行,減小了GHE
主機的壓力。
事實上服務器不只僅爲咱們提供了LFS
上傳的分流服務,咱們其實也能夠經過網頁進行相關信息的查看,直接在瀏覽器裏面輸入http://$HOSTNAME:9999/mgmt
,就能夠進入前端管理界面,咱們能夠看到咱們推送的LFS文件,而且添加新的用戶。相信這個功能在將來會更增強大。