首页 > 其他分享 >容器中gitlab的备份与恢复

容器中gitlab的备份与恢复

时间:2023-02-23 15:26:00浏览次数:36  
标签:opt 容器 git 备份 gitlab 192.168 backup

1. 前言

目前公司的代码仓库是运行在一台物理服务器上,该服务器信息如下:

服务器型号:Inspur NF5270M3
CPU:Intel(R) Xeon(R) Silver 4210 CPU @ 2.20GHz x 2
MEM: 128G
磁盘: 4块 2TB SATA
阵列类型:2块为一组作为 RAID-1,第一组RAID-1做操作系统,第二组RAID-1做数据存储并挂载到 /opt 目录

gitlab版本:14.2.3

#/root/check_disk.sh
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up
Firmware state: Online, Spun Up

目前都为 online的状态。
检测时间:2023-02-22 17:37:41

考虑到代码库的重要性,经过讨论确定备份策略如下:

  • 每周进行一次全备并刻录到光盘存储;
  • 定期检查代码服务器磁盘状态

可能当初为了方便,直接使用 docker 启动的 gitlab

docker ps -a
CONTAINER ID   IMAGE                     COMMAND             CREATED         STATUS                 PORTS                                   NAMES
c18a6274a299   gitlab/gitlab-ce:latest   "/assets/wrapper"   17 months ago   Up 7 weeks (healthy)   0.0.0.0:2222->22/tcp ...   gitlab

2. 容器运行gitlab

注意:请在测试环境操作确认后,再去生产环境操作!!!

测试主机:
192.168.199.101 - 备份
192.168.199.102 - 恢复

2.1 容器启动gitlab

容器启动 gitlab 命令,

docker run -d \
 --name gitlab \
 --hostname gitlab \
 --restart always \
 -p 443:443 -p 80:80 -p 2002:22 \
 -v /opt/gitlab/config:/etc/gitlab \
 -v /opt/gitlab/data:/var/opt/gitlab \
 -v /opt/gitlab/logs:/var/log/gitlab \
 -e GITLAB_SKIP_UNMIGRATED_DATA_CHECK=true \
 gitlab/gitlab-ce:latest

根据主机资源配置,启动时间可能会有差异。

本次gitlab的版本为:14.2.3,查看gitlab版本如下:

docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
14.2.3

2.2 修改gitlab配置

注意:修改配置需要在容器内进行操作。

# 进入容器内
docker exec -it gitlab bash

# 修改 gitlab.rb
vi /etc/gitlab/gitlab.rb
...
# 加入如下配置

# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.199.101'
#ssh主机ip,这里会体现在项目使用ssh克隆
gitlab_rails['gitlab_ssh_host'] = '192.168.199.101'
#ssh主机端口,这里会体现在项目使用ssh克隆
gitlab_rails['gitlab_shell_ssh_port'] = 2002
...

# 让配置生效
gitlab-ctl reconfigure

2.3 页面登录gitlab

完成上面操作后,等几分钟通过浏览器访问:

image-20230223103405350

用户名:root
密码:通过容器内该文件获取 cat /etc/gitlab/initial_root_password

2.4 创建用户

登录 root用户 点击 菜单 -> 管理员 -> 用户 -> 新建用户

创建两个用户:

  • hukey - 管理员
  • xiaofei - 普通用户

image-20230223105852465

使用管理员登录,首次登录会修改要求修改密码:

image-20230223110030674

2.5 创建测试项目

image-20230223110135616

创建空白项目:

image-20230223110155185

填写项目名称和描述,点击 新建项目image-20230223110212100

2.6 客户端克隆项目

客户端主机IP: 192.168.199.103

项目创建完成后, 点击http克隆:

image-20230223110755346

在客户端主机上执行:

git clone http://192.168.199.101/hukey/spring-demo.git
用户名:hukey
密码:[gitlab hukey用户的登录密码]

登录成功后开始同步项目到本地:

root@localhost(192.168.199.103)~/spring-demo>ls -a
./  ../  .git/  README.md

2.7 创建测试项目

将准备好的代码文件拷贝到项目目录,这里是做实验,代码文件随意写几个即可。

root@localhost(192.168.199.103)~>cp -a SpringBootDemo-master/* spring-demo/

#提交git到服务器代码仓库
cd spring-demo/
git add .
git commit -m 'add files'
git push origin main
[用户名:hukey]
[密码:hukey登录密码]

提交成功后,在浏览器刷新项目:

image-20230223111508059

代码已经同步到服务器gitlab仓库了。为了真实性,为 spring-demo项目添加一个开发者。

点击成员

image-20230223111628247

邀请成员 -> gitlab成员选择 -> 角色选择【开发者】-> 点击邀请

image-20230223111704418

切换到开发者用户。开发者登录后可直接查看spring-demo项目

image-20230223111844553

将项目克隆到本地,随意添加点文件并提交

git clone http://192.168.199.101/hukey/spring-demo.git
cd spring-demo/
#创建新的分支
git checkout -b dev
#随意拷贝一个文件
cp -a /etc/fstab ./
git config --global user.name "xiaofei"
git add .
git commit -m 'add fstab'
#提交新的分支
git push origin dev

刷新项目,可以看到多了一个dev分支,该分支多了一个fstab文件

image-20230223112931811

提交也产生了记录

image-20230223113025824

以上,都是为备份恢复提供前提。通过模拟真实使用场景。

3. 备份gitlab

docker exec gitlab gitlab-rake gitlab:backup:create
...
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.

Backup task is done.

注意:上述告警信息表示 gitlab.rb 和 gitlab-secrets.json 未备份,如果gitlab.rb 修改较多,则自行备份。我这里使用的默认配置,则不用备份了。

备份完成后,备份文件目录:

#注意文件名是通过时间设定的
/var/opt/gitlab/backups/1677123555_2023_02_23_14.2.3_gitlab_backup.tar

将备份文件拷贝到本地:

docker cp gitlab:/var/opt/gitlab/backups/1677123555_2023_02_23_14.2.3_gitlab_backup.tar ./gitlab/backup/

4. 恢复gitlab

4.1 搭建gitlab服务

搭建gitlab 参考上文 2.1 和 2.2 即可。

4.2 拷贝备份文件至容器内

#将备份文件拷贝到容器中对应的目录下
docker cp 1677123555_2023_02_23_14.2.3_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/
#注意:这里需要修改文件权限,否则会报没有权限执行
docker exec -it gitlab bash
chown -R git:git /var/opt/gitlab/backups/1677123555_2023_02_23_14.2.3_gitlab_backup.tar

4.3 关闭容器内相关数据连接服务

注意:恢复备份文件前,先停止容器内相关数据连接服务:

gitlab-ctl stop puma
gitlab-ctl stop sidekiq

4.4 还原备份文件

gitlab-rake gitlab:backup:restore
...
Do you want to continue (yes/no)? yes
...
Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

注意:出现如上的报错处理方案如下:

1. 修改postgresql配置
vi /var/opt/gitlab/postgresql/data/postgresql.conf
#如下修改:
listen_addresses = '*'

vi /var/opt/gitlab/postgresql/data/pg_hba.conf
#最后添加:
local   all         all                               trust
host    all         all                               127.0.0.1/32 trust


2. 重启gitlab服务
gitlab-ctl restart

3. 修改gitlab账号为超级用户
su - gitlab-psql
/opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
ALTER USER gitlab WITH SUPERUSER;
\q
exit

经过上面的修改后,报错解决,再次执行还原备份文件:

gitlab-rake gitlab:backup:restore
...
Restore task is done.

还原备份文件成功。

4.3 验证恢复备份

使用管理员 hukey 登录后,查看项目没有问题。

  • main分支完整
  • dev分支多一个fstab文件
  • 提交信息里三条记录

image-20230223150329920

image-20230223150442837

综上,实验演示了gitlab备份的完整性和恢复的完整性。


--- EOF ---

标签:opt,容器,git,备份,gitlab,192.168,backup
From: https://www.cnblogs.com/hukey/p/17148065.html

相关文章

  • Mysql数据库增量备份与恢复
    一、MySQL增量备份概念使用mysqldump进行完全备份,备份的数据中有重复数据,备份时间与恢复时间长。而增量备份就是备份自上一次备份之后增加或改变的文件或内容。1、增量......
  • Mysql数据库完全备份与恢复
    一、数据备份的重要性  在生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果。造成数据丢失的原因如下:程序错误人为错误运算错误磁盘失败灾难(如......
  • 【KAWAKO】从mac上定时将腾讯云的数据备份到本地
    目录前言需求宝塔面板备份网站备份数据库mac端创建工程文件夹rua.pyruastdoutplistReference前言不信任一切云端平台,把数据牢牢握在自己手中才是最安全的。需求使用腾......
  • Docker Desktop配合WSL和IDEA进行Java服务的打包+镜像构建+容器运行测试
    在Windows1022H2+的版本可以使用WSL(WindowsSubsystemforLinux或叫 WindowsSupportLinux)了,即Windows内置的Linux子系统!它对于在Windows下工作的容器化微服务开......
  • 大规模 IoT 边缘容器集群管理的几种架构-4-Kubeedge
    前文回顾大规模IoT边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模IoT边缘容器集群管理的几种架构-1-Rancher+K3s大规模IoT边缘容器集群管理的几种架构-......
  • mysql备份
    mysql备份1.备份的分类完全备份增量备份差异备份2.备份的方式1,使用专用的备份工具---mysqldump(1)对单个库进行完全备份mysqldump-h[mysql_address]-u[userna......
  • SONiC系统第三方容器管理
    SONiC系统采用基于容器的架构,包括Redis数据库在内的几个核心部件是运行在操作系统之上的几个容器应用,这个从SONiC的软件架构图上可以明确地看出来。SONiC系统采用基于容器......
  • Spring IOC官方文档学习笔记(十二)之基于Java的容器配置
    1.@Bean与@Configuration(1)标注于类之上的@Configuration注解与标注于方法之上的@Bean注解是支持基于Java的容器配置的核心,被@Bean注解标注的方法用于实例化bean并将其......
  • C++ vector容器
    日常使用方法,当作是数据类型好了初始化:intN=5;//元素个数intarray1={1,2,3,4,5,6};vector<int>a(N);//创建固定大小,默认为0vector<int>a(N,M);//......
  • leetcode 11. 盛最多水的容器
    首先最好想的,肯定就是暴力解法,但是太慢了。classSolution{publicintmaxArea(int[]height){intmax=0;for(inti=0;i<height.length......