GitLab搭建及配置

由于公司业务,需要上Git版本控制。

  • 目前市面上比较有名的Git服务提供商,国外有GitHubBitBucketGitLab,国内有Coding
  • 现有的服务商,对于免费的套餐都有一定的限制。比如:GitHub只允许建立免费的开源repository,建立私有的仓库需要收费。BitBucket允许建立无限制的私有项目,不过对于项目中参与的开发人员是有人数限制的,当团队中开发者规模达到一定数量后,需要付费购买相应的套餐。

GitLab社区版是免费的,不但能建立免费的私有仓库而且没有数量上限,参与人员也没有数量限制,还能设置成员的权限,甚至细致到具体某条分支的权限,以及强大的工作流等等。

GitLab很适合中小型非开源项目公司。

一、GitLab 简介

GitLab 是一个利用Ruby on Rails 开发的开源版本控制系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

开源中国代码托管平台 码云 就是基于GitLab项目搭建。

GitLab 分为 GitLab Community Edition(CE) 社区版 和 GitLab Enterprise Edition(EE) 专业版。社区版免费,专业版收费,两个版本在功能上的差异对比,可以参考官方对比说明

二、GitLab 安装和配置

安装社区版,GitLab CE 版本:9.2.6

1、GitLab安装

通过GitLab官方提供的Omnibus安装包来安装,相对方便。Omnibus安装包套件整合了大部分的套件(Nginx、ruby on rails、git、redis、postgresql等),再不用额外安装这些软件,减轻了绝大部分安装量。

GitLab官方安装文档 :CentOS6.x系统

安装依赖包,并配置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     # 安装指定版本
  • 从第三方镜像源安装

官方镜像源在国外,国内安装会很慢,甚至有时因网络问题会无法安装。

国内推荐使用清华大学开源软件镜像源

新建 /etc/yum.repos.d/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

再执行

# yum makecache   # 更新本地YUM缓存
# yum install gitlab-ce    # 自动安装最新版本

修改配置文件/etc/gitlab/gitlab.rb,绑定域名

external_url 'http://gitlab.xxx.com'

启动GitLab,使得配置生效

# gitlab-ctl reconfigure

在Dnspod中添加解析记录

使用浏览器访问GitLab

首次访问GitLab,系统会让你重新设置管理员的密码,设置成功后会返回登录界面.
默认的管理员账号是root,如果你想更改默认管理员账号,请输入上面设置的新密码登录系统后修改帐号名.

GitLab安装细节

主配置文件: /etc/gitlab/gitlab.rb
GitLab 文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
GitLab Nginx 配置文件路径:  /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql 数据目录: /var/opt/gitlab/postgresql/data

GitLab由以下服务构成

  • nginx: 静态web服务器
  • gitlab-shell: 用于处理Git命令和修改authorized keys列表
  • gitlab-workhorse: 轻量级的反向代理服务器
  • logrotate:日志文件管理工具
  • postgresql:数据库
  • redis:缓存数据库
  • sidekiq:用于在后台执行队列任务(异步执行)
  • unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。

2、配置SMTP服务

如果你不想用服务器自带的postfix服务来发邮件,可以改用SMTP服务。

修改GitLab邮件服务配置(gitlab.rb文件),使用腾讯企业邮箱的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证书

创建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 会自动跳转到 HTTPS 。

开放443端口

在防火墙上开放443端口,用于HTTPS

# iptables -I INPUT -m tcp -p tcp --dport 443 -j ACCEPT

4、修改root用户密码

对于普通用户而言,可通过系统重置密码,接收邮件即可。可是GitLab管理员账号,缺省邮箱 admin@example.com 是个不存在的邮箱地址,无法通过邮箱修改密码。
官方修改密码文档,根据文档,修改root密码的方法如下:

打开与Rails程序交互的控制台

在root权限下,执行:

# 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

# 数据库关系升级
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

# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 重启所有 gitlab 组件:
gitlab-ctl restart

# 重启所有 gitlab gitlab-workhorse 组件:
gitlab-ctl restart  gitlab-workhorse

# 查看服务状态
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作为公司项目代码的版本管理系统,数据非常重要,必须做好备份。

修改备份目录

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/)下创建一个tar压缩包xxxxxxxx_gitlab_backup.tar,其中开头的xxxxxx是备份创建的时间戳,这个压缩包包括GitLab整个的完整部分。

自动备份

通过任务计划crontab 实现自动备份

# 每天2点备份gitlab数据
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create

备份保留7天

可设置只保留最近7天的备份,编辑配置文件 /etc/gitlab/gitlab.rb

# 数值单位:秒
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 ,保证数据库没有新的连接,不会有写数据情况。

# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 指定恢复文件,会自动去备份目录找。确保备份目录中有这个文件。
# 指定文件名的格式类似:1499242399_2017_07_05_9.2.6,程序会自动在文件名后补上:“_gitlab_backup.tar”
# 一定按这样的格式指定,否则会出现 The backup file does not exist! 的错误
gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6

# 启动Gitlab
gitlab-ctl start 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容