gitlab搭建

一、需求分析

不論是開發還是運維還是管理者一般都熟悉githubgithub主要用於開源項目的維護,同時實現代碼文本界面的管理,但是對於一般的企業而言,因商業機密代碼是不能公開的,雖然github提供了私有倉庫,但是還是無法滿足全球的用戶(因地理位置性、費用、網絡傳輸速度等),所以即爲了速度又爲了保密性,公司有必要建立自己的github類似功能。這裏有很多方法實現,這裏我推薦Gitlab實現。Gitlab是利用 Ruby on Rails 一個開源的版本管理系統實現一個自託管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。它擁有與github類似的功能,能夠瀏覽源代碼,管理缺陷和註釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。

         gitlab官方提供的軟件包,對軟件基本要求:僅支持ubuntudebiancentosred hatoracle linuxscientific linux這幾種linux衍生操作系統,自8.13版本開始不再支持Ruby 2.3以下版本(不含2.3);對硬件基本要求:存儲:基於git的代碼大小,gitlab瓶頸是磁盤的尋道,官方最低標配的CPU2核(支持500),最好是4核(支持用戶2000)或8核(支持用戶5000),內存:物理內存4G以上(官方標配,支持100用戶),交換分區要在2G以上。

二、簡單邏輯圖

694405b86650a443e19400d113134ce6.png-wh_

這裏也可以考慮不用備份。

三、詳細規劃

軟件

版本

操作系統

CentOS Linux release 7.2_3.10.0-327.18.2.el7.x86_64

Gitlab

gitlab-ce-8.9.9(開源)ee版(收費)

 

用戶

權限

管理員

all

普通用戶

pushpull、創建分支、當前項目的代碼

經理

查看所有項目代碼及普通用戶的權限

四、項目實施

1.安裝gitlab

官網已經出gitlabrpm包,可以直接安裝(當然也可以採用源碼包安裝,不建議,太繁瑣了,各種配置問題,本人忙乎了兩天時間才安裝完畢,結果啓動後有些二級web頁面打不開),如修改git存儲及weburl等問題(可以修改/etc/gitlab/gitlab.rb文件),後文有對配置文件的詳細描述。

官網下載(使用腳本下載源)

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh|bash

yum install gitlab-ce -y

這裏(自己搭建了yum源,使用公司自己的yum源,公司的提供gitlab-ce-8.9gitlab-ce-8.6兩種版本)

安裝過程參考文檔出處:http://www.xuliangwei.com/xubusi/385.htmlgitlab安裝部分。

cat /etc/redhat-release

uname -r

#這裏僅測試了centos7.27.3

#安裝和配置必要的依賴關係

#打開HTTPSSH訪問

yum install curl openssh-server postfix -y

systemctl enable sshd postfix

systemctl start sshd postfix

#防火牆如果開啓,則需要打開HTTPSSH訪問(如果不開啓,則忽略下面兩條命令)

firewall-cmd --permanent --add-service=http

systemctl reload firewalld

#安裝gitlab

yum install gitlab*.rpm < == 指定版本號

#配置並啓動gitlab

gitlab-ctl reconfigure

gitlab-ctl start

#如果修改gitlab的配置文件/etc/gitlab/gitlab.rb的內容,需要重新gitlab-ctlreconfigure(先停掉),再啓動gitlab

 

2.關於gitlab的相關配置

(配置文件默認路徑/etc/gitlab/gitlab.rb),官方網址的配置有詳細說明,詳見:

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/configuration.md

我這裏介紹幾點常用的配置修改:

1gitlabURL修改

external_url

可以是ip也可以是域名。

注意:也可以設置成相關的URL,例如:https://example.com/gitlab,但是設置成relativeURL的時候對gitlab的版本有要求,8.17版本開始之後,就不用重新編譯(編譯安裝的),之後的需要重新執行gitlab-ctl reconfiguregitlab-ctl restart命令。

2git提交代碼路徑修改

git_data_dir

這裏使用絕對路徑,此路徑不能是軟鏈接。

同時也可以有多個git代碼路徑,如下實例:

git_data_dirs({

 "default" => "/var/opt/gitlab/git-data",

 "alternative" => "/mnt/nas/git-data"

})

#如果在/var/opt/gitlab/git-data下存在git倉庫,想要增加或改變路徑,可以進行如下操作:

gitlab-ctl stop

rsync -av /var/opt/gitlab/git-data/repositories/mnt/nas/git-data/

#這裏需要注意/repositories後面沒有/,/mnt/nas/git-data/需要跟/

gitlab-ctl upgrade   #< ==主要是更新修改的配置,如果必要的話需要gitlab-ctl reconfigure.

#查看/mnt/nas/git-data/下是否有repositories.

ls /mnt/nas/git-data/

gitlab-ctl start

 

注意:這個目錄如果是nfs或者其他方式掛載的,需要關閉如下(默認是關閉的)

manage_storage_directories['enable'] =false

62b4451d423c33201d688b4d15915d7d.png-wh_

 

 

掛載的倉庫目錄有一個問題:就是比如啓動時,nginxredisunicorn需要在掛載之後才能啓動,所以需要增加一條配置如下:

# wait for /var/opt/gitlab to be mounted

high_availability['mountpoint'] ='/var/opt/gitlab'

#在進行gitlab-ctlreconfigure,然後啓動即可。

3git用戶或組的修改

gitlab-shell 登錄的默認的用戶是git,官網說不建議更改,會產生意向不到的後果,如果非要更改用戶,則做如下操作:修改成了gitlab

## Modify default git user.

user['username'] = "gitlab"

user['group'] = "gitlab"

#用戶或組可以指定uidgid

user['uid'] = 1234

user['gid'] = 1234

# # The shell for the git user

# user['shell'] = "/bin/sh"       

##這裏有一個安全問題,git的用戶應當禁止bash登錄,更改爲/opt/gitlab/embedded/bin/git-shell  (這裏由於是gitlab集成的git所以文件目錄是這樣。),我暫時沒有更改,因爲還不確定是否成功,通過服務器禁止了無密碼登錄來保證安全

# # The home directory for the git user

# user['home'] = "/var/opt/gitlab"

# user['git_user_name'] ="GitLab"

# user['git_user_email'] ="gitlab@#{node['fqdn']}"

注意:是否管理用戶和用戶組(這裏默認是不管理)

manage_accounts['enable'] = false,可以考慮使用其他的工具管理。比如LDAP.

 

4、防止用戶濫用gitlab導致gitlab損壞,

首先開啓Rack Attack功能(默認是開啓的),它起到保護的作用。

gitlab_rails['rack_attack_git_basic_auth']= {

 'enabled' => true, # Enable/Disable Rack Attack

 'ip_whitelist' => ["127.0.0.1"], # Whitelisted urls

 'maxretry' => 10, # Limit the number of Git HTTP authenticationattempts per IP

 'findtime' => 60, # Reset the auth attempt counter per IP after 60seconds

 'bantime' => 3600 # Ban an IP for one hour (3600s) after too manyauth attempts

}

再者加入要保護的路徑,加入到gitlab_rails['rack_attack_protected_paths']中。

例如:

gitlab_rails['rack_attack_protected_paths']= [

 '/users/password',

 '/users/sign_in',

 '/api/#{API::API.version}/session.json',

 '/api/#{API::API.version}/session',

 '/users',

 '/users/confirmation',

 '/unsubscribes/',

 '/import/github/personal_access_token'

]

注意:路徑的問題,最好用絕對路徑。

 

其他配置:比如LDAPHTTPSRedirect HTTP requests to HTTPSChange the defaultport and the ssl certificate locationsUse non-packagedweb-serverUsing a non-packaged Redis instanceAdding ENV Vars tothe GitLab Runtime EnvironmentChanging GitLab.yml settingsSending applicationemail via SMTPOmniauth (Google, Twitter, GitHub login)Setting theNGINX listen address or addressesInserting custom NGINX settings into the GitLab server blockInsertingcustom settings into the NGINX configEnable nginx_status

請詳見gitlab官方網址

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/configuration.md

 

 

五、Gitlab組件

官網中都有分離的組件包,詳見官網https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/architecture.md#physical-office-analogy

d4d2d4c95e6551cb2220fd6ace361e22.png-wh_603b105e9e6454aea861717635a678e3.png-wh_

1.Nginx

作爲前端提供web頁面以及git工具是走http協議還是https協議。

2.Ruby on Rails

後端gitlab服務是採用Ruby on Rails框架,通過unicorn實現後臺服務和進程。

3.SSHD

開啓sshd服務,用於用戶上傳ssh key進行版本克隆及上傳。注:用戶上傳的ssh key是保存到git賬戶中

4.數據庫:

目前僅支持MySQL/MariaDBPostgreSQL,官方建議使用PostgreSQL

使用PostgreSQL必須確認GitLab使用的數據庫安裝了pg_trgm擴展。這個擴展需要PostgreSQL使用 root 用戶在GitLab每個數據庫裏面執行下面的命令:

CREATE EXTENSION pg_trgm;

5.Redis

Redis存儲每個客戶端的sessions和後臺任務隊列,任務包括新建倉庫、發送郵件等等

6.Sidekiq

Rails框架自帶的,查看redis中的任務並執行,使用多線程處理後臺任務。這個進程啓動的時候會使用整個Rails堆棧(200MB+),但是它會在內存泄漏的情況下增加。一個用戶非常活躍的服務器上(10,000個活躍用戶)Sidekiq進程會佔用1GB+的內存。

六、優化

1.硬件層優化:

能用ssd最好,或者使用轉速高7200的,緩存高的sata盤,最好做raid10,數據庫的原因導致的。CPU和內存前面已經敘述。

2.件層優化:

1)安全方面這裏不贅述,單獨一臺服務器安裝gitlab,沒有其他服務是最好的

2gitlab的高可用性參考官網:https://www.gitlab.cc/high-availability/

3gitlab-Runner不建議安裝到gitlab服務器上,工作時會消耗大量內存,可以考慮使用docker啓動一個(也不建議安裝到其他服務器,如果你要講shell作爲gitlab-Runner的執行器時,有安全問題,可以查看官網https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/security/index.md

gitlab-Runner是一個執行軟件集成的腳本,通常配合gitlab-CI集成工具使用。Runner可以分佈到不同的機器上。

下圖是Gitlab-CI的簡單邏輯拓撲圖:

2f1ce065b662909527077bba3d2c7d96.png-wh_

4)gitlab自身優化

Unicorn優化:

增加unicornworkers數量,可以減少應用的響應時間並提高處理併發請求的能力,官方建議使用這樣的配置:CPU 核心數 + 1 = unicorn workers 

對於只有2GB內存的機器,官方建議至少配置3unicorn workers;使用1GB內存加一個機械硬盤上的swap分區,建議只配置2Unicron workers;至少配兩個,如果只使用一個unicorn workersgit只能通過ssh協議工作,因爲HTTP訪問需要兩個workers(一個用來處理用戶請求,一個用來處理身份驗證) 如果你使用512MB內存加一個固態硬盤(SSD)上的swap分區,你可以用2unicorn workersgit就可以通過HTTP方式訪問GitLab       

修改方法如下:在gitlab的配置文件/etc/gitlab/gitlab.rb中:

unicorn['worker_processes'] = 3

unicorn['worker_timeout'] = 60

nginx、數據庫、redis的優化:一般不優化,基本已經優化好

用戶的優化:沒有試過,官方不建議,有可能出問題。


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