手把手教你 GitLab 的安裝及使用

前言

新入職公司,發(fā)現(xiàn)公司還在使用落后生產(chǎn)工具 svn赃承,由于重度使用過 svn 和 git ,知道這兩個工具之間的差異,已經(jīng)在使用 git 的路上越走越遠碾篡。
于是,跟上級強烈建議讓我在公司推行 git 和他的私有倉庫 gitlab筏餐,多次安利“磨刀不誤砍柴工”的理念开泽,終于被我說服。
以下是我邊安裝和邊記錄的詳細筆記魁瞪,務(wù)求安裝好之后分享給同事直接就能看懂穆律,降低團隊的學習成本。

git的優(yōu)點

  1. git是分布式的导俘,svn不是
    git分布式本地就可以用峦耘,可以隨便保存各種歷史痕跡,不用擔心污染服務(wù)器旅薄,連不上服務(wù)器也能提交代碼辅髓、查看log。
  2. GIT分支和SVN的分支不同
    分支在SVN中實際上是版本庫中的一份copy少梁,而git一個倉庫是一個快照洛口,所以git 切換、合并分支等操作更快速凯沪。
  3. git有一個強大的代碼倉庫管理系統(tǒng) - gitlab
    可以很方便的管理權(quán)限第焰、代碼review,創(chuàng)建妨马、管理project

GitLab介紹

GitLab:是一個基于Git實現(xiàn)的在線代碼倉庫托管軟件挺举,你可以用gitlab自己搭建一個類似于Github一樣的系統(tǒng),一般用于在企業(yè)烘跺、學校等內(nèi)部網(wǎng)絡(luò)搭建git私服湘纵。
功能:Gitlab 是一個提供代碼托管、提交審核和問題跟蹤的代碼管理平臺液荸。對于軟件工程質(zhì)量管理非常重要瞻佛。
版本:GitLab 分為社區(qū)版(CE) 和企業(yè)版(EE)。
配置:建議CPU2核娇钱,內(nèi)存2G以上伤柄。

Gitlab的服務(wù)構(gòu)成:

Nginx:靜態(tài)web服務(wù)器。
gitlab-shell:用于處理Git命令和修改authorized keys列表文搂。(Ruby)
gitlab-workhorse: 輕量級的反向代理服務(wù)器适刀。(go)

GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求煤蹭,比如文件上傳笔喉、文件下載取视、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應(yīng)用常挚,即反向代理給后端的unicorn作谭。

logrotate:日志文件管理工具。
postgresql:數(shù)據(jù)庫奄毡。
redis:緩存數(shù)據(jù)庫折欠。
sidekiq:用于在后臺執(zhí)行隊列任務(wù)(異步執(zhí)行)。(Ruby)
unicorn:An HTTP server for Rack applications吼过,GitLab Rails應(yīng)用是托管在這個服務(wù)器上面的锐秦。(Ruby Web Server,主要使用Ruby編寫)

GitLab安裝

1.源碼安裝

2.yum安裝

官方源地址:https://about.gitlab.com/downloads/#centos6
清華大學鏡像源:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce

新建 /etc/yum.repos.d/gitlab_gitlab-ce.repo,內(nèi)容為:

    [gitlab-ce]
    name=Gitlab CE Repository
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
    gpgcheck=0
    enabled=1

安裝依賴

    sudo yum install curl openssh-server openssh-clients postfix cronie
    sudo service postfix start
    sudo chkconfig postfix on
    #這句是用來做防火墻的盗忱,避免用戶通過ssh方式和http來訪問酱床。
    sudo lokkit -s http -s ssh

再執(zhí)行

    sudo yum makecache
    sudo yum install gitlab-ce
    sudo gitlab-ctl reconfigure  #Configure and start GitLab

配置域名: vim /var/opt/gitlab/nginx/conf/gitlab-http.conf

    # 外網(wǎng)訪問的端口,如果服務(wù)器已經(jīng)有服務(wù)器占用了80趟佃,那么這里可以改成其它
    listen *:8888;
    server_name gitlab.test.domain.com;

    set $http_host_with_default "gitlab.test.domain.com:8888";

補充說明:因為編譯gitlab的配置 /etc/gitlab/gitlab.rb 時會重新生成這個自定義nginx 配置扇谣,所以只要 gitlab 的配置配得好,上面的nginx其實不需要自定義的揖闸。

修改密碼

    gitlab-rails console production
    user = User.where(id:1).first
    user.password='123456'
    user.save!

GitLab備份和恢復

備份

    # 可以將此命令寫入crontab揍堕,以實現(xiàn)定時備份
    /usr/bin/gitlab-rake gitlab:backup:create

備份的數(shù)據(jù)會存儲在/var/opt/gitlab/backups,用戶通過自定義參數(shù) gitlab_rails['backup_path']汤纸,改變默認值衩茸。

恢復

    # 停止unicorn和sidekiq,保證數(shù)據(jù)庫沒有新的連接贮泞,不會有寫數(shù)據(jù)情況
    sudo gitlab-ctl stop unicorn
    sudo gitlab-ctl stop sidekiq

    # 進入備份目錄進行恢復楞慈,1476900742為備份文件的時間戳
    cd /var/opt/gitlab/backups
    gitlab-rake gitlab:backup:restore BACKUP=1476900742
    cd -

    # 啟動unicorn和sidekiq
    sudo gitlab-ctl start unicorn
    sudo gitlab-ctl start sidekiq

GitLab配置文件修改

    vim /etc/gitlab/gitlab.rb

gitlab基本配置:

    #外部訪問url(經(jīng)過編譯后,自動將這個配置編譯到nginx配置啃擦,nginx就無需配置了)
    external_url 'http://gitlab.test.domain.com:8888'
    #默認值就是8080囊蓝。如果端口被占用,可將8080修改為其它(例如:9090)
    unicorn['port'] = 8080

gitlab發(fā)送郵件配置

    gitlab_rails['smtp_enable'] = true  
    gitlab_rails['smtp_address'] = “smtp.exmail.qq.com”  
    gitlab_rails['smtp_port'] = 25  
    gitlab_rails['smtp_user_name'] = “huangdc@domain.com“  
    gitlab_rails['smtp_password'] = "smtp password"  
    gitlab_rails['smtp_authentication']= “plain"  
    gitlab_rails['smtp_enable_starttls_auto']= true  
    gitlab_rails['gitlab_email_from']= 'huangdc@domain.com'  
    gitlab_rails['gitlab_email_reply_to']= ‘noreply@domain.com'  

服務(wù)器修改過ssh端口的坑(需要修改配置ssh端口)

    #修改過ssh端口令蛉,gitlab中項目的的ssh地址聚霜,會在前面加上協(xié)議頭和端口號“ssh://git@gitlab.domain.com:55725/huangdc/test.git”
    gitlab_rails['gitlab_shell_ssh_port'] = 55725

配置生效

    #使配置生效
    gitlab-ctl reconfigure
    #重新啟動GitLab 
    gitlab-ctl restart

GitLab常用命令

    gitlab-ctl start    # 啟動所有 gitlab 組件;
    gitlab-ctl stop        # 停止所有 gitlab 組件珠叔;
    gitlab-ctl restart        # 重啟所有 gitlab 組件蝎宇;
    gitlab-ctl status        # 查看服務(wù)狀態(tài);
    vim /etc/gitlab/gitlab.rb        # 修改gitlab配置文件祷安;
    gitlab-ctl reconfigure        # 重新編譯gitlab的配置姥芥;
    gitlab-rake gitlab:check SANITIZE=true --trace    # 檢查gitlab;
    gitlab-ctl tail        # 查看日志汇鞭;
    gitlab-ctl tail nginx/gitlab_access.log

注意:執(zhí)行 reconfigure 命令會把gitlab的nginx組件的配置還原凉唐,導致自定義修改的端口以及域名等都沒有了庸追。

常用目錄

    日志地址:/var/log/gitlab/   # 對應(yīng)各服務(wù)的打印日志 
    服務(wù)地址:/var/opt/gitlab/   # 對應(yīng)各服務(wù)的主目錄 

查看gitlab版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

新建項目

使用root用戶登錄進gitlab會后,點擊“new project“創(chuàng)建一個項目台囱,比如項目命名為“kuaijiFirstProject”淡溯。
然后會發(fā)現(xiàn),硬盤上已經(jīng)生成了一個git文件:

    /var/opt/gitlab/git-data/repositories/root/kuaijiFirstProject.git

漢化

https://gitlab.com/xhang/gitlab.git

gitlab的使用

    ssh -T -p 55725 git@gitlab.domain.com

注意:<fornt style="color:red">以上這條 ssh 命令測試通過玄坦,未必代表就能 git clone 代碼血筑,git clone 代碼需要執(zhí)行命令的賬戶有寫權(quán)限,如果是普通用戶用 sudo git clone 那么 git 就會使用的 root 賬號的 Private Key煎楣。 </fornt>

1.登錄

管理員會為使用者開通賬號并設(shè)置權(quán)限。

2.使用者在客戶端生成ssh key

參考文章: http://www.reibang.com/p/142b3dc8ae15

    ssh-keygen -t rsa -C "huangdc@domain.com"

3.將公鑰的內(nèi)容copy到gitlab用戶設(shè)置里面的“SSH Keys”

Windows: clip < ~/.ssh/id_rsa.pub
Mac: pbcopy < ~/.ssh/id_rsa.pub
GNU/Linux (requires xclip): xclip -sel clip < ~/.ssh/id_rsa.pub

4.測試ssh連接

#標準測試代碼:ssh -T git@gitlab.com
ssh -T -p 55725 git@gitlab.domain.com  #修改過端口號的測試代碼

如果連接成功的話车伞,會出現(xiàn)以下信息:

    Welcome to GitLab, huangdc!

說明:實際上執(zhí)行這條ssh命令择懂,所使用的遠程服務(wù)器的用戶是git,這個用戶是在安裝gitlab的時候生成的另玖,所有使用gitlab服務(wù)器的ssh客戶端困曙,都是使用git這個用戶。在這里的用戶“huangdc”是通過gitlab創(chuàng)建的谦去,是用于gitlab的權(quán)限管理慷丽,也用作標識提交代碼的開發(fā)者信息,不要跟ssh的用戶混淆了鳄哭。

如何使用多個SSH公鑰(自己電腦在使用多個代碼倉庫)

原理其實是:因為每個倉庫都需要 ssh 連接要糊,而 ssh 命令默認是使用 .ssh 目錄下面的私鑰去連接代碼倉庫,所以我們可以在 .ssh/config 目錄里面針對不同的倉庫域名重定義它的私鑰妆丘。

例子如下:

編輯文件: vim /Users/david/.ssh/config

    Host            gitlab.domain.com    
    IdentityFile    /Users/david/.ssh/id_rsa    

命令行環(huán)境下初始化項目

  1. 首先在 gitlab 上面創(chuàng)建一個空的代碼倉庫锄俄,得到倉庫地址如下:
    ssh://git@gitlab.domain.com:55725/huangdc/test.git

  1. 在本地初始化倉庫、提交代碼勺拣、推送到遠程 master 分支奶赠。
    git clone ssh://git@gitlab.domain.com:55725/huangdc/test.git  
    cd test  
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master

命令行環(huán)境下遷移舊的項目

  1. 首先在 gitlab 上面創(chuàng)建一個空的代碼倉庫,得到倉庫地址如下:
    #注意:已存在代碼的舊項目只能推送到空的遠程代碼倉庫
    ssh://git@gitlab.domain.com:55725/dev/memberApi.git     

  1. 本地初始化項目药有、關(guān)聯(lián)遠程倉庫毅戈、推送到遠程倉庫
 cd /Users/david/work_www/memberApi
 git init
 git remote add origin ssh://git@gitlab.domain.com:55725/dev/memberApi.git
 git push -u origin master

SourceTree的安裝和打開

  1. 官網(wǎng)下載鏈接:https://www.sourcetreeapp.com/
  2. 打開SourceTree之后,需要登錄Atlassian賬號來激活SourceTree愤惰∥可以使用Google賬號直接關(guān)聯(lián)登錄。
  3. 登錄后還需要一些設(shè)置羊苟,以最簡單的方式跳過就行塑陵。

Git Flow

http://flc.ren/2015/12/381.html

備注

這篇文章主要記錄如何安裝和使用 GitLab ,晚點再分享一篇講解分支模型策略的文章蜡励。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末令花,一起剝皮案震驚了整個濱河市阻桅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兼都,老刑警劉巖嫂沉,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扮碧,居然都是意外死亡趟章,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門慎王,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚓土,“玉大人,你說我怎么就攤上這事赖淤∈衿幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵咱旱,是天一觀的道長确丢。 經(jīng)常有香客問我,道長吐限,這世上最難降的妖魔是什么鲜侥? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诸典,結(jié)果婚禮上描函,老公的妹妹穿的比我還像新娘。我一直安慰自己搂赋,他們只是感情好赘阀,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脑奠,像睡著了一般基公。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宋欺,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天轰豆,我揣著相機與錄音,去河邊找鬼齿诞。 笑死酸休,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的祷杈。 我是一名探鬼主播斑司,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼但汞!你這毒婦竟也來了宿刮?” 一聲冷哼從身側(cè)響起互站,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎僵缺,沒想到半個月后胡桃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡磕潮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年翠胰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片自脯。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡之景,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膏潮,到底是詐尸還是另有隱情闺兢,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布戏罢,位于F島的核電站,受9級特大地震影響脚囊,放射性物質(zhì)發(fā)生泄漏龟糕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一悔耘、第九天 我趴在偏房一處隱蔽的房頂上張望讲岁。 院中可真熱鬧,春花似錦衬以、人聲如沸缓艳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阶淘。三九已至,卻和暖如春互妓,著一層夾襖步出監(jiān)牢的瞬間溪窒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工冯勉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澈蚌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓灼狰,卻偏偏與公主長得像宛瞄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子交胚,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容