GitLab 部署

GitLab概述

众所周知,提供Git项目仓库托管服务的是业界有名的GitHub,但是你要将代码上传到GitHub里,而且要将项目设置为私有那就得收费。而GitLab就是为了提供免费的项目仓库托管服务而诞生(社区版免费,企业版需要订阅)。

GitLab是利用Ruby on Rails语言编写的 一个开源的版本管理系统,后来一部分用Go语言重写,它能实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。与 Github 类似,GitLab 能够浏览源代码,管理缺陷和注释。

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

官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

GitLab安装

GitLab提供了两种方式安装:

  • 使用官方打包好的rpm包,该方式简单快捷,也不容易出问题
  • 手动安装,把代码下载下来,然后安装各种环境,例如:数据库、nginx、编译环境等,一步一步安装起来就很麻烦也费时间,还容易出问题

环境规划

主机名 IP地址 说明
git01-21 10.4.7.21 Gitlab
git02-22 10.4.7.22 Git客户端

操作系统:centos7.4
内存:实验环境至少 2G,生产建议 4G 以上
磁盘:至少 50G,根据生产实际仓库大小进行配置
安全:关闭防火墙、selinux

1.安装GitLab依赖包

[root@git01-21 ~]# yum install -y curl policycoreutils openssh-server \
 									 openssh-clients policycoreutils-python

特别是:如果不安装依赖包的话,在使用rpm安装github会报错

2.获取Gitlab安装包并安装

//1.通过wget下载gitlab rpm安装包
[root@git01-21 ~]# mkdir /opt/src && cd /opt/src
[root@Git src]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

//2.下载完成后,使用rpm安装
[root@Git src]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

3.配置GitLab

Gitlab的默认配置文件路径为:/etc/gitlab/gitlab.rb

[root@git01-21 ~]# vim /etc/gitlab/gitlab.rb
# 对外公开访问地址(IP/域名)
external_url 'http://10.4.7.21'

# 数据目录
git_data_dirs({
  "default" => {
     "path" => "/data/gitlab/data"
    }
})

创建数据目录

[root@git01-21 ~]# mkdir -p /data/gitlab/data

4.重新配置gitlab

// 修改完主配置文件后,使用 gitlab-ctl reconfigure 重新配置 gitlab
[root@git01-21 ~]# gitlab-ctl reconfigure

需等待数分钟才能完成

GitLab 主要目录:

/data/gitlab/data/repositories # 仓库存储目录
/opt/gitlab              # GitLab应用代码和相应的依赖程序 
/var/opt/gitlab          # gitlab-ctl reconfigure 命令编译后的应用数据和配置文件,不需要人为修改配置 
/etc/gitlab              # 配置文件目录 
/var/log/gitlab          # 此目录下存放了GitLab各个组件产生的日志 
/var/opt/gitlab/backups/ # 备份文件生成的目录

每次修改了GitLab的主配置文件,都需要执行gitlab-ctl reconfigure

5.启动GitLab

// 重新配置执行成功后,就可以启动 Gitlab,
[root@git01-21 ~]#  gitlab-ctl start
ok: run: gitaly: (pid 2919) 189s
ok: run: gitlab-monitor: (pid 2935) 189s
ok: run: gitlab-workhorse: (pid 2905) 190s
ok: run: logrotate: (pid 2611) 221s
ok: run: nginx: (pid 2591) 227s
ok: run: node-exporter: (pid 2756) 213s
ok: run: postgres-exporter: (pid 2966) 188s
ok: run: postgresql: (pid 2355) 268s
ok: run: prometheus: (pid 2952) 188s
ok: run: redis: (pid 2295) 274s
ok: run: redis-exporter: (pid 2788) 209s
ok: run: sidekiq: (pid 2558) 235s
ok: run: unicorn: (pid 2520) 237s

// 查看各组件状态
[root@git01-21 ~]# gitlab-ctl status

GitLab 由主要由以下服务构成,他们共同承担了 Gitlab 的运作需要

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

6.GitLab 常用命令

启动所有 gitlab 组件: gitlab-ctl start 
停止所有 gitlab 组件: gitlab-ctl stop 
停止 postgresql 组件: gitlab-ctl stop postgresql 
停止相关数据连接服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 
重启所有 gitlab 组件: gitlab-ctl restart 
重启 gitlab-workhorse 组件: gitlab-ctl restart gitlab-workhorse 
查看服务状态 gitlab-ctl status
查看日志 sudo gitlab-ctl tail 
检查 redis 的日志 sudo gitlab-ctl tail redis

GitLab访问

1.浏览器输入:http://10.4.7.21,访问GitLab的web界面

2.首次登陆需要我们设置root用户密码(长度要求8位以上)

3.重新设置用户的密码后,即可使用root用户及刚刚设置的密码登录GitLab

4.登录后的页面如下,至此完成了GitLab的安装

GitLab关闭用户注册

我们Gitlab系统是企业内部私有代码仓库,所有用户都是由管理员创建,并不需要注册功能,因此我们需要关闭此功能。

1.使用root登录GitLab,点击页面最上方的Admin area

2.进入管理员区域页面,点击页面左侧菜单栏最下方的Settings

3.进入Settings页面后,下拉页面找到Sign-up Restrictions选项

4.取消Sign-up enabled选项前面的勾选后,下拉到页面的最下方,点击Save按钮完成配置。退回到系统的登录页面,发现已经没有用户注册功能。

GitLab仓库管理

GitLab 是通过组(group)的概念来统一管理仓库(project)和用户(user),通过创建组,在组下再创建仓库,再将用户加入到组,从而实现用户与仓库的权限管理。

创建组

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.在页面右侧点击绿色的New group按钮,进入创建组页面

3.在创建组页面中,组路径和组名称为必填项,而且此两处内容最好一致

组可见级别:
1、visibility Level:选择谁可以访问该组:我们默认选择 private 即可,
2、Private:只有授权的用户才可以看到
3、Internal:只要是登录 gitlab 的用户就可以看到
4、Public:只要可以访问 gitlab web 页面的人就可以看到

4.点击页面最下的create group按钮,完成组的创建,进入组管理页面

在此页面我们可为组添加用户。

创建用户

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.在页面右侧点击绿色的New user按钮,进入创建用户页面

3.在创建用户页面,输入用户名昵称、用户名、电子邮件、选择用户级别

个性化设置(这里就保留为空了):

4.点击页面最下部的create user按钮,完成用户创建,进入用户管理页面,点击页面右上页的 Edit 按钮,为用户设置初始密码

5.在Password选项中,填写设置用户的密码,点击页面最下的Save changes按钮,完成密码设置

在此页面也可同时修改用户注册信息。

用户授权

用户创建完成后,我们就需要对用户进行授权,从而使用户可以管理仓库,有两种方式,

  • 方法一:将用户加入到组,这样用户可以管理组内的仓库,
  • 方法二:直接授权用户管理仓库。

通常我们采用的方式方法二用户加入相应的组,并赋予不同的角色。 GitLab 中用户的角色是系统定义好的,不能更改。这一点可能不符合我们正常的思维习惯。下面我们将刚创建的Jason用户添加到我们的development组,将赋予developer权限。

1.在管理员页面点击页面顶部的Admin area按钮,进入管理员区域

2.点击用户组下面的development组,进入组管理界面

3.选择我们刚创建的Jason用户,选择developer角色,然后添加到组

注:关于每一种角色对应的权限,可参见官方文档相关内容:
https://docs.gitlab.com/ee/user/permissions.html

GitLab创建仓库

在GitLab中,你可以创建仓库用来存储你的程序代码、作为一个问题跟踪器、用 于代码协作、用于持续集成中的构建、测试和部署等。

1.在管理员区域点击New project按钮,或者点击导航栏中的项

2.进入到新建 project 页面

3.默认创建的是空仓库,需要执行一些命令初始化仓库

4.我们将sky-demo仓库加入到development组后,组内的成员即可以看到该仓库,我们使用 Jason用户登录,即可看到该仓库。

配置SSH KEY

前面已经在GitLab创建了仓库,并且授权用户可以使用仓库,所有的操作都是在 WEB 页面进行,下在介绍如何使用客户端来连接的GitLab仓库。
我的development组的sky-demo仓库是私有的,只有授权的用户才可以访问到该仓库,那么只要将客户端的用户与我们 GitLab的用户绑定,客户端即可访问到 GitLab上的仓库,建议使用SSH方式实现客户端与 Gitlab 用户的绑定。

now,现在要实现git02-22这个客户端能够从development组的sky-demo仓库拉取或者提交代码,具体配置如下:
1.在git02-22客户端生成 ssh 密钥对(windows客户端下只能使用rsa加密方式)

// 客户端生成基于rsa加密方式的密钥
[root@git02-22 ~]# ssh-keygen -t rsa

// 客户端已经生成了公钥和私钥
[root@git02-22 ~]# ll ~/.ssh/
total 8
-rw------- 1 root root 1766 Mar  7 22:59 id_rsa
-rw-r--r-- 1 root root  395 Mar  7 22:59 id_rsa.pub

2.将git02-22客户端与GitLab的Jason用户绑定,复制git02-22客户端的公钥,在GitLab主页面点击用户设置

3.进入到用户设置页面,点击左侧菜单栏的SSH Keys

4.进入到SSH Keys管理页面

此处只能添加公钥,如果添加私钥系统将报错,此外一个公钥在整个GitLab系统中只能添加一次,但是一个GitLab用户可以添加多个公钥

设置分支保护

在实际使用过程中,我们通常会保持master分支稳定,用于生产环境的版本发布,只有授权的用户才可以向master合并代码。要实现此功能,我们需要将master设置为保护分支,并授权什么用户可以向master用户推送代码。

我们的Jason用户下面有个sky-demo仓库,但是它是普通用户,而我又把git02-22的key添加到Jason用户,就会导致一个问题,GitLab上默认不允许普通用户提交代码到仓库的Master分支,所以我们需要通过分支保护功能Jason用户授权,给予能提交代码到仓库的Master分支

1.在设置分支保护之前,我们必须要手动初始化一下sky-demo仓库,添加一个文件。

如果仓库为空,则无法设置分支受保护

2.新增文件名README.md,最后提交文件

3.在GitLab上设置分支保护,使用 root 用户点击demo仓库页面左下角的Settings

4.进入设置页面,选择设置菜单栏下面的Repository选项

5.进入repository设置页面

6.展开Protected Branches

仓库操作

我们刚才在Json用户添加了git02-22的公钥,那么git02-22就能访问Json用户用户所属组下的所有仓库,我们也创建了一个名为:sky-demo的仓库,让我们拉取该仓库并创建文件在推送到仓库吧

1.创建/data/git_repo目录,在该目录下拉取仓库,创建文件并提交到master分支

[root@git02-22 ~]# mkdir -p  /data/git_repo && cd /data/git_repo
[root@git02-22 git_repo]# git clone git@10.4.7.21:development/sky-demo.git
[root@git02-22 git_repo]# cd sky-demo
[root@git02-22 sky-demo]# git config --global user.email "jasondev@163.com"
[root@git02-22 sky-demo]# git config --global user.name "xmh"
[root@git02-22 sky-demo]# echo "123" >index.html
[root@git02-22 sky-demo]# git add .
[root@git02-22 sky-demo]# git commit -m "first"

// 将代码提交到master分支
[root@git02-22 sky-demo]# git push -u origin  master
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.4.7.21:development/sky-demo.git
   743b351..c5c4f70  master -> master
Branch master set up to track remote branch master from origin.

2.登录到GitHub界面的sky-demo仓库,可以看到刚才提交的代码

GitLab恢复/备份/升级

gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原gitlab提供了一个简单的命令行来备份整个 gitlab,并且能灵活的满足需求。

备份GitLab

GitLab备份文件将保存在配置文件中定义的backup_path中 , 文件名为TIMESTAMP_gitlab_backup.tarTIMESTAMP为备份时的时间戳。 TIMESTAMP的格式为: EPOCH_YYYY_MM_DD_Gitlab-version

1.自动备份

默认的存放备份文件目录为:/var/opt/gitlab/backups/,如果自定义备份目录需要赋予目录 git权限,具体操作如下:

// 1.创建存放备份文件的目录,并授权git
[root@git01-21 ~]# mkdir /data/backup/gitlab -p
[root@git01-21 ~]# chown -R git.git /data/backup/gitlab

// 2.GitLan配置文件中加入
[root@git01-21 ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = '/data/backup/gitlab' # 存放备份文件的路径
gitlab_rails['backup_keep_time'] = 604800           # 备份保留的时间(以秒为单位,这个是七天默认值)

// 3.重载gitlab配置
[root@git01-21 ~]# gitlab-ctl reconfigure

2.手动备份

1.命令行方式为GitLab仓库生成一次备份

备份文件会放到配置文件中指定的备份目录/data/backup/gitlab

[root@git01-21 ~]# gitlab-rake gitlab:backup:create

// 在指定的目录中生成了对应的备份文件
[root@git01-21 ~]# ll /data/backup/gitlab
total 72
-rw------- 1 git git 71680 Mar  8 00:06 1583597167_2020_03_08_10.2.2_gitlab_backup.tar

2.添加到定时备份
通过在定时任务里添加来实现定时备份,由于代码是一个企业非常重要的资产,所以我们要重视 GitLab的备份工作。至少做到每天备份一次,平时要注意检查备份的完整性。 环境变量 CRON=1的作用是如果没有任何错误发生时,抑制备份脚本的所有进度输出

[root@git01-21 ~]# crontab -e
# Git lab backup
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

恢复GitLab

GitLab的恢复只能还原到与备份文件相同的gitlab版本的系统中,恢复时,停止连接到数据库的进程(也就是停止数据写入服务),但是保持 GitLab 是运行的。

// 1.关闭连接数据库进程
[root@git01-21 ~]# gitlab-ctl stop unicorn
ok: down: unicorn: 1s, normally up
[root@git01-21 ~]# gitlab-ctl stop sideki

// 2.接来下,进行恢复操作
[root@git01-21 ~]# cd /data/backup/gitlab/
[root@git01-21 ~]# gitlab-rake gitlab:backup:restore BACKUP=1583597167_2020_03_08_10.2.2

整个恢复执行过程中,我们可以看到基本是在删除表,创建表。

升级GitLab

1.首先,下载新版本的 RPM 包,可以通过官网或者清华镜像站获取。

下载地址

2.其次关闭部分 gitlab 服务

$ gitlab-ctl stop unicorn 
$ gitlab-ctl stop sidekiq 
$ gitlab-ctl stop nginx

3.执行升级操作

$ rpm gitlab-ce-10.2.1-ce.0.el7.x86_64.rpm

4.重新配置 gitlab 重启 gitlab 服务

$ gitlab-ctl reconfigure
$ gitlab-ctl restart

注:升级操作不建议进行。如果确实需要,也可以采取在一台新的服务器上安装新版本 的 Gitlab,然后采用导入库的方式将旧系统的代码仓库导入到新 Gitlab 上。

posted @ 2020-03-07 22:17  jasonminghao  阅读(616)  评论(0编辑  收藏  举报