gitlab的安装以及使用
一、概述
GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。
它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找
二、Gitlab服务构成
- Nginx:静态web服务器
- gitlab-shell:用于处理Git命令和修改authorized keys列表
- gitlab-workhorse: 轻量级的反向代理服务器
- logrotate:日志文件管理工具
- postgresql:数据库
- redis:缓存数据库
- sidekiq:用于在后台执行队列任务(异步执行)
- unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的
Gitlab工作流程:

GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表
- 限制执行预定义好的Git命令(git push,git pull,git annex)
- 调用GitLab Rails API检查权限
- 执行pre-receive钩子(在企业版中叫做Git钩子)
- 执行用户请求的动作,处理GitLab的post-receive动作
- 处理自定义的post-receive动作
当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码:
- 如果是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作
- 如果是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理
1、调用GitLab Rails API 检查权限
2、执行pre-receive钩子(在GitLab企业版中叫做Git钩子)
3、执行你请求的动作
4、处理GitLab的post-receive动作
5、处理自定义的post-receive动作
GitLab Workhorse:
GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。
三、部署
基础环境要求:服务器内存至少2G以上
1、方法一:下载gitlab-ce的rpm包:
可通过清华大学的源地址进行下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
将对应版本的gitlab-ce下载到本地后,直接yum安装即可 :
# 要先将这个rpm包下载到本地
yum install -y gitlab-ce-13.6.1-ce.0.el7.x86_64.rpm
默认安装在/var/opt/gitlab目录下
2、方法二:配置yum源:
在 /etc/yum.repos.d/ 下新建 gitlab-ce.repo,写入如下内容:
[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key
然后创建cache,再直接安装gitlab-ce :
yum makecache # 这一步会创建大量的数据
# 直接安装最新版
yum install -y gitlab-ce
# 如果要安装指定的版本,在后面填上版本号即可
yum install -y gitlab-ce-13.6.1
# 如果安装时出现gpgkey验证错误,只需在安装时明确指明不进行gpgkey验证
yum install gitlab-ce -y --nogpgcheck
查看gitlab版本的命令如下:
gitlab-rake gitlab:env:info
3、修改gitlab的配置:
配置文件位置 /etc/gitlab/gitlab.rb,可将一些不需要的配置修改为false,如图:

上图中的都是可不启动的,默认情况下是启动的,可先将注释去掉,然后修改true为false,如图:

修改URL地址,IP就是gitlab所在的机器IP,端口可自定义,如图:

上图中的external_url实际对应的是一个NGINX地址,后续使用此地址打开gitlab
修改好配置文件后,要使用 gitlab-ctl reconfigure 命令重载一下配置文件,否则不生效
gitlab-ctl reconfigure # 重载配置文件
#注意:重载配置文件的时候,会将其余相关组件都安装到本地中,组件都在下载的gitlab的rpm包里集成好了
初始化后的页面如下:

上图中黄线区域文件中为root用户的初始密码,可通过此密码登录gitlab
4、修改root用户密码:
通过IP和端口登录gitlab,如图:

点击右上角的头像下方的用户按钮,如图:

在打开页面中,点击右侧的编辑按钮,如图:

点击左侧的Password按钮,如图:

修改之后通过新密码登录即可
5、Gitlab常用命令:
gitlab-ctl start # 启动所有 gitlab 组件
gitlab-ctl stop # 停止所有 gitlab 组件
gitlab-ctl restart # 重启所有 gitlab 组件
gitlab-ctl status # 查看服务状态
gitlab-ctl reconfigure # 启动服务
gitlab-ctl show-config # 验证配置文件
gitlab-ctl tail # 查看日志
gitlab-rake gitlab:check SANITIZE=true --trace # 检查gitlab
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件
四、修改默认端口
gitlab的默认端口为80,如果要修改为其他端口,可通过如下方式
1、编辑gitlab.rb配置文件,修改其中的监听端口,如下:
vim /etc/gitlab/gitlab.rb
external_url 'http://10.9.2.247:8081' #在IP后面添加端口8081
nginx['listen_port'] = 8081 #取消掉注释,并修改端口为8081
2、编辑gitlab-http.conf文件,修改其中端口,如下:
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf

3、重启gitlab,执行命令如下:
gitlab-ctl restart
4、通过8081端口访问,如图:

五、备份
执行如下命令即可完成备份,此命令会备份仓库、数据库、用户、用户组、密钥、权限等,如下:
gitlab-rake gitlab:backup:create #备份数据
cp /etc/gitlab/gitlab.rb #备份配置文件
执行完成后,会在/var/opt/gitlab/backups目录下生成一个tar包
六、恢复
1、停止gitlab,防止数据不一致,如下:
gitlab-ctl stop
2、在新机器安装完gitlab后(假设是yum安装),复制配置文件过去,如下:
cp gitlab.rb /etc/gitlab/ #备份的配置文件替换到新的
3、在新机器执行命令恢复,如下:
gitlab-rake gitlab:backup:restore BACKUP=backupfile.tar #备份生成的tar包
4、加载gitlab配置,然后启动gitlab,如下:
gitlab-ctl reconfigure
gitlab-ctl start
如果出现redis异常,那就重启服务器,应该就可以恢复了
注:执行恢复后,原有的gitlab中配置的person access tokens会失效,需要重置,配置的公钥不会失效
七、忘记root密码,重置
1、首先登录gitlab服务器控制台,命令如下:

2、查找用户为root,如图:

3、设置root密码,然后保存设置,如图:

注:密码要稍微复杂一些,否则user.save会提示false


