1. 程式人生 > >GitLab在centos7上安裝和使用

GitLab在centos7上安裝和使用

git的優點

  1. git是分散式的,svn不是
    git分散式本地就可以用,可以隨便儲存各種歷史痕跡,不用擔心汙染伺服器,連不上伺服器也能提交程式碼、檢視log。
  2. GIT分支和SVN的分支不同
    分支在SVN中實際上是版本庫中的一份copy,而git一個倉庫是一個快照,所以git 切換、合併分支等操作更快速。
  3. git有一個強大的程式碼倉庫管理系統 - gitlab
    可以很方便的管理許可權、程式碼review,建立、管理project

GitLab介紹

GitLab:是一個基於Git實現的線上程式碼倉庫託管軟體,你可以用gitlab自己搭建一個類似於Github一樣的系統,一般用於在企業、學校等內部網路搭建git私服。
功能:Gitlab 是一個提供程式碼託管、提交稽核和問題跟蹤的程式碼管理平臺。對於軟體工程質量管理非常重要。
版本:GitLab 分為社群版(CE) 和企業版(EE)。
配置:建議CPU2核,記憶體2G以上。

Gitlab的服務構成:

Nginx:靜態web伺服器。
gitlab-shell:用於處理Git命令和修改authorized keys列表。(Ruby)
gitlab-workhorse: 輕量級的反向代理伺服器。(go)

GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求,比如檔案上傳、檔案下載、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應用,即反向代理給後端的unicorn。

logrotate:日誌檔案管理工具。
postgresql:資料庫。
redis:快取資料庫。
sidekiq:用於在後臺執行佇列任務(非同步執行)。(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,內容為:

    [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

  注:sudo lokkit -s http -s ssh 會提示無法找到lokkit命令,這個時候需要手動安裝,安裝的命令如下: yum install lokkit,lokkit 可以幫助我們設定iptables 開啟http和ssh。

再執行

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

注:
sudo yum makecache 將伺服器上的軟體包資訊 先在本地快取,以提高 搜尋 安裝軟體的速度

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

    # 外網訪問的埠,如果伺服器已經有伺服器佔用了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!
quit

注:一行一行執行

GitLab備份和恢復

備份

    # 可以將此命令寫入crontab,以實現定時備份
    /usr/bin/gitlab-rake gitlab:backup:create
    

備份的資料會儲存在/var/opt/gitlab/backups,使用者通過自定義引數 gitlab_rails['backup_path'],改變預設值。

恢復

    # 停止unicorn和sidekiq,保證資料庫沒有新的連線,不會有寫資料情況
    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(經過編譯後,自動將這個配置編譯到nginx配置,nginx就無需配置了)
    external_url 'http://gitlab.test.domain.com:8888'
    #預設值就是8080。如果埠被佔用,可將8080修改為其它(例如:9090)
    unicorn['port'] = 8080

gitlab傳送郵件配置

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

伺服器修改過ssh埠的坑(需要修改配置ssh埠)

    #修改過ssh埠,gitlab中專案的的ssh地址,會在前面加上協議頭和埠號“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        # 檢視服務狀態;
    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 

注意:執行 reconfigure 命令會把gitlab的nginx元件的配置還原,導致自定義修改的埠以及域名等都沒有了。

常用目錄

    日誌地址:/var/log/gitlab/   # 對應各服務的列印日誌 
    服務地址:/var/opt/gitlab/   # 對應各服務的主目錄 

檢視gitlab版本

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

新建專案

使用root使用者登入進gitlab會後,點選“new project“建立一個專案,比如專案命名為“kuaijiFirstProject”。
然後會發現,硬碟上已經生成了一個git檔案:

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

漢化

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

 

--------------------------------------------------------------------------------------------------------

以下跟安裝步驟無關

 

gitlab的使用

    ssh -T -p 55725 [email protected]gitlab.domain.com 

注意:<fornt style="color:red">以上這條 ssh 命令測試通過,未必代表就能 git clone 程式碼,git clone 程式碼需要執行命令的賬戶有寫許可權,如果是普通使用者用 sudo git clone 那麼 git 就會使用的 root 賬號的 Private Key。 </fornt>

1.登入

管理員會為使用者開通賬號並設定許可權。

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

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

    ssh-keygen -t rsa -C "[email protected]domain.com" 

3.將公鑰的內容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 [email protected]  #修改過埠號的測試程式碼

如果連線成功的話,會出現以下資訊:

    Welcome to GitLab, huangdc!

說明:實際上執行這條ssh命令,所使用的遠端伺服器的使用者是git,這個使用者是在安裝gitlab的時候生成的,所有使用gitlab伺服器的ssh客戶端,都是使用git這個使用者。在這裡的使用者“huangdc”是通過gitlab建立的,是用於gitlab的許可權管理,也用作標識提交程式碼的開發者資訊,不要跟ssh的使用者混淆了。

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

原理其實是:因為每個倉庫都需要 ssh 連線,而 ssh 命令預設是使用 .ssh 目錄下面的私鑰去連線程式碼倉庫,所以我們可以在 .ssh/config 目錄裡面針對不同的倉庫域名重定義它的私鑰。

例子如下:

編輯檔案: vim /Users/david/.ssh/config

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

命令列環境下初始化專案

  1. 首先在 gitlab 上面建立一個空的程式碼倉庫,得到倉庫地址如下:
    ssh://[email protected]:55725/huangdc/test.git
  1. 在本地初始化倉庫、提交程式碼、推送到遠端 master 分支。
    git clone ssh://[email protected]:55725/huangdc/test.git  
    cd test  
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master

命令列環境下遷移舊的專案

  1. 首先在 gitlab 上面建立一個空的程式碼倉庫,得到倉庫地址如下:
    #注意:已存在程式碼的舊專案只能推送到空的遠端程式碼倉庫
    ssh://[email protected]:55725/dev/memberApi.git     
  1. 本地初始化專案、關聯遠端倉庫、推送到遠端倉庫
 cd /Users/david/work_www/memberApi
 git init
 git remote add origin ssh://[email protected]:55725/dev/memberApi.git
 git push -u origin master

SourceTree的安裝和開啟

  1. 官網下載連結:https://www.sourcetreeapp.com/
  2. 開啟SourceTree之後,需要登入Atlassian賬號來啟用SourceTree。可以使用Google賬號直接關聯登入。
  3. 登入後還需要一些設定,以最簡單的方式跳過就行。

Git Flow

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