由于公司業(yè)務抑诸,需要上Git版本控制烂琴。
GitLab社區(qū)版是免費的尘盼,不但能建立免費的私有倉庫而且沒有數(shù)量上限憨愉,參與人員也沒有數(shù)量限制,還能設置成員的權限卿捎,甚至細致到具體某條分支的權限配紫,以及強大的工作流等等。
GitLab很適合中小型非開源項目公司娇澎。
一笨蚁、GitLab 簡介
GitLab 是一個利用Ruby on Rails 開發(fā)的開源版本控制系統(tǒng),實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目括细。
它擁有與GitHub類似的功能伪很,能夠瀏覽源代碼,管理缺陷和注釋奋单★笔裕可以管理團隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個文件歷史庫览濒。團隊成員可以利用內(nèi)置的簡單聊天程序(Wall)進行交流呆盖。它還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復用,便于日后有需要的時候進行查找贷笛。
開源中國代碼托管平臺 碼云 就是基于GitLab項目搭建应又。
GitLab 分為 GitLab Community Edition(CE) 社區(qū)版 和 GitLab Enterprise Edition(EE) 專業(yè)版。社區(qū)版免費乏苦,專業(yè)版收費株扛,兩個版本在功能上的差異對比,可以參考官方對比說明
二汇荐、GitLab 安裝和配置
安裝社區(qū)版洞就,GitLab CE 版本:9.2.6
1、GitLab安裝
通過GitLab官方提供的Omnibus安裝包來安裝掀淘,相對方便旬蟋。Omnibus安裝包套件整合了大部分的套件(Nginx、ruby on rails革娄、git倾贰、redis、postgresql等)稠腊,再不用額外安裝這些軟件躁染,減輕了絕大部分安裝量。
GitLab官方安裝文檔 :CentOS6.x系統(tǒng)
安裝依賴包架忌,并配置postfix服務為GitLab郵件服務
# yum install curl openssh-server openssh-clients postfix cronie
# service postfix start
# chkconfig postfix on
打開HTTP和SSH端口
# iptables -I INPUT -m tcp -p tcp --dport 22 -j ACCEPT
# iptables -I INPUT -m tcp -p tcp --dport 80 -j ACCEPT
兩種安裝源
- 從官方鏡像源安裝
添加GitLab倉庫并安裝到服務器上
# curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash
# yum install gitlab-ce # 自動安裝最新版本
# yum install gitlab-ce-9.2.1-ce.0.el6 # 安裝指定版本
- 從第三方鏡像源安裝
官方鏡像源在國外,國內(nèi)安裝會很慢我衬,甚至有時因網(wǎng)絡問題會無法安裝叹放。
國內(nèi)推薦使用清華大學開源軟件鏡像源。
新建 /etc/yum.repos.d/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
再執(zhí)行
# yum makecache # 更新本地YUM緩存
# yum install gitlab-ce # 自動安裝最新版本
修改配置文件/etc/gitlab/gitlab.rb井仰,綁定域名
external_url 'http://gitlab.xxx.com'
啟動GitLab,使得配置生效
# gitlab-ctl reconfigure
在Dnspod中添加解析記錄
使用瀏覽器訪問GitLab
首次訪問GitLab,系統(tǒng)會讓你重新設置管理員的密碼,設置成功后會返回登錄界面.
默認的管理員賬號是root,如果你想更改默認管理員賬號,請輸入上面設置的新密碼登錄系統(tǒng)后修改帳號名.
GitLab安裝細節(jié)
主配置文件: /etc/gitlab/gitlab.rb
GitLab 文檔根目錄: /opt/gitlab
默認存儲庫位置: /var/opt/gitlab/git-data/repositories
GitLab Nginx 配置文件路徑: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql 數(shù)據(jù)目錄: /var/opt/gitlab/postgresql/data
GitLab由以下服務構成
- nginx: 靜態(tài)web服務器
- gitlab-shell: 用于處理Git命令和修改authorized keys列表
- gitlab-workhorse: 輕量級的反向代理服務器
- logrotate:日志文件管理工具
- postgresql:數(shù)據(jù)庫
- redis:緩存數(shù)據(jù)庫
- sidekiq:用于在后臺執(zhí)行隊列任務(異步執(zhí)行)
- unicorn:An HTTP server for Rack applications破加,GitLab Rails應用是托管在這個服務器上面的俱恶。
2、配置SMTP服務
如果你不想用服務器自帶的postfix服務來發(fā)郵件,可以改用SMTP服務合是。
修改GitLab郵件服務配置(gitlab.rb文件)了罪,使用騰訊企業(yè)郵箱的SMTP服務器,填寫賬號和密碼
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxx"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = 'plain'
gitlab_rails['smtp_enable_starttls_auto'] = true
使配置生效
# gitlab-ctl reconfigure
# gitlab-rake cache:clear RAILS_ENV=production # 清除緩存
3聪全、GitLab配置HTTPS
GitLab默認是使用HTTP的泊藕,可以手動配置為HTTPS
上傳SSL證書
創(chuàng)建ssl目錄,用于存放SSL證書
# mkdir -p /etc/gitlab/ssl
# chmod 0700 /etc/gitlab/ssl
上傳證書并修改證書權限
# chmod 600 /etc/gitlab/ssl/*
修改GitLab的配置文件
修改配置文件/etc/gitlab/gitlab.rb
external_url "https://gitlab.xxx.com"
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"
重建配置难礼,使其生效
# gitlab-ctl reconfigure
以上操作后娃圆,GitLab自帶的Nginx服務的配置文件 /var/opt/gitlab/nginx/conf/gitlab-http.conf 會被重新修改:
server {
listen *:80;
server_name gitlab.xxx.com;
server_tokens off; ## Don't show the nginx version number, a security best practice
return 301 https://gitlab.xxx.com:443$request_uri;
access_log /var/log/gitlab/nginx/gitlab_access.log gitlab_access;
error_log /var/log/gitlab/nginx/gitlab_error.log;
}
不用額外再配置,HTTP 會自動跳轉(zhuǎn)到 HTTPS 蛾茉。
開放443端口
在防火墻上開放443端口讼呢,用于HTTPS
# iptables -I INPUT -m tcp -p tcp --dport 443 -j ACCEPT
4、修改root用戶密碼
對于普通用戶而言谦炬,可通過系統(tǒng)重置密碼悦屏,接收郵件即可“伤拢可是GitLab管理員賬號窜管,缺省郵箱 admin@example.com
是個不存在的郵箱地址,無法通過郵箱修改密碼稚机。
官方修改密碼文檔幕帆,根據(jù)文檔,修改root密碼的方法如下:
打開與Rails程序交互的控制臺
在root權限下赖条,執(zhí)行:
# gitlab-rails console production
等待一會失乾,直到控制臺加載成功。
獲取用戶信息并修改root用戶密碼
# gitlab-rails console production
Loading production environment (Rails 4.2.8)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id: 1, email: "admin@example.com"......
irb(main):009:0> user.password = '12345678'
=> "12345678"
irb(main):010:0> user.password_confirmation = '12345678'
=> "12345678"
irb(main):011:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 510bb5be-a156-4522-9983-44d8a895e92a) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):011:0> exit
三纬乍、GitLab 常用命令
運維管理排查
# 查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
# 檢查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace
# 實時查看日志
gitlab-ctl tail
# 數(shù)據(jù)庫關系升級
gitlab-rake db:migrate
# 清理redis緩存
gitlab-rake cache:clear
# 升級GitLab-ce 版本
yum update gitlab-ce
# 升級PostgreSQL最新版本
gitlab-ctl pg-upgrade
服務管理
# 啟動所有 gitlab 組件:
gitlab-ctl start
# 停止所有 gitlab 組件:
gitlab-ctl stop
# 停止所有 gitlab postgresql 組件:
gitlab-ctl stop postgresql
# 停止相關數(shù)據(jù)連接服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 重啟所有 gitlab 組件:
gitlab-ctl restart
# 重啟所有 gitlab gitlab-workhorse 組件:
gitlab-ctl restart gitlab-workhorse
# 查看服務狀態(tài)
gitlab-ctl status
# 生成配置并啟動服務
gitlab-ctl reconfigure
日志
# 實時查看所有日志
gitlab-ctl tail
# 實時檢查redis的日志
gitlab-ctl tail redis
# 實時檢查postgresql的日志
gitlab-ctl tail postgresql
# 檢查gitlab-workhorse的日志
gitlab-ctl tail gitlab-workhorse
# 檢查logrotate的日志
gitlab-ctl tail logrotate
# 檢查nginx的日志
gitlab-ctl tail nginx
# 檢查sidekiq的日志
gitlab-ctl tail sidekiq
# 檢查unicorn的日志
gitlab-ctl tail unicorn
四碱茁、GitLab備份和恢復
備份
GitLab作為公司項目代碼的版本管理系統(tǒng),數(shù)據(jù)非常重要仿贬,必須做好備份纽竣。
修改備份目錄
GitLab備份的默認目錄是 /var/opt/gitlab/backups ,如果想改備份目錄茧泪,可修改/etc/gitlab/gitlab.rb:
gitlab_rails['backup_path'] = '/data/backups'
修改配置后蜓氨,記得:
gitlab-ctl reconfigure
備份命令
gitlab-rake gitlab:backup:create
該命令會在備份目錄(默認:/var/opt/gitlab/backups/)下創(chuàng)建一個tar壓縮包xxxxxxxx_gitlab_backup.tar,其中開頭的xxxxxx是備份創(chuàng)建的時間戳队伟,這個壓縮包包括GitLab整個的完整部分穴吹。
自動備份
通過任務計劃crontab 實現(xiàn)自動備份
# 每天2點備份gitlab數(shù)據(jù)
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
備份保留7天
可設置只保留最近7天的備份,編輯配置文件 /etc/gitlab/gitlab.rb
# 數(shù)值單位:秒
gitlab_rails['backup_keep_time'] = 604800
重新加載gitlab配置文件
gitlab-ctl reconfigure
恢復
備份文件:
/var/opt/gitlab/backups/1499244722_2017_07_05_9.2.6_gitlab_backup.tar
停止 unicorn 和 sidekiq 嗜侮,保證數(shù)據(jù)庫沒有新的連接港令,不會有寫數(shù)據(jù)情況啥容。
# 停止相關數(shù)據(jù)連接服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 指定恢復文件,會自動去備份目錄找顷霹。確保備份目錄中有這個文件咪惠。
# 指定文件名的格式類似:1499242399_2017_07_05_9.2.6,程序會自動在文件名后補上:“_gitlab_backup.tar”
# 一定按這樣的格式指定泼返,否則會出現(xiàn) The backup file does not exist! 的錯誤
gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6
# 啟動Gitlab
gitlab-ctl start