01 . GitLab簡介及環境部署

GitLab簡介

最初,該產品名爲GitLab,是徹底免費的開源軟件,按照MIT許可證分發。html

2013年7月,產品被拆分爲:GitLabCE(社區版)和GitLabEE(企業版),當時,GitLabCE和GitLabEE的許可仍然是根據MIT許可分發的免費和開源軟件。python

Gitlab於2017年1月31日發佈一系列緊急通告稱,位於荷蘭的系統管理員因操做失誤而刪除了包含310GB產品數據的文件夾,在取消刪除操做後僅剩下4.5GB。運維人員以後檢查發現,網站宣稱和配備的多項備份措施均未正常運做或難以利用。Gitlab在YouTube直播了恢復數據的過程。網站最終丟失了最後6小時的數據庫數據(包括問題、合併請求、評論、片斷等,不含代碼庫)mysql

GitLab是由 GitLab Inc.開發,使用 MIT 許可證的基於網絡的 Git 倉庫管理工具開源項目,且具備 wiki 和 issue 跟蹤功能,使用 Git 做爲代碼管理工具,並在此基礎上搭建起來的 web 服務。GitLab 由烏克蘭程序員 Dmitriy Zaporozhets 和 Valery Sizov 開發,它由 Ruby 寫成。後來,一些部分用 Go 語言重寫.linux

GitLab原理:

GitLab是一個用於倉庫管理系統的開源項目,使用Git做爲代碼管理工具,並在此基礎上創建的web服務.nginx

其實說直白點,他就是個git服務器,和github差很少,只不過,這個gitlab能夠下載到本地進行搭建,代碼存在本地服務器上,而不是遠端的github上.git

col1 GitLab GitHub
安全性 代碼存在本地,自行管控 代碼存在遠端,廠商管控
私密性 代碼能見度自行設定 免費的代碼開放,付費的代碼隱藏
成本 運維成本 代碼隱藏

綜上所述程序員

# 要是企業中有服務器,建議搭建gitlab,畢竟代碼放到本身這裏安心些.

# 固然要是公司寫的代碼不重要的話,能夠放到免費版的github上
Git,GitLab,GitHub,Gittee究竟是什麼?

git 是一種版本控制系統,是一個命令,是一種工具github

github 是一個基於git實如今線代碼託管的倉庫,向互聯網開放,企業版要收錢web

gitee 相似github,通常在企業內搭建git私服,要本身搭建環境redis

git-ce 是社區版,gitlab-ee是企業版,要收費.

GitHub、GitLab 不一樣點:

GitHub若是使用私有倉庫,是須要付費的,GitLab能夠在上面搭建私人的免費倉庫。

GitLab讓開發團隊對他們的代碼倉庫擁有更多的控制,相對於GitHub,它有很多的特點:

# 1 容許免費設置倉庫權限
# 2 容許用戶選擇分享一個project的部分代碼
# 3 容許用戶設置project的獲取權限,進一步提高安全性
# 4 能夠設置獲取到團隊總體的改進進度
# 5 經過innersourcing讓不在權限範圍內的人訪問不到該資源

GitLab部署

環境清單
# CentOS 7.3
# gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
# policycoreutils-python
# openssh-server
注意事項
# 必需要安裝環境清單的兩個依賴包
初始化
mkdir -p /etc/yum.repos.d/backup  
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install ntpdate
ntpdate -b  ntp1.aliyun.com
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
下載安裝GitLab包
# 安裝依賴包
yum -y install policycoreutils-python openssh-server
# 去這個網址下載rpm包,四百-六百多兆,也能夠用rpm -ivh 直接跟上已經下載好的下載包安裝
# https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
rpm -ivh gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
修改配置文件並配置郵箱,啓動
# 修改配置文件,能夠直接在文件末尾追加如下行便可,
# 默認Nginx監聽的是80端口,若是Nginx修改端口,external_url裏面也必須帶端口:
[root@gitlab-9 ~]# sed -r '/^(#|$)/d' /etc/gitlab/gitlab.rb
external_url 'http://192.168.43.61'
nginx['listen_port'] = 80
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'you_menz@163.com'
gitlab_rails['gitlab_email_display_name'] = 'Admin'    # 待會郵箱收到郵件的發件人就是此處名字
gitlab_rails['gitlab_email_reply_to'] = 'you_menz@163.com'
gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab[]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "you_menz@163.com"
gitlab_rails['smtp_password'] = "zhoujian22"  # 此處密碼是郵箱客戶端的受權密碼
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

# 重置配置服務
gitlab-ctl  reconfigure

# 查看服務是否都起來了
gitlab-ctl status
lsof -i:80
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   17165       root    7u  IPv4  45430      0t0  TCP *:http (LISTEN)
nginx   17166 gitlab-www    7u  IPv4  45430      0t0  TCP *:http (LISTEN)

# 至此說明服務都起來了,能夠用web瀏覽器直接訪問了
# 登陸到http://IP: 修改root密碼,gitlab默認管理用戶是root,
# 登陸:  root/修改後的新密碼
# 測試發送郵件是否成功,進入控制檯,而後發送郵件
gitlab-rails console        # 輸入下面綠色命令
Notify.test_email('18621048481@163.com','','flying').deliver_now
# 若是出現如下信息表明成功
Notify#test_email: processed outbound mail in 201.9ms
Sent mail to 18621048481@163.com (5551.4ms)
Date: Fri, 08 Nov 2019 10:48:36 +0800
From: Admin <you_menz@163.com>
Reply-To: Admin <you_menz@163.com>
To: 18621048481@163.com
Message-ID: <5dc4d78469ee3_73ca3fddefcd66008640@zk01.mail>
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>flying</p></body></html>

GitLab主要組件

1.Nginx:                   # web入口
2.database:                # (postgresql,mysql) (gitlab repository issue, merge request等,用戶(權限))
3.redis緩存:               # 負責分發任務
4.sideiq:                  # 後臺任務,主要負責發送電子郵件,任務須要來自redis
5.unicorn:                 # 包含gitlab主進程
6.gitlab-shell:           # 用於ssh交互
7.gitlab-workherse:       # 反向代理服務器,能夠處理與unicorn無關的請求,處理git pull / push請求,處理unicorn的鏈接
8.gitaly後臺服務:          # 用於處理GitLab發出的全部調用

GitLab經常使用命令

gitlab-ctl start                     #啓動所有服務
gitlab-ctl restart                   #重啓所有服務
gitlab-ctl stop                      #中止所有服務
gitlab-ctl restart nginx             #重啓單個服務
gitlab-ctl status                    #查看所有組件的狀態
gitlab-ctl show-config               #驗證配置文件
gitlab-ctl uninstall                 #刪除gitlab(保留數據)
gitlab-ctl cleanse                   #刪除全部數據,從新開始
gitlab-ctl tail <svc_name>           #查看服務的日誌
gitlab-rails console production      #進入控制檯 ,能夠修改root 的密碼

GitLab的備份操做與恢復

備份<設置備份目錄及保存天數>

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800
# 備份<重載>
[root@gitlab ~]# gitlab-ctl reconfigure
# 開始備份
[root@gitlab ~]# gitlab-rake gitlab:backup:create
 # 會提示敏感信息
 警告:您的gitlab.rb和gitlab-secrets.json文件包含敏感數據,而且不包含在此備份中。您將須要這些文件來還原備份。請手動備份它們。
#備份完成出如今指定目錄下的文件
[root@gitlab backups]# ls
1541872172_2018_11_11_11.4.5_gitlab_backup.tar   
#這個壓縮包包含Gitlab全部數據(例如:管理員、普通帳戶以及倉庫等等)。
"1541872172"是一個時間戳,從1970年1月1日0時到當前時間的秒數

從備份文件恢復

[備份和恢復的GitLab版本儘可能保持一致]
[root@gitlab ~]# cd /var/opt/gitlab/backups
[root@gitlab backups]# chmod 777 1541872172_2018_11_11_11.4.5_gitlab_backup.tar
# 中止相關數據鏈接服務
[root@gitlab backups]# gitlab-ctl stop unicorn  
ok: down: unicorn: 0s, normally up
[root@gitlab backups]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# 從備份恢復
[root@gitlab backups]# gitlab-rake gitlab:backup:restore BACKUP=<指定時間戳,即1541872172_2018_11_11_11.4.5>
     (若只有一個備份則無需指定時間戳)
     後會讓你輸入一個"yes",輸入成功開始還原(,其實最主要是還原數據庫,整體時間有點長...)
     以後再讓你輸一個「yes」,意思是由於備份中沒有用戶敏感數據,重寫恢復時會丟失這些敏感數據;
     成功;
#恢復完成,重載配置
[root@gitlab backups]# gitlab-ctl reconfigure
#從新啓動,否則會報502錯誤;
gitlab-ctl stop && gitlab-ctl start
相關文章
相關標籤/搜索