016-gitlab私服中文安裝與配置(轉)

weixin_34247155發表於2018-06-23

1 gitlab中文網地址   https://www.gitlab.com.cn

2 gitlab安裝:centos6中文安裝教程    https://www.gitlab.com.cn/installation/#centos-6

包含了社群版(Community Edition)和企業版(Enterprise Edition)的安裝

每種版本都包含了線上安裝和安裝包安裝兩種方式

強烈建議使用 Omnibus 包安裝 GitLab ,因為它安裝起來更快、更容易升級版本,而且包含了其他安裝方式所沒有的可靠性功能。同時我們強烈推薦承載 GitLab 執行的伺服器 至少分配4GB的記憶體 給 GitLab

安裝gitlab的去求見地址https://docs.gitlab.com.cn/ce/install/requirements.html

安裝包各個版本下載地址如下https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

3 gitlab配置資訊

配置域名訪問

為使使用者可以正確的獲取到GitLab上顯示的當前倉庫的clone地址,GitLab需要你設定好哪個url才是使用者可以訪問到GitLab, 比如http://gitlab.example.com。你需要編輯下面這個檔案

/etc/gitlab/gitlab.rb:

external_url "http://gitlab.example.com"#替換為你自己的地址

執行sudo gitlab-ctl reconfigure使修改生效

配置子路徑訪問(實驗性)

注意:Relative URL(子路徑)是在8.5版本被引入 Omnibus GitLab的,該功能還處於測試階段。 如果你使用原始碼安裝的,這裡有一篇獨立介紹原始碼安裝如何使用子路徑的文件.

雖然我們建議GitLab使用二級域名訪問, 但有時由於各種各樣的原因,我們想用子路徑的方式訪問GitLab。 出於這種需求,Gitlab也可以安裝到子路徑, 如https://example.com/gitlab.

需要注意的是,修改了這個URL後, 所有遠端倉庫地址要也做相應的修改,所以你需要手動修改本地倉庫中的remote url以使可以正常連線GitLab伺服器

配置子路徑訪問的條件

自Omnibus 8.17 安裝包開始,不再需要重新編譯靜態資源Omnibus GitLab 一鍵包附帶了預編譯的資源(如CSS, JavaScript,fonts, 等等)。 如果你使用的是8.17 之前的版本並配置了GitLab使用relative URL,這些資原始檔就需要重新生成,而生成資源的過程需要消耗一部分CPU和記憶體資源。為防止記憶體不足, 需要保證伺服器至少有2GB的可用記憶體,我們建議的伺服器配置為4GB記憶體,4核或者8核CPU


啟用子路徑訪問

請按照下面的步驟為GitLab啟用relative URL:

(可選) 如果當前伺服器可用資源不用,可用下面的命令暫時關閉Unicorn 和 Sidekiq 釋放一部分記憶體:

sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq

修改external_url,編輯/etc/gitlab/gitlab.rb:

external_url"https://example.com/gitlab"

上面的例子將使GitLab的訪問路徑變成域名後面加/gitlab,請將此處修改為你自己的地址。

Reconfigure GitLab 使修改生效:

sudo gitlab-ctl reconfigure

Restart the services so that Unicorn and Sidekiq picks up the changes

sudo gitlab-ctl restart

禁用子路徑訪問

禁用relative URL, 同樣的也要修改external_url,改成不包含子路徑的地址。然後重啟下Unicorn服務即可:

sudo gitlab-ctl restart unicorn

使用子路徑的故障排查

如果你配置子路徑後,發現 gitlab 靜態資源發生錯誤(如圖片丟失,資源響應長時間未響應),請在GitLab-CE的 issue 頁面提交問題,注意使用Frontend標籤。

如你使用的是8.17 之前的版本並發現由於一些原因導致資源生成失敗(比如伺服器記憶體不足),你可以在解決這些問題後手動執行生成資源的任務(比如增加swap):

sudo NO_PRIVILEGE_DROP=true USE_DB=false gitlab-rake assets:clean assets:precompilesudo chown-Rgit:git /var/opt/gitlab/gitlab-rails/tmp/cache

上面的命令中的使用者和組如果和你在gitlab.rb中設定的user['username'],user['group'],gitlab_rails['dir']不一樣,執行該命令的時候注意修改chown命令後面的git:git為配置檔案裡面的使用者和組

載入非超級使用者的擴充套件配置

Omnibus-gitlab會載入/etc/gitlab/gitlab.rb檔案中的所有配置項。這個檔案的屬主為root,並且有嚴格的許可權控制,這樣做的原因是執行gitlab-ctl reconfigure的過程中要以root身份執行Ruby解析/etc/gitlab/gitlab.rb。這就意味著擁有/etc/gitlab/gitlab.rb寫入許可權的使用者可以編輯配置項然後以root使用者身份來執行解析。

在某些團隊,可能會允許非root使用者來修改gitlab的配置,你可以在/etc/gitlab/gitlab.rb檔案中引入外部擴充套件配置檔案實現這個需求:

from_file"/home/admin/external_gitlab.rb"

使用from_file引入到/etc/gitlab/gitlab.rb的程式碼在sudo gitlab-ctl reconfigure的時候都會以root許可權執行。/etc/gitlab/gitlab.rb和from_file中重複的配置項,/etc/gitlab/gitlab.rb的優先順序更高

設定儲存倉庫資料的備用目錄

預設情況下omnibus-gitlab 將倉庫資料儲存在/var/opt/gitlab/git-data目錄下,倉庫存放在子目錄repositories裡面。 以可以通過修改/etc/gitlab/gitlab.rb的這一行來自定義git-data的父目錄。

git_data_dirs({"default"=>{"path"=>"/mnt/nas/git-data"}})

自GitLab 8.10開始,可以通過在/etc/gitlab/gitlab.rb檔案中新增下面的幾行配置,來增加多個 git 資料儲存目錄。

git_data_dirs({"default"=>{"path"=>"/var/opt/gitlab/git-data"},"alternative"=>{"path"=>"/mnt/nas/git-data"}})

注意目標路徑和其子路徑必須不能為軟連結。

執行sudo gitlab-ctl reconfigure使修改生效。

如果/var/opt/gitlab/git-data目錄已經存在Git倉庫資料,你可以用下面的命令把資料遷移到新的位置:

# 準備遷移之前要停止GitLab服務,防止使用者寫入資料。sudo gitlab-ctl stop# 注意 'repositories'後面不帶斜槓,而# 'git-data'後面是有斜槓的。sudo rsync-av/var/opt/gitlab/git-data/repositories /mnt/nas/git-data/# 如果需要修復許可權設定,# 可執行下面的命令進行修復。sudo gitlab-ctl reconfigure# 再次檢查下 /mnt/nas/git-data的目錄. 正常情況應該有下面這個子目錄:# repositoriessudo ls/mnt/nas/git-data/# 完工! 啟動GitLab,驗證下是否能# 通過web訪問Git倉庫。sudo gitlab-ctl start

修改預設的執行使用者和組

預設情況下omnibus-gitLab使用git使用者登陸Git gitlab-shell,Git data是屬主也是git,網頁上生成的SSH URL也是git使用者。同樣的,git使用者組也是Git data的屬組。

我們不建議在已經安裝好的gitlab上修改預設的user/group,因為這會產生無法預知的副作用。如果你固執的想要修改預設的user/group,你可以在/etc/gitlab/gitlab.rb檔案中新增下面加行配置:

user['username']="gitlab"

user

['group']="gitlab"

執行sudo gitlab-ctl reconfigure使修改生效。

注意:如果你在已經安裝好的GitLab中修改了user/group,reconfigure不會修改子目錄的屬主和屬組,你需要手動修改,並確認新使用者可以讀寫repositories和uploads目錄

設定使用數字表示的使用者和組

omnibus-gitlab 為GitLab, PostgreSQL, Redis 和 NGINX建立了執行使用者。你可以在/etc/gitlab/gitlab.rb檔案中指定這些使用者的uid和gid。

user['uid']=1234

user['gid']=1234

postgresql

['uid']=1235

postgresql

['gid']=1235

redis['uid']=1236

redis

['gid']=1236

web_server

['uid']=1237

web_server['gid']=1237

執行sudo gitlab-ctl reconfigure使修改生效


禁用管理使用者和組賬戶的功能

預設情況下,綜合gitlab照顧建立系統使用者和組帳戶以及保持資訊更新。這些系統帳戶執行包的各個元件。大多數使用者不需要改變這種行為。但是,如果您的系統帳戶由其他軟體(如LDAP)管理,則可能需要禁用包所做的帳戶管理。

為了禁用omnibus-gitlab管理使用者和組賬戶,我們需要在/etc/gitlab/gitlab.rb中做如下設定:

manage_accounts['enable']=false

警告Omnibus-gitlab 建議在系統上保留omnibus-gitlab安裝包建立的預設使用者。

omnibus-gitlab 建立的預設使用者如下:

# GitLab user (必需)

git

# Web server user (必需)

gitlab-www

# Redis user for GitLab (如使用內建的redis,該賬號必需)

gitlab-redis

# Postgresql user (如使用內建的Postgresql,該賬號必需)

gitlab-psql

# Prometheus user for prometheus monitoring and various exporters

gitlab-prometheus

# GitLab Mattermost user (only when using GitLab Mattermost)

mattermost

# GitLab Registry user (only when using GitLab Registry)

registry

# GitLab Consul user (only when using GitLab Consul)

gitlab-consul

omnibus-gitlab 建立的預設組如下:

# GitLab group (必需)

git

# Web server group (必需)

gitlab-www

# Redis group for GitLab (如使用內建的Redis,該使用者組必需)

gitlab-redis

# Postgresql group (如使用內建的Postgres,該使用者組必需)

gitlab-psql

# Prometheus user for prometheus monitoring and various exporters

gitlab-prometheus

# GitLab Mattermost group (如使用內建的Mattermost,該使用者組必需)

mattermost

# GitLab Registry group (only when using GitLab Registry)

registry

# GitLab Consul group (only when using GitLab Consul)

gitlab-consul

你也可以自定義user/group ,但需要在/etc/gitlab/gitlab.rb配置檔案中配置詳細的user/group,如:

# 禁用管理user/group的功能

manage_accounts['enable']=false

# GitLab

user['username']="custom-gitlab"

user['group']="custom-gitlab"

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

user['home']="/var/opt/custom-gitlab"

# Web server

web_server

['username']='webserver-gitlab'

web_server['group']='webserver-gitlab'

web_server

['shell']='/bin/false'

web_server['home']='/var/opt/gitlab/webserver'

# Postgresql (如使用外部Postgresql,可忽略該配置)

postgresql['username']="postgres-gitlab"

postgresql

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

postgresql

['home']="/var/opt/postgres-gitlab"

# Redis (如使用外部Redis,可忽略該配置)

redis['username']="redis-gitlab"

redis['shell']="/bin/false"

redis['home']="/var/opt/redis-gitlab"

# 以此類推,GitLab Mattermost 也需要指定詳細的user/group

禁用管理儲存目錄的功能

預設情況下,omnibus-gitlab負責建立所有必需的資料夾並賦予目錄正確的所有權和許可權,並根據配置檔案保持更新。

在某些大型組織架構中,隨著專案程式碼和數量的增加,一些目錄會儲存大量的資料,為擴充套件儲存能力這些目錄可能就需要掛載到NFS(或者其他共享儲存)上。

掛載某些檔案系統會拒絕root使用者自動建立目錄,比如 NFS 需要啟用root_squash。要解決這個問題,omnibus-gitlab會嘗試使用該目錄的屬主使用者來自動建立子目錄。

如果你掛載了/etc/gitlab目錄,你可以禁用omnibus-gitlab對該目錄的管理功能。

修改/etc/gitlab/gitlab.rb:

manage_storage_directories['manage_etc']=false

如果計劃重新掛載GitLab所有儲存目錄到每個獨立的掛載點上,應該完全禁用omnibus-gitlab對各個儲存目錄的管理功能。

為禁止對所有儲存目錄的管理功能,修改/etc/gitlab/gitlab.rb:

manage_storage_directories['enable']=false

Warningomnibus-gitlab 建議保留預設的目錄。如該選項已設定,將有管理員建立目錄並設定正確的許可權。

啟用此設定會阻止omnibus-gitlab建立如下目錄:

Default locationPermissionsOwnershipPurpose

/var/opt/gitlab/git-data0700git:rootHolds repositories directory

/var/opt/gitlab/git-data/repositories2770git:gitHolds git repositories

/var/opt/gitlab/gitlab-rails/shared0751git:gitlab-wwwHolds large object directories

/var/opt/gitlab/gitlab-rails/shared/artifacts0700git:rootHolds CI artifacts

/var/opt/gitlab/gitlab-rails/shared/lfs-objects0700git:rootHolds LFS objects

/var/opt/gitlab/gitlab-rails/uploads0700git:rootHolds user attachments

/var/opt/gitlab/gitlab-rails/shared/pages0750git:gitlab-wwwHolds user pages

/var/opt/gitlab/gitlab-ci/builds0700git:rootHolds CI build logs

/var/opt/gitlab/.ssh0700git:gitHolds authorized keys

設定延遲啟動

為保證服務質量,我們可以設定讓omnibus-gitlab的服務(Nginx, Redis, Unicorn等)在指定的檔案系統掛載成功後再啟動,在/etc/gitlab/gitlab.rb檔案中新增如下內容:

# wait for /var/opt/gitlab to be mountedhigh_availability['mountpoint']='/var/opt/gitlab'

執行sudo gitlab-ctl reconfigure使修改生效

配置執行時目錄

When Prometheus monitoring is enabled, GitLab-monitor will conduct measurementsof each Unicorn process (Rails metrics). Every Unicorn process will need to writea metrics file to a temporary location for each controller request.Prometheus will then collect all these files and process their values.

In order to avoid creating disk I/O, the omnibus-gitlab package will use aruntime directory.

Duringreconfigure, package will check if/runis atmpfsmount.If it is not, warning will be printed:

Runtime directory '/run' is not a tmpfs mount.

and Rails metrics will be disabled.

To enable Rails metrics again, create atmpfsmount and specify it in/etc/gitlab/gitlab.rb:

runtime_dir '/path/to/tmpfs'

Please note that there is no=in the configuration.

Runsudo gitlab-ctl reconfigurefor the settings to take effect

配置基礎防護

為阻止惡意使用客戶端破壞GitLab,我們使用了rack-attack gem包。查閱 rack_attack獲取更多內容。

原始碼中的config/initializers/rack_attack.rb檔案在omnibus-gitlab中由/etc/gitlab/gitlab.rb管理

禁用安裝過程中自動清理快取

If you have large gitlab installation, you might not want to runrake cache:cleantask.As it can take long time to finish. By default, cache clear task will run automaticallyduring reconfigure.

編輯  /etc/gitlab/gitlab.rb:

# This is advanced feature used by large gitlab deployments where loading# whole RAILS env takes a lot of time.gitlab_rails['rake_cache_clear']=false

Don't forget to remove the#comment characters at the beginning of thisline

啟用禁用賬戶驗證防護

修改下面的配置項控制Rack Attack:

gitlab_rails['rack_attack_git_basic_auth']={

'enabled'=>true,# 啟用/禁用 Rack Attack

'ip_whitelist'=>["127.0.0.1"],# 白名單地址,多個IP用","隔開

'maxretry'

=>10,# 限制每個IP嘗試登陸的次數為10次。

'findtime'

=>60,# 60秒後重置每IP的授權計數器

'bantime'

=>3600# 對多次錯誤登陸的IP封禁1小時(3600秒)

}

設定訪問路徑防護

要修改預設的防護路徑,需在配置檔案中設定gitlab_rails['rack_attack_protected_paths']區段。

Warning此操作會覆蓋omnibus-gitlab 預設列表:

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'

]

Note:所有路徑必須是 gitlab 的相對路徑.如啟用了relative URL,上面的路徑要做相應修改。

Warning若要在路徑中插入rails的變數,如(#{API::API.version}),應避免用大括號和單引號字串。示例:"/api/#\{API::API.version\}/session.json"或者'/api/#{API::API.version}/session.json'

設定路徑防護的頻率

用如下配置來控制頻率和週期:

gitlab_rails['rate_limit_requests_per_period']=10#限制每週期請求次數

gitlab_rails

['rate_limit_period']=60#每週期的時長,60s

執行sudo gitlab-ctl reconfigure使修改生效。

配置使用LDAP登入

See doc/settings/ldap.md.

強制HTTP跳轉為HTTPS

Seedoc/settings/nginx.md.

修改預設埠和SSL證照路徑

See doc/settings/nginx.md.

使用外部 web-server

使用系統上已安裝的Nginx, Passenger, or Apache webserver 請查閱doc/settings/nginx.md.

使用外部的PostgreSQL資料庫伺服器

連線外部PostgreSQL or MySQL DBMS 請查閱doc/settings/database.md(Omnibus安裝包只有Enterprise(企業版)支援Mysql).

使用外部 Redis 例項

Seedoc/settings/redis.md.

新增系統變數到GitLab執行環境

Seedoc/settings/environment-variables.md.

Changing GitLab.yml settings 自定義GitLab.yml設定

Seedoc/settings/gitlab.yml.md.

Sending application email via SMTP 使用SMTP傳送郵件

Seedoc/settings/smtp.md.

Omniauth (Google, Twitter, GitHub login)

Omniauth configuration is documented indocs.gitlab.com.

Adjusting Unicorn settings 調整 Unicorn 配置

Seedoc/settings/unicorn.md.

Setting the NGINX listen address or addresses 配置 NGINX 監聽地址

Seedoc/settings/nginx.md.

Inserting custom NGINX settings into the GitLab server block 在內建NGINX中插入自定義server塊

Seedoc/settings/nginx.md.

Inserting custom settings into the NGINX config 在內建NGINX中插入自定義設定

Seedoc/settings/nginx.md.

Enable nginx_status 啟用內建NGINX的nginx_status模組

Seedoc/settings/nginx.md.

相關文章