快速安裝配置 GitLab 並漢化

天府雲創發表於2017-10-19

一、GitLab簡介

GitHub是2008年由Ruby on Rails編寫而成,與業界聞名的Github類似;但要將程式碼上傳到GitHub上面,而且將專案設為私有還要收費。GitLab 是一個用於倉庫管理系統的開源專案,使用Git作為程式碼管理工具,可通過Web介面進行訪問公開的或者私人專案,非常適合在團隊內部使用。

在gitlab中有三個版本,分別是CE(社群版)、EE(企業版)、OM(RPM包完整版,裡面包括nginx、redis等其它軟體,比較大)。這裡的編譯安裝版,是指CE版的原始碼安裝

官網https://docs.gitlab.com/

這裡呢建議大家使用rpm安裝。

參考文章:快速安裝 GitLab 並漢化 - 簡書 http://www.jianshu.com/p/7a0d6917e009?mType=Group

               Larry Li / GitLab 中文社群版 · GitLab https://gitlab.com/larryli/gitlab

1.1 Gitlab提供的功能

1.     程式碼託管服務

2.     訪問許可權控制

3.     問題跟蹤,bug的記錄和討論

4.     程式碼審查,可以檢視、評論程式碼

5.     社群版基於 MIT License開源完全免費

1.2 Gitlab(Github)和Git區別

Github和Git是兩回事。

Git是版本控制系統,Github是線上的基於Git的程式碼託管服務。

1.3 Github PK Sourceforge

為什麼現在Github這麼火,以至於世界頂級公司和專案的原始碼很多都託管在Github上

Why

1.     顏值高

2.     簡潔大方

 

2011年,Github已經取代Sourceforge,成為最活躍的程式碼交流社群。這意味著在Open SourceCommunity(開源社群),Git取代了SVN已經成為事實。

1.3.1 Github介面

1.3.2 Sourceforge介面

1.4 搭建私有Git服務的優勢

公司的專案,因為商業層面的原因,需要把程式碼託管到自有的伺服器上,並且伺服器很有可能是放在企業內網中,不對公網開放。

出於安全性的考慮,暫時沒有使用國內的Git服務平臺的計劃。

GitHub和BitBucket,GitLab,由於服務商是在國外,受地域的影響,因此在網路訪問上會有延遲。

現有的服務商,對於免費的套餐都有一定的限制,比如GitHub只允許建立免費的開源repository,不允許建立私有的倉庫。BitBucket允許建立無限制的私有專案,不過對於專案中參與的開發人員是有人數限制的。當團隊中開發者規模達到一定數量後,需要付費購買相應的套餐。

二、Gitlab安裝

2.1 環境配置

硬體:

redhat-7.x系列_x86_64

Mem建議至少2G

軟體:

       gitlab-ce.x86_64 0:8.8.0-ce

       git-2.11.0

       ruby2.1(至少是2.1)

server

client

192.168.201.148

192.168.201.130(作為測試端)

本次採用Omnibus 安裝方式

2.2 gitlab環境要求

#系統層

Ubuntu

Debian

CentOS

Red Hat Enterprise Linux (please use the CentOSpackages and instructions)

Scientific Linux (please use the CentOSpackages and instructions)

Oracle Linux (please use the CentOS packagesand instructions)

不支援win

#Ruby versions

GitLab需要Ruby(MRI)2.3。支援低於2.3(2.1,2.2)的Ruby版本將停止與GitLab 8.13

#硬體要求

必要的硬碟驅動器空間很大程度上取決於您要儲存在GitLab中的存檔的大小,但是根據經驗,您應該至少擁有與所有存檔組合相同的可用空間。

       如果你希望在將來考慮使用LVM來安裝硬碟驅動器空間方面具有靈活性,那麼您可以在需要時新增更多的硬碟驅動器。

       除本地硬碟驅動器外,你還可以安裝支援網路檔案系統(NFS)協議的卷。此卷可能位於檔案伺服器,網路連線儲存(NAS)裝置,儲存區域網路(SAN)或Amazon Web Services(AWS)彈性塊儲存(EBS)捲上。

       如果你有足夠的RAM記憶體和最近的CPU,則GitLab的速度主要受硬碟搜尋時間的限制。快速驅動(7200 RPM或更高)或固態硬碟(SSD)將提高GitLab的響應速度

#CPU

1核心的CPU,基本上可以滿足需求,大概支撐100個左右的使用者,不過在執行GitLab網站的同時,還需要執行多個worker以及後臺job,顯得有點捉襟見肘了。

兩核心的CPU是推薦的配置,大概能支撐500個使用者.

4核心的CPU能支撐 2,000 個使用者.

8核心的CPU能支撐 5,000 個使用者.

16核心的CPU能支撐 10,000 個使用者.

32核心的CPU能支撐 20,000 個使用者.

64核心的CPU能支援多達 40,000 個使用者.

#Memory 

你需要至少4GB的可定址記憶體(RAM交換)來安裝和使用GitLab!作業系統和任何其他正在執行的應用程式也將使用記憶體,因此請記住,在執行GitLab之前,您至少需要4GB的可用空間。使用更少的記憶體GitLab將在重新配置執行期間給出奇怪的錯誤,並在使用過程中發生500個錯誤.

1GBRAM + 3GB of swap is the absolute minimum but we strongly adviseagainst this amount of memory. See the unicorn worker section belowfor more advice.

2GBRAM + 2GB swap supports up to 100 users but it will be very slow

4GBRAM isthe recommended memory size for all installations and supportsup to 100 users

8GBRAM supports up to 1,000 users

16GBRAM supports up to 2,000 users

32GBRAM supports up to 4,000 users

64GBRAM supports up to 8,000 users

128GBRAM supports up to 16,000 users

256GBRAM supports up to 32,000 users

建議伺服器上至少有2GB的交換,即使您目前擁有足夠的可用RAM。如果可用的記憶體更改,交換將有助於減少錯誤發生的機會。

#Unicorn Workers(程式數) 

可以增加獨角獸工人的數量,這通常有助於減少應用程式的響應時間,並增加處理並行請求的能力.

對於大多數情況,我們建議使用:CPU核心1 =獨角獸工人。所以對於一個有2個核心的機器,3個獨角獸工人是理想的。

對於所有擁有2GB及以上的機器,我們建議至少三名獨角獸工人。如果您有1GB機器,我們建議只配置兩個Unicorn工作人員以防止過度的交換.

#Database 

PostgreSQL

MySQL/MariaDB

強烈推薦使用PostgreSQL而不是MySQL/ MariaDB,因為GitLab的所有功能都不能與MySQL/ MariaDB一起使用。例如,MySQL沒有正確的功能來以有效的方式支援巢狀組.

執行資料庫的伺服器應至少有5-10 GB的可用儲存空間,儘管具體要求取決於GitLab安裝的大小

#PostgreSQL要求

從GitLab 9.0起,PostgreSQL 9.2或更新版本是必需的,不支援早期版本。

#Redis and Sidekiq

Redis儲存所有使用者會話和後臺任務佇列。Redis的儲存要求最低,每個使用者大約25kB。

Sidekiq使用多執行緒程式處理後臺作業。這個過程從整個Rails堆疊(200MB)開始,但是由於記憶體洩漏,它可以隨著時間的推移而增長。在非常活躍的伺服器(10,000個活躍使用者)上,Sidekiq程式可以使用1GB的記憶體。

#Prometheus and its exporters

從Omnibus GitLab 9.0開始,預設情況下,Prometheus及其相關出口商啟用,可以輕鬆,深入地監控GitLab。這些程式將使用大約200MB的記憶體,具有預設設定。這個還可以監控k8s

#Node exporter

節點匯出器允許您測量各種機器資源,如記憶體,磁碟和CPU利用率。預設埠9100

#Redis exporter

       Redis出口商允許您測量各種Redis指標。

#Postgres exporter

Postgres匯出器允許您測量各種PostgreSQL度量。

#GitLab monitor exporter

GitLab監視器匯出器允許您測量各種GitLab指標。

#Supported web browsers

支援Firefox,Chrome /Chromium,Safari和Microsoft瀏覽器(Microsoft Edge和Internet Explorer 11)的當前和之前的主要版本。

2.3 安裝

1、關閉SELinux

#下面的命令實現永久關閉SELinux

[root@git ~]# sed -i's/^SELINUX=.*/#&/;s/^SELINUXTYPE=.*/#&/;/SELINUX=.*/aSELINUX=disabled' /etc/sysconfig/selinux

#下面的命令實現臨時關閉SELinux

[root@git ~]# setenforce 0

setenforce: SELinux is disabled

#永久修改下主機名,需要重啟系統之後生效

Redhat6中修改

[root@git ~]# vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=git.server.com #修改成你自己的主機名

Redhat7中修改

[root@noede1 ~]# vi /etc/hostname

gitlab.server.com

#永久修改

[root@git ~]#hostnamectl set-hostname gitlab.server.com

#新增域名

[root@git ~]#cat /etc/hosts

192.168.201.131 gitlab.server.com

2、關閉firewall

#臨時關閉

[root@git yum.repos.d]# iptables -F

或者

[root@git gitlab_pack]# systemctl stopfirewalld.service

#永久關閉,需要下次重啟系統之後生效

[root@git gitlab_pack]# systemctl disablefirewalld.service

Removed symlink/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

Removed symlink/etc/systemd/system/basic.target.wants/firewalld.service.

#線上開啟防火牆

[root@gitlab ~]# firewall-cmd --permanent--add-service=http

success

[root@gitlab ~]# firewall-cmd --permanent--add-service=https

Success

[root@gitlab ~]# firewall-cmd --reload

success

#重新載入配置

[root@gitlab ~]#systemctl reload firewalld

3、同步時間

[root@git yum.repos.d]# ntpdate time.nist.gov

10 Apr 11:00:04 ntpdate[40122]: step timeserver 216.229.0.179 offset 53747.856066 sec

4、配置gitlab-ce yum源

[root@git yum.repos.d]# cat gitlab.repo

[gitlab-ce]

name=gitlab-ce

baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7

repo_gpgcheck=0

gpgcheck=0

enabled=1

gpgkey=https://packages.gitlab.com/gpg.key

註解

如果想要在centos6系列上安裝,只需把el7修改成el6

5、Gitlab安裝方式

Gitlab兩種安裝方式

編譯安裝

優點:可定製性強。資料庫既可以選擇MySQL,也可以選擇PostgreSQL;伺服器既可以選擇Apache,也可以選擇Nginx。

缺點:國外的源不穩定,被牆時,依賴軟體包難以下載。配置流程繁瑣、複雜,容易出現各種各樣的問題。依賴關係多,不容易管理,解除安裝GitLab相對麻煩。

rpm包安裝

優點:安裝過程簡單,安裝速度快。採用rpm包安裝方式,安裝的軟體包便於管理。

缺點:資料庫預設採用PostgreSQL,伺服器預設採用Nginx,不容易定製。

gitlab安裝

1,下載

https://about.gitlab.com/installation/

2,安裝

#官方地址

https://about.gitlab.com/downloads/#centos7

#如果想檢視rpm中內容,預設安裝的位置

[root@gitlab gitlab_pack]# rpm2cpiogitlab-ce-8.8.0-ce.0.el6.x86_64.rpm | cpio -ivd

 

[root@git yum.repos.d]# yum install curlopenssh-server openssh-clients postfix -y

[root@git yum.repos.d]# yum install gitlab-ce-8.8.0-y

#這裡為了節省時間,直接rpm安裝

[root@git gitlab_pack]# rpm -ivhgitlab-ce-8.8.0-ce.0.el6.x86_64.rpm

Preparing...                         ################################# [100%]

Updating / installing...

  1:gitlab-ce-8.8.0-ce.0.el6        ################################# [100%]

gitlab: Thank you for installing GitLab!

gitlab: To configure and start GitLab, RUN THEFOLLOWING COMMAND:

 

sudo gitlab-ctl reconfigure

 

gitlab: GitLab should be reachable athttp://localhost

gitlab: Otherwise configure GitLab for yoursystem by editing /etc/gitlab/gitlab.rb file

gitlab: And running reconfigure again.

gitlab:

gitlab: For a comprehensive list ofconfiguration options please see the Omnibus GitLab readme

gitlab:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

gitlab:

It looks like GitLab has not been configuredyet; skipping the upgrade script.

至此gitlab安裝成功

注意:

       rpm 安裝Gitlab的預設位置在/opt下

6、修改下配置檔案

#修改url,供外部訪問

[root@gitlab ~]# vi /etc/gitlab/gitlab.rb

external_url'http://gitlab.server.com'

external_url 修改成自己的ip或者域名

#修改配置檔案之後,需要重新是配置檔案生效下,初始化下

[root@gitlab ~]#gitlab-ctl reconfigure #這裡會花費一定的時間(1-10min),如果這裡記憶體小,將會花費大量時間

Recipe: gitlab::gitlab-rails

  *execute[clear the gitlab-rails cache] action run

    -execute /opt/gitlab/bin/gitlab-rake cache:clear

  *execute[clear the gitlab-rails cache] action run

    -execute /opt/gitlab/bin/gitlab-rake cache:clear

Recipe: gitlab::unicorn

  *service[unicorn] action restart

    -restart service service[unicorn]

Recipe: gitlab::redis

  *ruby_block[reload redis svlogd configuration] action create

    -execute the ruby block reload redis svlogd configuration

Recipe: gitlab::postgresql

  *ruby_block[reload postgresql svlogd configuration] action create

    -execute the ruby block reload postgresql svlogd configuration

Recipe: gitlab::unicorn

  *ruby_block[reload unicorn svlogd configuration] action create

    -execute the ruby block reload unicorn svlogd configuration

Recipe: gitlab::sidekiq

  *ruby_block[reload sidekiq svlogd configuration] action create

    -execute the ruby block reload sidekiq svlogd configuration

Recipe: gitlab::gitlab-workhorse

  *service[gitlab-workhorse] action restart

    -restart service service[gitlab-workhorse]

  *ruby_block[reload gitlab-workhorse svlogd configuration] action create

    -execute the ruby block reload gitlab-workhorse svlogd configuration

Recipe: gitlab::gitlab-workhorse

  *service[gitlab-workhorse] action restart

    -restart service service[gitlab-workhorse]

  *ruby_block[reload gitlab-workhorse svlogd configuration] action create

    -execute the ruby block reload gitlab-workhorse svlogd configuration

Recipe: gitlab::nginx

  *ruby_block[reload nginx svlogd configuration] action create

    -execute the ruby block reload nginx svlogd configuration

Recipe: gitlab::logrotate

  *ruby_block[reload logrotate svlogd configuration] action create

    -execute the ruby block reload logrotate svlogd configuration

 

Running handlers:

Running handlers complete

Chef Client finished, 222/309 resources updatedin 02 minutes 50 seconds

gitlab Reconfigured!#如果在此期間沒有出現error,證明成功

7、啟動Gitlab服務

[root@gitlab ~]# gitlab-ctl start

ok: down:gitaly: 0s, normally up

ok: down:gitlab-monitor: 1s, normally up

ok: down: gitlab-workhorse: 0s, normally up

ok: down: logrotate: 0s, normally up

ok: down: nginx: 0s, normally up

ok: down:node-exporter: 0s, normally up

ok: down:postgres-exporter: 1s, normally up

ok: down: postgresql: 0s, normally up

ok: down:prometheus: 1s, normally up

ok: down: redis: 0s, normally up

ok: down:redis-exporter: 0s, normally up

ok: down: sidekiq: 0s, normally up

ok: down: unicorn: 1s, normally up

註解:

綠色部分是9中新新增的

ü  gitlab-workhorse這個“工作馬”,就是gitlab-Git-http-server(GitlabV8.0出現,V8.2名稱變更為Gitlab-workhorse)

ü  sidekiq多執行緒啟動

ü  unicorn是ruby的http server,可以通過http://localhost:8080埠訪問, 預設埠是8080

ü  nginx作為方向代理,代理到unicorn,nginx預設埠是80

ü  postgresql作為資料庫,預設埠是5432

ü  redis作為一個佇列(NoSql),用於儲存使用者session和任務,任務包括新建倉庫、傳送郵件等等,預設埠是6379

ü  logrotate切割日誌

ü  prometheus監控,預設埠9090

ü  gitlab-monitor預設埠9168

注:

(可選)如果系統資源不足,可以通過以下命令關閉Sidekiq來釋放一部分記憶體

[root@gitlab ~]# gitlab-ctl stop sidekiq

ok: down: sidekiq: 0s, normally up

7.1 RPM安裝模式下的啟動、停止、重啟

#初次配置服務

# gitlab-ctlreconfigure

#啟動服務

# gitlab-ctl start

#停止服務

# gitlab-ctl stop

#重啟服務

# gitlab-ctl restart

#狀態

#gitlab-ctl status

#監控

#gitlab-ctl tailunicorn 監控unicorn日誌

#gitlab-ctl tail

8、登入

訪問地址http://ip

由於第一次登陸,需要設定密碼

登入

登入之後的介面

Gitlab8的介面

Gitlab9版本

9、解除安裝

重新安裝清理

1,解除安裝

[root@git Gitlab-cn]# rpm -e gitlab-ce

2,刪除檔案

[root@git Gitlab-cn]#rm -rf /etc/gitlab/*/var/log/gitlab/ /var/opt/gitlab/ /opt/gitlab/

2.4 漢化

#檢視版本

[root@git .ssh]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

9.1.2

#8版本下載漢化包並漢化

[root@git hanhua]# git clonehttps://gitlab.com/larryli/gitlab.git Gitlab-cn && cd Gitlab-cn

#備份/opt/gitlab/embedded/service目錄下的gitlab-rails目錄,該目錄下的內容主要是web應用部分

#備份

[root@git Gitlab-cn]#\cp -rf/opt/gitlab/embedded/service/gitlab-rails{,.ori}

#關閉gitlab這個服務

[root@git Gitlab-cn]#gitlab-ctl stop

#開始漢化

[root@git gitlab_pack]# \cp -rf Gitlab-cn/*/opt/gitlab/embedded/service/gitlab-rails/

測試是否漢化成功

[root@git ~]# gitlab-ctl start

ok: run: gitlab-workhorse: (pid 1407) 263s

ok: run: logrotate: (pid 1403) 263s

ok: run: nginx: (pid 1404) 263s

ok: run: postgresql: (pid 1405) 263s

ok: run: redis: (pid 1402) 263s

ok: run: sidekiq: (pid 1400) 263s

ok: run: unicorn: (pid 1401) 263s

登入

http://192.168.201.131/users/sign_in

#9版本漢化

[root@gitlab ~]#gitclone https://gitlab.com/xhang/gitlab.git

Cloning into 'gitlab'...

remote: Counting objects: 496150, done.

remote: Compressing objects: 100%(103590/103590), done.

remote: Total 496150 (delta 387041), reused495906 (delta 386824)Receiving objects: 100% (496150/496150), 220.14 MiB | 2

 

Resolving deltas: 100% (387041/387041), done.

Checking out files: 100% (9254/9254), done

#更新包

[root@gitlab ~]# cd gitlab/

[root@gitlab [9-1-stable-zh ≡]# git fetch

#生成補丁,進入到gitlab目錄下

[root@gitlab gitlab]# git diff v9.1.2 v9.1.2-zh> ../9.1.2-zh.diff

#打補丁

[root@gitlab gitlab]# patch -d/opt/gitlab/embedded/service/gitlab-rails -p1 < ../9.1.2-zh.diff

2.5 Gitlab命令使用

語法:

gitlab-ctl command (subcommand)

Service Management Commands

start

啟動所有服務

stop

關閉所有服務

restart

重啟所有服務

status

檢視所有服務狀態

tail

檢視日誌資訊

service-list

列舉所有啟動服務

graceful-kill

平穩停止一個服務

例子:

#啟動所有服務

[root@gitlab ~]# gitlab-ctl start

#啟動單獨一個服務

[root@gitlab ~]# gitlab-ctl start nginx

#檢視日誌,檢視所有日誌

[root@gitlab ~]# gitlab-ctl tail

#檢視具體一個日誌,類似tail -f

[root@gitlab ~]# gitlab-ctl tail nginx

General Commands

help

幫助

reconfigure

修改配置檔案之後,需要重新載入下

show-config

檢視所有服務配置檔案資訊

uninstall

解除安裝這個軟體

cleanse

刪除gitlab資料,重新白手起家

例子:

#顯示所有服務配置檔案

[root@gitlab ~]#gitlab-ctl show-config

#解除安裝gitlab

[root@gitlab ~]#gitlab-ctl uninstall

 

DatabaseCommands(慎重使用)

Database Commands

pg-upgrade

更新postgresql版本

revert-pg-upgrade

還遠先前的(離現在正在使用靠近的版本)一個資料庫版本

例子:

#升級資料庫

[root@gitlab ~]# gitlab-ctl pg-upgrade

Checking for an omnibus managed postgresql: OK

Checking if we already upgraded: OK

The latest version 9.6.1 is already running,nothing to do

#降級資料庫版本

[root@gitlab ~]# gitlab-ctl revert-pg-upgrade

Toggling deploy page:cp/opt/gitlab/embedded/service/gitlab-rails/public/deploy.html/opt/gitlab/embedded/service/gitlab-rails/public/index.html

Toggling deploy page: OK

Toggling services:ok: down: gitaly: 129s,normally up

ok: down: gitlab-monitor: 128s, normally up

ok: down: logrotate: 127s, normally up

ok: down: node-exporter: 127s, normally up

ok: down: postgres-exporter: 126s, normally up

ok: down: prometheus: 125s, normally up

ok: down: redis-exporter: 125s, normally up

ok: down: sidekiq: 123s, normally up

Toggling services: OK

Checking if we need to downgrade: NOT OK

/var/opt/gitlab/postgresql/data.9.2.18 does notexist, cannot revert data

Will proceed with reverting the running programversion only, unless you interrupt

Reverting database to 9.2.18 in 5 seconds

=== WARNING ===

This will revert the database to what it wasbefore you upgraded, including the data.

Please hit Ctrl-C now if this isn't what youwere looking for

=== WARNING ===

== Reverting ==

ok: down: postgresql: 131s, normally up

ok: run: postgresql: (pid 12102) 0s

== Reverted ==

Toggling deploy page:rm -f/opt/gitlab/embedded/service/gitlab-rails/public/index.html

Toggling deploy page: OK

Toggling services:ok: run: gitaly: (pid 12107)1s

ok: run: gitlab-monitor: (pid 12111) 0s

ok: run: logrotate: (pid 12115) 1s

ok: run: node-exporter: (pid 12121) 0s

ok: run: postgres-exporter: (pid 12125) 0s

ok: run: prometheus: (pid 12130) 1s

ok: run: redis-exporter: (pid 12139) 0s

ok: run: sidekiq: (pid 12144) 1s

Toggling services: OK

2.6 gitlab配置詳解

名稱

配置路徑

gitlab配置檔案

/etc/gitlab/gitlab.rb

unicorn配置檔案

/var/opt/gitlab/gitlab-rails/etc/unicorn.rb

nginx配置檔案

/var/opt/gitlab/nginx/conf/gitlab-http.conf

gitlab倉庫預設位置

/var/opt/gitlab/git-data/repositories

#修改web埠

如果80和8080埠被佔用可以修改

[root@gitlabgitlab_pack]# vi /var/opt/gitlab/gitlab-rails/etc/unicorn.rb

listen"127.0.0.1:8080", :tcp_nopush => true #這一行埠修改為你要埠

#修改nginx

[root@gitlabgitlab_pack]# vi /var/opt/gitlab/nginx/conf/gitlab-http.conf

server{ #這裡的80埠修改為你所需要的埠

  listen *:80;

注:

       只要修改了配置檔案一定要重新載入配置

#修改Prometheus埠

#Prometheus預設埠是9090

[root@gitlabgitlab_pack]# vi /etc/gitlab/gitlab.rb

#根據自己情況自行修改成自己需要的port

#修改專案工程數量

預設安裝好,你能建立的專案,只能建立10個

#第一種方式修改

[root@gitlab gitlab_pack]# vi/opt/gitlab/embedded/service/gitlab-rails/config/initializers/1_settings.rb

Settings.gitlab['default_projects_limit'] ||=10

修改成你自己所需要的引數,儲存

Settings.gitlab['default_projects_limit'] ||=10000

#重新初始化

[root@gitlab postgresql]# gitlab-ctlreconfigure

#檢視修改之後專案數量

注:

       這個是在安裝完gitlab之後修改,如果已經使用一段時間,在修改專案的數量,需要你自己在自己的使用者下修改,第二次初始化,會縮短時間

#第二種方式修改

#首先登入gitlab

#點選Adminstrator這個使用者

#點選編輯

#關閉註冊功能

預設註冊功能是開啟的, 對於個人的gitlab, 沒有對外公佈的必要

#首先點選管理區域---à在點選設定按鈕

找到註冊限制

選中,然後儲存

#關閉監控

#關閉服務

[root@gitlab gitlab_pack]# gitlab-ctl stop

[root@gitlabgitlab_pack]# vi /etc/gitlab/gitlab.rb

把true改成false

prometheus_monitoring['enable']= true

prometheus_monitoring['enable']= false

#儲存

#重新載入配置檔案

[root@gitlabgitlab_pack]# gitlab-ctl reconfigure

#啟動服務

[root@gitlab gitlab_pack]# gitlab-ctl start

ok: run: gitaly: (pid 21611) 0s

ok: run: gitlab-workhorse: (pid 21615) 1s

ok: run: logrotate: (pid 21622) 0s

ok: run: nginx: (pid 21628) 1s

ok: run: postgresql: (pid 21633) 0s

ok: run: redis: (pid 21641) 0s

ok: run: sidekiq: (pid 21645) 1s

ok: run: unicorn: (pid 21648) 0s

#很顯然沒有prometheus這個服務

2.7 gitlab安全

#Custom password length limits

#初始化器的密碼長度設定為最少8個字元

[root@gitlab opt]# cd/opt/gitlab/embedded/service/gitlab-rails/config/initializers

[root@gitlab initializers]#cpdevise_password_length.rb.example devise_password_length.rb

#重啟gitlab服務

#Rack attack

為了防止濫用客戶造成損害GitLab使用機架攻擊,提供一個保護路徑

預設情況下,使用者登入,使用者註冊(如果啟用)和使用者密碼重置被限制為每分鐘6個請求。嘗試6次後,客戶端將不得不等待下一分鐘再次嘗試。

如果發現節流不足以保護您免遭濫用客戶端,機架式攻擊寶石提供IP白名單,黑名單,Fail2ban樣式過濾器和跟蹤。

[root@gitlab opt]# cd/opt/gitlab/embedded/service/gitlab-rails/config/initializers

[root@gitlab initializers]# cp rack_attack.rb.example rack_attack.rb

#編輯application.rb

[root@gitlab config]#vi/opt/gitlab/embedded/service/gitlab-rails/config/application.rb

config.middleware.use Rack::Attack

儲存

#重新啟動GitLab例項

#Information exclusivity

       Git是分散式版本控制系統(DVCS)。這意味著每個與原始碼一起工作的人都具有完整儲存庫的本地副本。在GitLab中,不是客人的所有專案成員(因此,記者,開發人員和主人)都可以克隆資料庫以獲取本地副本。獲取本地副本後,使用者可以隨時上傳完整的儲存庫,包括其控制下的另一個專案或其他伺服器。結果是您無法構建訪問控制,阻止有權訪問原始碼的使用者有意共享原始碼。這是DVCS的固有特性,所有git管理系統都有這個限制。很明顯,你可以採取措施,防止意外分享和破壞資訊,這就是為什麼只有一些人被允許邀請他人,沒有人可以強制推行一個受保護的分支機構。

#How to reset your root password

[root@gitlab config]# gitlab-railsconsole production

Loading production environment (Rails 4.2.8)

irb(main):001:0> user = User.where(id: 1).first#檢視資訊

=> #<User id: 1, email: "admin@example.com",created_at: "2017-05-16 09:04:59", updated_at: "2017-05-1707:18:16", name: "Administrator", admin: true, projects_limit:100000, skype: "", linkedin: "", twitter: "",authentication_token: "k44aWyAaaaJaHYx4B_QP", bio: nil, username:"root", can_create_group: true, can_create_team: false, state:"active", color_scheme_id: 1, password_expires_at: nil,created_by_id: nil, last_credential_check_at: nil, avatar: nil,hide_no_ssh_key: false, website_url: "", notification_email:"admin@example.com", hide_no_password: false, password_automatically_set:false, location: nil, encrypted_otp_secret: nil, encrypted_otp_secret_iv: nil,encrypted_otp_secret_salt: nil, otp_required_for_login: false,otp_backup_codes: nil, public_email: "", dashboard: 0, project_view:2, consumed_timestep: nil, layout: 0, hide_project_limit: false,otp_grace_period_started_at: nil, ldap_email: false, external: false,incoming_email_token: "9wt82lanyjoakil3asrhfevvh", organization: nil,authorized_projects_populated: true, ghost: nil, last_activity_on: nil, notified_of_own_activity:false, require_two_factor_authentication_from_group: false,two_factor_grace_period: 48>

irb(main):002:0> user.password = 'admin123' #設定新的密碼

=> "admin123"

irb(main):003:0> user.password_confirmation = 'admin123' #驗證密碼

=> "admin123"

irb(main):004:0> user.save! #儲存密碼

Enqueued ActionMailer::DeliveryJob (Job ID:b2ba5d30-853c-405d-8d95-fa938d88f32c) to Sidekiq(mailers) with arguments:"DeviseMailer", "password_change", "deliver_now",gid://gitlab/User/1

=> true

irb(main):005:0> #ctrl+d退出

#User email confirmation at sign-up

       如果您想在所有使用者電子郵件登入之前確認,Gitlab管理員可以在註冊時啟用電子郵件確認。

2.8 gitlab叢集

 

2.9 GitLab Runner 構建任務

官方:https://docs.gitlab.com/runner/

#簡介

GitLab Runner是用於執行作業並將結果傳送回GitLab的開源專案。它與GitLab CI結合使用,GitLab CI是GitLab中協調工作的開源連續整合服務。

#Requirements

GitLab Runner是用Go編寫的,可以作為一個二進位制檔案執行,不需要任何語言特定的要求。它被設計為在GNU / Linux,macOS和Windows作業系統上執行。只要您可以編譯一個Go二進位制檔案,其他作業系統就可能會工作。

#Features

Allows to run

  • multiple jobs concurrently(多個工作同時進行)
  • use multiple tokens with multiple server (even per-project)( 使用多個令牌與多個伺服器(甚至每個專案))
  • limit number of concurrent jobs per-token(限制每個令牌的併發作業數)

Jobs can be run

  • locally(本地)
  • using Docker containers(使用Docker容器)
  • using Docker containers and executing job over SSH(使用Docker容器並通過SSH執行作業)
  • using Docker containers with autoscaling on different clouds and virtualization hypervisors(使用Docker容器在不同的雲和虛擬化管理程式上進行自動縮放)
  • connecting to remote SSH server(連線到遠端SSH伺服器)

#安裝

#安裝gitlab-ci-multi-runner

[root@gitlab ~]#curl -Lhttps://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh| sudo bash

#安裝

[root@gitlab ~]#yum installgitlab-ci-multi-runner

#gitlab-runner使用

必須是在8版本以上才能使用這個整合功能

https://docs.gitlab.com/runner/commands/README.html

語法

gitlab-runner

[root@gitlab ~]# gitlab-runner --help

USAGE:

   gitlab-runner[global options] command [command options] [arguments...]

COMMANDS

名稱

作用

exec

顯示runner配置檔案

list

 

run

執行多個runner服務

register

註冊一個新的runner

install

安裝服務

uninstall

解除安裝服務

start

啟動一個服務

stop

停止一個服務

restart

重啟

status

一個服務狀態

run-single

執行單獨的一個runner

unregister

登出特定的runner

verify

驗證所有註冊的runner

artifacts-downloader    downloadand extract build artifacts (internal)

  artifacts-uploader   create andupload build artifacts (internal)

  cache-archiver  create and uploadcache artifacts (internal)

  cache-extractor       download andextract cache artifacts (internal)

例子

#list

[root@gitlab ~]# gitlab-runner list

Listing configured runners                         ConfigFile=/etc/gitlab-runner/config.toml

#debug

[root@gitlab ~]# gitlab-runner --debug  list

Runtime platform                                    arch=amd64 os=linuxrevision=0118d89 version=9.1.0

Listing configured runners                         ConfigFile=/etc/gitlab-runner/config.toml

gitlab-ci-multi-runner

[root@gitlab gitlab]# gitlab-ci-multi-runnerregister --help

 

Runner型別

GitLab-Runner可以分類兩種型別:

Shared Runner(共享型)

Specific Runner(指定型)。

Shared Runner

這種Runner(工人)是所有工程都能夠用的。只有系統管理員能夠建立Shared Runner。

Specific Runner

這種Runner(工人)只能為指定的工程服務。擁有該工程訪問許可權的人都能夠為該工程建立Shared Runner。

註冊runner

1,copy 註冊授權碼

2,register

安裝好gitlab-ci-multi-runner這個軟體之後,我們就可以用它向GitLab-CI註冊Runner了。

向GitLab-CI註冊一個Runner需要兩樣東西:GitLab-CI的url和註冊token。

其中,token是為了確定你這個Runner是所有工程都能夠使用的Shared Runner還是具體某一個工程才能使用的Specific Runner

#檢視register幫助

[root@gitlab gitlab]# gitlab-ci-multi-runnerregister --help

 

#註冊Shared Runner

在註冊Runner的時候,需要填入Token,GitLab根據不同的Token確定這個Runner是被設定為Shared Runner還是Specific Runner

 

[root@gitlab gitlab]# gitlab-ci-multi-runnerregister

Running in system-mode.                           

                                                  

Please enter the gitlab-ci coordinator URL(e.g. https://gitlab.com/):

http://192.168.201.148/ci#輸入ci

Please enter the gitlab-ci token for thisrunner:

2RBdZavdy6UsZvbyCcMF#註冊授權碼

Please enter the gitlab-ci description for thisrunner:

[gitlab.server.com]: test_runner #描述

Please enter the gitlab-ci tags for this runner(comma separated):

hello_tom #寫個標籤,可以多個,用逗號隔開

Whether to run untagged builds [true/false]:

[false]: #輸入回車   

Whether to lock Runner to current project[true/false]:

[false]: #輸入回車

Registering runner... succeeded                     runner=2RBdZavd

Please enter the executor: virtualbox, docker-ssh+machine,kubernetes, parallels, shell, ssh, docker+machine, docker, docker-ssh:

shell #輸入選擇通訊方式

Runner registered successfully. Feel free tostart it, but if it's running already the config should be automaticallyreloaded!

#檢視服務是否執行

[root@gitlab gitlab]# ps -ef|grep runner

root      7998      1  0 13:09 ?        00:00:02/usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config/etc/gitlab-runner/config.toml --service gitlab-runner --syslog --usergitlab-runner

注意

如果不執行gitlab-ci-multi-runner register命令,直接在配置檔案裡面新增Runner的配置資訊可以嗎

當然不行。因為gitlab-ci-multi-runner register的作用除了把Runner的資訊儲存到配置檔案以外,還有一個很重要的作用,那就是向GitLab-CI發出請求,在GitLab-CI中登記這個Runner的資訊並且獲取後續通訊所需要的token。

3,檢視register

登陸

http://my_url/admin/runners

#檢視gitlab-runner配置檔案

[root@gitlab ~]# cat/etc/gitlab-runner/config.toml

concurrent = 1

check_interval = 0

 

[[runners]]

  name ="test_ci"

  url ="http://192.168.201.148/ci"

  token ="c6f62fe5a2b4ec072f5cc2fb096c02"

 executor = "shell"

 [runners.cache]

 

4,執行runner

       要讓一個Runner執行起來,--url、--token和--executor選項是必要的.

[root@gitlab gitlab]# gitlab-ci-multi-runnerrun-single --help

[root@gitlab ~]# gitlab-ci-multi-runner install--user=gitlab-runner --working-directory=/home/gitlab-runner

[root@gitlab ~]# gitlab-ci-multi-runner status

gitlab-runner: Service is running!

[root@gitlab test]# gitlab-ci-multi-runner list

Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml

popop                                              Executor=shell Token=8bfcd3b988ae348111b5500a355273URL=http://192.168.201.149/ci

5,yaml

https://docs.gitlab.com/ee/ci/yaml/README.html

從7.12版本開始,GitLab CI使用YAML 檔案(.gitlab-ci.yml)來配置project's builds

.gitlab-ci.yml 使用YAML語法, 需要格外注意縮排格式,要用空格來縮排,不能用tabs來縮排。

6,實戰

 

3.0 實戰測試

http客戶端測試

#建立測試目錄

[root@client ~]# mkdir test2

[root@client ~]# cd test2

#把伺服器的上倉庫clone下來

[root@cleint test2]# git clone http://gitlab.server.com/root/test.git

Cloning into 'test'...

warning: You appear to have cloned an emptyrepository.

Checking connectivity... done.

或者

[root@cleint test2]# git clone http://gitlab.server.com/root/test.git

Username for 'http://git.server.com':root

Password for 'http://root@git.server.com':adminroot

Counting objects: 3, done.

Writing objects: 100% (3/3), 216 bytes | 0bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To http://git.server.com/root/go.git

 * [newbranch]      master -> master

Branch master set up to track remote branchmaster from origin.

[root@git test2]# ls

test

#配置使用者

[root@cleint test2]# git config --globaluser.name "Administrator"

[root@client test2]# git config --globaluser.email "admin@example.com"

[root@client test2]# cd test/

#建立檔案

[root@client test]# touch README.md

[root@client test]# vi README.md

[root@client test]# git add README.md

[root@client test]# git commit -m "addREADME"

[master (root-commit) 874889b] add README

 1 filechanged, 1 insertion(+)

 createmode 100644 README.md

#push

[root@client test]# git push -u origin master

Username for 'http://git.server.com': root

Password for 'http://root@gitlab.server.com': adminroot

Counting objects: 3, done.

Writing objects: 100% (3/3), 223 bytes | 0bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To http://git.server.com/root/test.git

 * [newbranch]      master -> master

Branch master set up to track remote branchmaster from origin.

從web上檢視test倉庫下是否上傳了README.md這個檔案

#檢視是否成功

上傳成功

ssh客戶端測試

#生成公鑰

[root@node6 .ssh]# ssh-keygen 

Generating public/private rsa key pair.

Enter file in which to save the key(/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in/root/.ssh/id_rsa.

Your public key has been saved in/root/.ssh/id_rsa.pub.

The key fingerprint is:

d9:0d:43:2b:17:cc:3b:01:fa:c9:cb:2c:6e:b7:27:6droot@node6

The key's randomart image is:

+--[ RSA 2048]----+

|       .+o      |

|       ..+o     |

|      .. =o     |

|       o*o+     |

|       S ...    |

|       o.       |

|      .+.       |

|    ...o E      |

|    ....=       |

+-----------------+

[root@node6 .ssh]#

[root@node6 .ssh]# ls

id_rsa id_rsa.pub

[root@node6 .ssh]# cat id_rsa.pub

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAoOLsYhPPlHPOnGh6SoVDPlVn2o8rfO55J60Gz7E0EDB0ugKgTu4VGOE8vVta7HH5exNAjw2UqHIliYcmVvrj5eFbvXLdLYGypiMfuP4H7dVwGXfxSzeG17aIbZma0fpB2bTQr3tN+nVA7tokVSmO+jC61/H6Qj9G1TEiedq0wtTuSQ8pza5hyeWRO9oi0W7ccZkYg7lSQ3Eo2n2/RJbmQHWdIcoBO8c64h5vq/gB1s7ZjHKUjSFvGTyHu7uYE6yD2PXylavLfq2FHUc4syV8yAvyW2ehgIcc+xDWMFC85SNuPvTOt0YNzG628gWB2lm+D8CPhZBUbz2IUkFN0jEdyQ==root@node6

#新增域名(如果是真實的域名,這步不需要做)

[root@node6 .ssh]# vi /etc/hosts

192.168.201.131 git.server.com

#新增到gitlab

#測試ssh是否可用

[root@node6 .ssh]# ssh -T git@gitlab.server.com

The authenticity of host 'git.server.com(192.168.201.134)' can't be established.

RSA key fingerprint is45:1f:76:55:cb:72:fe:65:22:75:10:eb:d5:2e:35:d5.

Are you sure you want to continue connecting(yes/no)?yes

Warning: Permanently added'git.server.com,192.168.201.134' (RSA) to the list of known hosts.

Welcome to GitLab, Administrator!

證明成功

#克隆資料

[root@node6 .ssh]# git clone git@gitlab.server.com:root/test.git

Initialized empty Git repository in/root/.ssh/test/.git/

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), 223 bytes, done

Gitlab-runner

在建立register之前,需要拿到token和ci地址

1,找到你要register的專案地址

2,進入到這個專案

3,點選設定

4,點選pipline,檢視token和ci

#register

[root@gitlab test]# gitlab-ci-multi-runnerregister

#檢視register

登陸

http://my_url/admin/runners

#檢視gitlab-runner配置檔案

[root@gitlab ~]# cat/etc/gitlab-runner/config.toml

concurrent = 1

check_interval = 0

 

[[runners]]

  name ="test_ci"

  url ="http://192.168.201.148/ci"

  token ="c6f62fe5a2b4ec072f5cc2fb096c02"

 executor = "shell"

 [runners.cache]

#配置pipline

1,開啟runner

2,編輯runner

#clone倉庫

[root@gitlab test]# git clone http://root@gitlab.server.com/root/test.git

[root@gitlab test]#cd test

#建立gitlab-ci.yml檔案

[root@gitlab test]# cat .gitlab-ci.yml

stages:

  - test

job1:

  stage:test

  script:

    -echo "I am job1"

- echo "I am intest stage"

#上傳到gitlab倉庫中

[root@gitlab test]# git add .gitlab-ci.yml

[root@gitlab test]# git commit -m"kskksksk"

[master 9376c70] kskksksk

 1 filechanged, 1 insertion(+), 1 deletion(-)

[root@gitlab test]# git push origin master

Password for 'http://root@gitlab.server.com':

Counting objects: 5, done.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 363 bytes | 0bytes/s, done.

Total 3 (delta 1), reused 0 (delta 0)

To http://root@gitlab.server.com/root/test.git

  df0b7b4..9376c70  master ->master

#檢視效果

#點選passwd

相關文章