GitLab在centos7上安裝和使用
git的優點
- git是分散式的,svn不是
git分散式本地就可以用,可以隨便儲存各種歷史痕跡,不用擔心汙染伺服器,連不上伺服器也能提交程式碼、檢視log。 - GIT分支和SVN的分支不同
分支在SVN中實際上是版本庫中的一份copy,而git一個倉庫是一個快照,所以git 切換、合併分支等操作更快速。 - 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
命令列環境下初始化專案
- 首先在 gitlab 上面建立一個空的程式碼倉庫,得到倉庫地址如下:
ssh://[email protected]:55725/huangdc/test.git
- 在本地初始化倉庫、提交程式碼、推送到遠端 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
命令列環境下遷移舊的專案
- 首先在 gitlab 上面建立一個空的程式碼倉庫,得到倉庫地址如下:
#注意:已存在程式碼的舊專案只能推送到空的遠端程式碼倉庫
ssh://[email protected]:55725/dev/memberApi.git
- 本地初始化專案、關聯遠端倉庫、推送到遠端倉庫
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的安裝和開啟
- 官網下載連結:https://www.sourcetreeapp.com/
- 開啟SourceTree之後,需要登入Atlassian賬號來啟用SourceTree。可以使用Google賬號直接關聯登入。
- 登入後還需要一些設定,以最簡單的方式跳過就行。
Git Flow
http://flc.ren/2015/12/381.html