最初,該產品名爲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是一個用於倉庫管理系統的開源項目,使用Git做爲代碼管理工具,並在此基礎上創建的web服務.nginx
其實說直白點,他就是個git服務器,和github差很少,只不過,這個gitlab能夠下載到本地進行搭建,代碼存在本地服務器上,而不是遠端的github上.git
col1 | GitLab | GitHub |
---|---|---|
安全性 | 代碼存在本地,自行管控 | 代碼存在遠端,廠商管控 |
私密性 | 代碼能見度自行設定 | 免費的代碼開放,付費的代碼隱藏 |
成本 | 運維成本 | 代碼隱藏 |
綜上所述程序員
# 要是企業中有服務器,建議搭建gitlab,畢竟代碼放到本身這裏安心些. # 固然要是公司寫的代碼不重要的話,能夠放到免費版的github上
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讓不在權限範圍內的人訪問不到該資源
# 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
# 安裝依賴包 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>
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-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 的密碼
備份<設置備份目錄及保存天數>
[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