docker gitlab备份与还原

太白
2022-05-06 / 0 评论 / 0 点赞 / 602 阅读 / 2,802 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-05-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

安装docker版本gitlab教程,参考本站文档:docker部署gitlab教程

前言:gitlab目前支持同版本之间进行数据迁移,例如原来是13.5.4版本,那么需要还原的也需要是13.5.4版本的gitlab,文件需要三个,如下
资源文件:/home/gitlab/data/backups 中的 *****_13.5.4_gitlab_backup.tar
密钥文件:/home/gitlab/conf 中的 gitlab-secrets.json
配置文件:/home/gitlab/conf 中的 gitlab.rb


1、手动备份操作

方式一:容器内操作备份

# 查看容器id
docker ps

# 进入容器 示例:docker exec -it -i 4c97d29eee9b /bin/bash
docker exec -it -i <这里是容器id> /bin/bash

# 执行备份命令
gitlab-rake gitlab:backup:create

方式二:容器外操作备份

docker exec gitlab bash gitlab-rake gitlab:backup:create

备份后的文件,可在docker容器的/var/opt/gitlab/backups文件夹中查看,也可在系统的/home/gitlab/data/backups文件夹中查看

2、定时自动备份

用crontab定时执行任务,cron服务是Linux的内置服务,但是其不会自动开机启动

  • 自动备份脚本。新建备份的sh文件:在/root 下新建gitlab_backup.sh

    vi /root/gitlab_backup.sh
    
  • gitlab_backup.sh中内容如下:

     #! /bin/bash
     
     echo "备份-开始备份gitlab代码"
     docker exec gitlab gitlab-rake gitlab:backup:create
     echo "备份-完成备份gitlab代码"
    
  • 测试执行,如果/home/gitlab/data/backups` 下有新生成的tar包,即可说明sh文件写对了

     sh gitlab_backup.sh
    
  • 新增定时任务:使用crontab -e 进入定时任务编辑界面,新增如下内容:

    # 每天凌晨2点执行备份脚本,文章底部有cron格式说明
     0 2 * * * /root/gitlab_backup.sh start
    
  • 设置cron服务开机启动(因为默认不会开机启动crond)

    vi /etc/rc.d/rc.local
    
    # 在最后一行加入`/sbin/service crond start`
    
  • cron服务的启停(常用命令)

    /sbin/service crond start 服务启动
    /sbin/service crond stop  服务停止
    /sbin/service crond restart 服务重新启动
    /sbin/service crond reload  服务重新加载配置
    
  • cron基本格式

    *  *  *  *  *  command
    分  时  日  月  周  命令
    
    其中,
    第1列表示分钟,1~59,每分钟用*表示
    第2列表示小时,1~23,(0表示0点)
    第3列表示日期,1~31
    第4列表示月份,1~12
    第5列表示星期,0~6(0表示星期天)
    第六列表示要运行的命令。
    

    保存,重新加载配置和启动或重启cron服务即可。对于开机自启动cron服务,需要reboot验证

3、还原gitlab备份文件

1、需要准备一台新的gitlab服务,并且版本与备份的那台一致,如没有则参照:参考本站文档:docker部署gitlab教程

2、恢复备份

# 把第一台服务器备份的 1682571554_2023_04_27_13.5.4_gitlab_backup.tar 文件拷贝到新gitlab的/home/gitlab/data/backups目录中
cp 1682571554_2023_04_27_13.5.4_gitlab_backup.tar /home/gitlab/data/backups

# 进入容器 示例:docker exec -it -i 4c97d29eee9b /bin/bash
docker ps
docker exec -it -i <这里是容器id> /bin/bash
# 修改权限
chmod 777 /var/opt/gitlab/backups/1682571554_2023_04_27_13.5.4_gitlab_backup.tar
chown -R git:git /var/opt/gitlab/backups/1682571554_2023_04_27_13.5.4_gitlab_backup.tar

# 恢复备份文件前,先停止容器内相关数据连接服务
gitlab-ctl stop puma
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 最好修改下数据权限,不然恢复容易报错
# 修改postgresql配置
vi /var/opt/gitlab/postgresql/data/postgresql.conf
# 如下修改:
listen_addresses = '*'

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

# 重启gitlab服务
gitlab-ctl restart

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

# 恢复备份文件前,先停止容器内相关数据连接服务
gitlab-ctl stop puma
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 恢复备份, 后面的数字是 1682571554_2023_04_27_13.5.4_gitlab_backup.tar文件的前面一部分
gitlab-rake gitlab:backup:restore BACKUP=1682571554_2023_04_27_13.5.4

# 重启服务
gitlab-ctl restart

# 拷贝配置文件
cp gitlab-secrets.json  /home/gitlab/conf/
cp gitlab.rb  /home/gitlab/conf/

# 重启服务
gitlab-ctl restart

实际使用中,/home/gitlab/data/backups中的备份文件清除了就会报错【backup_information.yml、db、repositories】这三个,所以我这边在gitlab.rb中修改了backups的默认文件夹

0

评论区