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

前言

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

git的優(yōu)點

  1. git是分布式的,svn不是
    git分布式本地就可以用抚芦,可以隨便保存各種歷史痕跡倍谜,不用擔心污染服務器迈螟,連不上服務器也能提交代碼、查看log尔崔。
  2. GIT分支和SVN的分支不同
    分支在SVN中實際上是版本庫中的一份copy答毫,而git一個倉庫是一個快照,所以git 切換季春、合并分支等操作更快速洗搂。
  3. git有一個強大的代碼倉庫管理系統(tǒng) - gitlab
    可以很方便的管理權限、代碼review载弄,創(chuàng)建耘拇、管理project

GitLab介紹

GitLab:是一個基于Git實現(xiàn)的在線代碼倉庫托管軟件,你可以用gitlab自己搭建一個類似于Github一樣的系統(tǒng)宇攻,一般用于在企業(yè)惫叛、學校等內(nèi)部網(wǎng)絡搭建git私服。
功能:Gitlab 是一個提供代碼托管尺碰、提交審核和問題跟蹤的代碼管理平臺。對于軟件工程質(zhì)量管理非常重要译隘。
版本:GitLab 分為社區(qū)版(CE) 和企業(yè)版(EE)亲桥。
配置:建議CPU2核,內(nèi)存2G以上固耘。

Gitlab的服務構成:

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

GitLab Workhorse是一個敏捷的反向代理番枚。它會處理一些大的HTTP請求,比如文件上傳损敷、文件下載葫笼、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用拗馒,即反向代理給后端的unicorn路星。

logrotate:日志文件管理工具。
postgresql:數(shù)據(jù)庫诱桂。
redis:緩存數(shù)據(jù)庫洋丐。
sidekiq:用于在后臺執(zhí)行隊列任務(異步執(zhí)行)。(Ruby)
unicorn:An HTTP server for Rack applications挥等,GitLab Rails應用是托管在這個服務器上面的友绝。(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)訪問的端口郭宝,如果服務器已經(jīng)有服務器占用了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'  

服務器修改過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        # 查看服務狀態(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/   # 對應各服務的打印日志 
    服務地址:/var/opt/gitlab/   # 對應各服務的主目錄 

查看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í)行命令的賬戶有寫權限,如果是普通用戶用 sudo git clone 那么 git 就會使用的 root 賬號的 Private Key栈虚。 </fornt>

1.登錄

管理員會為使用者開通賬號并設置權限袖外。

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

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

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

3.將公鑰的內(nèi)容copy到gitlab用戶設置里面的“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命令魂务,所使用的遠程服務器的用戶是git曼验,這個用戶是在安裝gitlab的時候生成的泌射,所有使用gitlab服務器的ssh客戶端,都是使用git這個用戶鬓照。在這里的用戶“huangdc”是通過gitlab創(chuàng)建的熔酷,是用于gitlab的權限管理,也用作標識提交代碼的開發(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. 本地初始化項目园匹、關聯(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賬號直接關聯(lián)登錄浑此。
  3. 登錄后還需要一些設置累颂,以最簡單的方式跳過就行滞详。

Git Flow

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

備注

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

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末料饥,一起剝皮案震驚了整個濱河市蒲犬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岸啡,老刑警劉巖原叮,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巡蘸,居然都是意外死亡奋隶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門悦荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唯欣,“玉大人,你說我怎么就攤上這事搬味【城猓” “怎么了蟀拷?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長萍聊。 經(jīng)常有香客問我问芬,道長,這世上最難降的妖魔是什么寿桨? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任此衅,我火速辦了婚禮,結果婚禮上牛隅,老公的妹妹穿的比我還像新娘炕柔。我一直安慰自己,他們只是感情好媒佣,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布匕累。 她就那樣靜靜地躺著,像睡著了一般默伍。 火紅的嫁衣襯著肌膚如雪欢嘿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天也糊,我揣著相機與錄音炼蹦,去河邊找鬼。 笑死狸剃,一個胖子當著我的面吹牛掐隐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞馁,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虑省,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了僧凰?” 一聲冷哼從身側響起探颈,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎训措,沒想到半個月后伪节,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绩鸣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年怀大,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀闻。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡化借,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出总珠,到底是詐尸還是另有隱情屏鳍,我是刑警寧澤勘纯,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钓瞭,受9級特大地震影響驳遵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜山涡,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一堤结、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸭丛,春花似錦竞穷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熟菲,卻和暖如春看政,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抄罕。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工允蚣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呆贿。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓嚷兔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親做入。 傳聞我的和親對象是個殘疾皇子冒晰,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)母蛛,斷路器翩剪,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 一:Git是什么乳怎? Git是目前世界上最先進的分布式版本控制系統(tǒng)彩郊。 二:SVN與Git的最主要的區(qū)別? SVN是集...
    像敏銳的狗閱讀 946評論 0 0
  • 昨天和兩位朋友一起參加了菩提心讀書會,大家共同學習了濟群法師的文章《生命的美容》询枚,12位參與者輪流讀一段文章违帆,然后...
    了凡工作室閱讀 855評論 0 0
  • 非愿似愿愿非愿, 有緣無緣緣自緣金蜀, 由衷祝福由衷醉刷后, 相知淚也歡……
    陳五道閱讀 192評論 0 1