GitLab 最新安装&备份&升级教程(全)

GitLab 最新安装&备份&升级教程(全)

前言

今天介绍下GitLab,一款基于web的Git代码托管平台和源代码管理工具,它提供了类似GitHub的功能,但是具有更多的特性,可以用来管理和协作开发项目。在互联网公司、政务信息化企业、金融科技公司一般都需要建设自己的代码托管平台。GitLab是一个不错的选择,它具备强大的5功能,简洁的界面,可以通过hooks联动Jenkins以及一些项目管理软件,实现一条龙的开发协作流程,个人认为是DevOps的神器。

安装教程

关于安装和后期的升级运维,我比较倾向于Docker安装的方式,安装尽量以最少的操作步骤完成任务,保证出错的可能性。

目前官方给出了比较丰富的部署方式来满足不同用户的需求:

  • Linux package (通过Linux安装包进行安装)
  • Helm chart(Kubernetes的一种安装方式)
  • Operator (Kubernetes的另一种安装方式)
  • Docker (个人认为相对简单并且可维护性高的方式)
  • Self-compiled(需要自行编译源代码)

接下来我讲解的也是Docker部署的方式,在中小型公司推荐,简单方便,维护成本低。

Docker安装

Docker安装也有3种选项:

  • 使用Docker Engine 安装,可以使用shell脚本配合docker命令较好的实现安装
  • 使用Docker Compose安装,通过docker-compose.yaml进行配置
  • 使用Docker Swarm安装,适合多节点访问压力较大的场景

个人喜欢第二种方式,简洁明了(代码洁癖~~)

安装步骤

  1. 安装Docker Compose。(参考Docker官方文档安装就行)
  2. 配置docker-compose.yaml文件。
yaml 复制代码
   version: '3.6'
   services:
     web:
       image: 'gitlab/gitlab-ee:latest'
       restart: always
       hostname: 'gitlab.example.com'
       environment:
         GITLAB_OMNIBUS_CONFIG: |
           external_url 'https://gitlab.example.com'
           # Add any other gitlab.rb configuration here, each on its own line
       ports:
         - '80:80'
         - '443:443'
         - '22:22'
       volumes:
         - '$GITLAB_HOME/config:/etc/gitlab'
         - '$GITLAB_HOME/logs:/var/log/gitlab'
         - '$GITLAB_HOME/data:/var/opt/gitlab'
       shm_size: '256m'

这是官方文档描述的最精简的配置,如果有自定义配置需求(例如https配置、邮件服务、LDAP登录配置等可以参考官方文档中的配置)在GITLAB_OMNIBUS_CONFIG中进行添加。

注意:配置文件中的环境变量$GITLAB_HOME可以使用下述几种方式:(推荐第三种)

  1. Bash: ~/.bash_profile
  2. ZSH:~/.zshrc
  3. GitLab目录下的.env目录

通过volumes中3个目录挂在到宿主机中,实现GitLab数据的持久化:

宿主机路径 容器路径 用法
$GITLAB_HOME/data /var/opt/gitlab 存储GitLab运行过程中的数据
$GITLAB_HOME/logs /var/log/gitlab 存储日志文件
$GITLAB_HOME/config /etc/gitlab 存储GitLab各类配置文件
  1. docker-compose.yaml文件所在目录执行后台启动命令来启动GitLab:
shell 复制代码
docker compose up -d
  1. 启动完毕后可以查看宿主机文件夹中新增了数据卷中配置的三个文件夹。
shell 复制代码
➜  gitlab ls
config  data  docker-compose.yaml  logs
  1. 登录查看部署效果:

控制台效果,最新版本右上角相关用户设置功能区已经移动到左侧:

备份恢复教程

由于最早部署GitLab的时候版本是v14.6.1,使用期间遇到一些不知名问题,虽然重启恢复了,但是本着IT男的强迫症,尝试研究升级。

升级前需要准一个备份恢复环境用于升级验证,生产数据需要十分小心。

备份操作

Docker安装方式备份的话直接执行以下docker命令:

shell 复制代码
docker exec -t <container name> gitlab-backup create

执行的时候需要一点时间,需要耐心等待,会有如下类似的输出:

shell 复制代码
Dumping database tables:
- Dumping table events... [DONE]
- Dumping table issues... [DONE]
- Dumping table keys... [DONE]
- Dumping table merge_requests... [DONE]
- Dumping table milestones... [DONE]
- Dumping table namespaces... [DONE]
- Dumping table notes... [DONE]
- Dumping table projects... [DONE]
- Dumping table protected_branches... [DONE]
- Dumping table schema_migrations... [DONE]
- Dumping table services... [DONE]
- Dumping table snippets... [DONE]
- Dumping table taggings... [DONE]
- Dumping table tags... [DONE]
- Dumping table users... [DONE]
- Dumping table users_projects... [DONE]
- Dumping table web_hooks... [DONE]
- Dumping table wikis... [DONE]
Dumping repositories:
- Dumping repository abcd... [DONE]
Creating backup archive: $TIMESTAMP_gitlab_backup.tar [DONE]
Deleting tmp directories...[DONE]
Deleting old backups... [SKIPPING]

备份的文件是一个tar包,位于配置文件中的backup_path路径中,默认为/var/opt/gitlab/backups,宿主机中为$GITLAB_HOME/data/backups,进入目录可以看到[TIMESTAMP]_gitlab_backup.tar带有时间戳的压缩包,该压缩包包含了所有gitlab运行以来所有的数据。

同时,我们需要备份一下$GITLAB_HOME/config目录中的配置文件以及相关的key、cert、gitlab.rb、gitlab-secrets.json文件,包含了各类配置以及数据库加密秘钥等。

最后docker-compose.yaml文件也要备份一下。

总结:

  1. 使用命令备份gitlab运行数据
  2. 备份配置文件
  3. 备份docker-compose.yaml文件
  4. 不放心可以把整个GITLAB_HOME文件夹备份下~

恢复操作

准备一个新的宿主机(云服务器、虚拟机、笔记本都行~!)➜ 验证备份文件完整性。

在新的宿主机上准备与生产一致的环境:

  • GITLAB_HOME文件夹
  • docker-compose.yaml文件
  • 前面备份的配置文件
  • [TIMESTAMP]_gitlab_backup.tar文件放回$GITLAB_HOME/data/backups文件夹
  • 配置文件放回$GITLAB_HOME/config文件夹

重新启动:

shell 复制代码
docker compose up -d

等docker启动状态由startinghealthy后执行下述操作:

shell 复制代码
# Stop the processes that are connected to the database
docker exec -it <name of container> gitlab-ctl stop puma
docker exec -it <name of container> gitlab-ctl stop sidekiq

# Verify that the processes are all down before continuing
docker exec -it <name of container> gitlab-ctl status

# Run the restore. NOTE: "_gitlab_backup.tar" is omitted from the name
docker exec -it <name of container> gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce

# Restart the GitLab container
docker restart <name of container>

# Check GitLab
docker exec -it <name of container> gitlab-rake gitlab:check SANITIZE=true

上述操作步骤,简单理解就是停止2个影响恢复的服务,确认下2个服务是否停止,然后将tar包中的数据恢复到新的环境中,然后重启容器,使得之前停止的2个服务恢复,然后检查下整个GitLab的健康状态。打开gitlab确认下数据是否完整,没有问题后可进行升级操作。

升级教程

由于GitLab系统较为复杂庞大,因此升级需要遵循官方的升级路径进行升级,升级前先检查是否与升级路径一致,切记不可直接跨大版本升级,可能会由于数据结构不一致导致无法启动。

gitlab-com.gitlab.io/support/too...

因此升级需要遵循官方升级路径的版本顺序依次升级,不可跳过中间版本直接升级,否则会报错无法启动成功。例如我当前的版本是:v14.6.1,我的升级路径如下:

shell 复制代码
14.9.5 => 14.10.5 => 15.0.5 => 15.4.6 => 15.11.13 => 16.3.1

每次更新docker-compose.yaml中的镜像版本号,然后执行:

shell 复制代码
docker compose up -d

确保每次更新版本号启动后进入healthy状态,并且日志输出变缓,只有访问gitlab才有少量请求日志后再进行重复操作,直至版本升级至最新版。

总结

截止教程发表之日,目前最新的release版本为v16.3.0,作者亲身实践从v14.6.1-->v16.3.0,如果遇到困惑的小伙伴可以关注留言,一起探讨~

参考文档

相关推荐
守城小轩8 分钟前
基于Chrome140的Quora账号自动化(关键词浏览)——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发
未来之窗软件服务14 分钟前
幽冥大陆(五十五)ASR SetThreadInformation C语言识别到自动化软件
运维·自动化·asr·东方仙盟·操作系统级别错误
开开心心就好21 分钟前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
Lbwnb丶31 分钟前
检测服务器是否是虚拟化,如KVM,VM等
linux·运维·服务器
老猿讲编程36 分钟前
【车载信息安全系列4】基于Linux中UIO的HSE应用实现
linux·运维·服务器
鸡吃丸子1 小时前
初识Docker
运维·前端·docker·容器
wanhengidc1 小时前
巨椰 云手机 云游戏稳定运行
运维·服务器·arm开发·游戏·云计算
林义满1 小时前
大促零宕机背后的运维升级:长三角中小跨境电商的架构优化实践
大数据·运维·架构
linweidong2 小时前
顺丰运维面试题及参考答案
运维·nginx·容器·ansible·运维开发·防火墙·python面试
qq_455760852 小时前
docker run
运维·docker·容器