GitLab搭建以及配置(一)

0.名詞解釋

git    是一種版本控制系統,是一個命令,是一種工具    

gitlib    是用於實現git功能的開發庫    

github    是一個基於git實現的在線代碼託管倉庫,包含一個網站界面,向互聯網開放    

gitlab    是一個基於git實現的在線代碼倉庫託管軟件,你可以用gitlab自己搭建一個類似於github一樣的系統,一般用於在企業、學校等內部網絡搭建git私服    

1.硬件需求

1.1 存儲

存儲空間的大小主要取決於你將存儲的Git倉庫的大小。但根據 rule of thumb(經驗法則) 你應該考慮多留一些空間用來存儲Git倉庫的備份。

如果你想使用彈性的存儲空間,你可以考慮在分配分區的時候使用LVM架構,這樣可以在後期需要的清空下添加硬盤在增加存儲空間。

除此之外你還可以掛在一個支持NFS的分卷,比如NAS、 SAN、AWS、EBS。

如果你的服務器有足夠大的內存和CPU處理性能,GitLab的響應速度主要受限於硬盤的尋道時間。 使用更快的硬盤(7200轉)或者SSD硬盤會很大程度的提升GitLab的響應速度。


1.2 CPU

  • 1 核心CPU最多支持100個用戶,所有的workers和後臺任務都在同一個核心工作這將導致GitLab服務響應會有點緩慢。

  • 2核心 支持500用戶,這也是官方推薦的最低標準。

  • 4 核心支持2,000用戶。

  • 8 核心支持5,000用戶。

  • 16 核心支持10,000用戶。

  • 32 核心支持20,000用戶。

  • 64 核心支持40,000用戶。

1.3 Memory 

安裝使用GitLab需要至少4GB可用內存(RAM + Swap)! 由於操作系統和其他正在運行的應用也會使用內存, 所以安裝GitLab前一定要注意當前服務器至少有4GB的可用內存. 少於4GB內存會導致在reconfigure的時候出現各種詭異的問題, 而且在使用過程中也經常會出現500錯誤.

  • 1GB 物理內存 + 3GB 交換分區 是最低的要求,但我們 強烈反對 使用這樣的配置。 

  • 2GB 物理內存 + 2GB 交換分區 支持100用戶,但服務響應會很慢。

  • 4GB 物理內存 支持100用戶,也是 官方推薦 的配置。

  • 8GB 物理內存 支持 1,000 用戶。

  • 16GB 物理內存 支持 2,000 用戶。

  • 32GB 物理內存 支持 4,000 用戶。

  • 64GB 物理內存 支持 8,000 用戶。

  • 128GB 物理內存 支持 16,000 用戶。

  • 256GB 物理內存 支持 32,000 用戶。

即使你服務器有足夠多的RAM, 也要給服務器至少分配2GB的交換分區。 因爲使用交換分區可以在你的可用內存波動的時候降低GitLab出錯的機率。

注意: Sidekiq的25個workers在查看進程(top或者htop)的時候會發現它會單獨顯示每個worker,但是它們是共享內存分配的,這是因爲Sidekiq是一個多線程的程序。

2. 安裝並配置必要的依賴關係

如果你想使用 Postfix 發送郵件,請在安裝過程中根據提示選擇 'Internet Site'。 你也可以用 Sendmail 或者配置一個自定義的 SMTP服務, 並把它作爲一個 SMTP 服務器。

在 CentOS 系統上,下面的命令將會打開系統防火牆 HTTP 和 SSH 的訪問。

sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-XXX.rpm
rpm -i gitlab-ce-XXX.rpm

3. 配置並啓動GitLab

gitlab-ctl reconfigure


4. GitLab服務構成

GitLab由以下服務構成:

nginx:靜態Web服務器

gitlab-shell:用於處理Git命令和修改authorized keys列表

gitlab-workhorse:輕量級的反向代理服務器

logrotate:日誌文件管理工具

postgresql:數據庫

redis:緩存數據庫

sidekiq:用於在後臺執行隊列任務(異步執行)

unicorn:An HTTP server for Rack applications,GitLab Rails應用是託管在這個服務器上面的。


主要介紹gitlab-shell和gitlab-workhorse兩項:

gitlab-shell

GitLab Shell有兩個作用:爲GitLab處理Git命令、修改authorized keys列表。

當通過SSH訪問GitLab Server時,GitLab Shell會:


1.限制執行預定義好的Git命令(git push, git pull, git annex)

2.調用GitLab Rails API 檢查權限

3.執行pre-receive鉤子(在GitLab企業版中叫做Git鉤子)

4.執行你請求的動作

5.處理GitLab的post-receive動作

6.處理自定義的post-receive動作


    當通過http(s)訪問GitLab Server時,工作流程取決於你是從Git倉庫拉取(pull)代碼還是向git倉庫推送(push)代碼。如果你是從Git倉庫拉取(pull)代碼,GitLab Rails應用會全權負責處理用戶鑑權和執行Git命令的工作;如果你是向Git倉庫推送(push)代碼,GitLab Rails應用既不會進行用戶鑑權也不會執行Git命令,它會把以下工作交由GitLab Shell進行處理:


1.調用GitLab Rails API 檢查權限

2.執行pre-receive鉤子(在GitLab企業版中叫做Git鉤子)

3.執行你請求的動作

4.處理GitLab的post-receive動作

5.處理自定義的post-receive動作


    也許你會奇怪在通過http(s)推送(push)代碼的情況下,GitLab Rails應用爲什麼不在GitLab Shell之前進行鑑權。這是因爲GitLab Rails應用沒有解析git push命令的邏輯。好的方法是將這些解析代碼放在一個地方,這個地方就是GitLab Shell,這樣我們就可以在通過SSH進行訪問時重用這段代碼。實際上,GitLabShell在執行git push命令時根本不會進行權限檢查,它是依賴於pre-receive鉤子進行權限檢查的。而當你執行git pull命令時,權限檢查是在命令執行之前的。對git pull命令的權限檢查要簡單得多,因爲你只需要檢查一個用戶是否可以訪問這個倉庫就可以了(不需要檢查分支權限)



gitlab-workhorse


GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求,比如文件上傳、文件下載、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用,即反向代理給後端的unicorn。官網對GitLab Workhorse的介紹在這裏:https://gitlab.com/gitlab-org/gitlab-workhorse/



5、說明

缺點:這種方式雖然說簡單方便,但是定製型很差,默認只能使用postgre和nginx

主配置文件:/etc/gitlab/gitlab.rb   //可以自定義一些郵件服務等

日誌地址:/var/log/gitlab/    // 對應各服務

服務地址:/var/opt/gitlab/   // 對應各服務的主目錄

倉庫地址:/var/opt/gitlab/git-data //記錄項目倉庫等提交信息

重置配置:gitlab-ctl reconfigure    //不要亂用,會重置爲最原始的配置的

重啓服務:gitlab-ctl  stop/start/restart  //啓動命令

默認安裝:postgres、nginx、redis、unicorn ......


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章