docker部署的GitLab代码自动备份

本文介绍如何在CentOS 7环境下使用Docker部署的GitLab实现自动备份,并通过crontab定时执行备份任务,最后将备份文件通过scp命令上传至另一台服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前提

之前使用docker部署了一个GitLab,其容器启动时的参数如下:

# docker run -d --hostname gitlab.example.com\
    -p 443:443 -p 8181:80 -p 2222:22 \
    --name gitlab \
    --restart always \
    -v /srv/gitlab/config:/etc/gitlab \
    -v /srv/gitlab/logs:/var/log/gitlab \
    -v /srv/gitlab/data:/var/opt/gitlab \
    -v /etc/localtime:/etc/localtime
    gitlab/gitlab-ce:latest

现在想实现GitLab的自动备份。

系统是centos7


二、手动备份

因为采用docker安装,只有进入GitLab的docker容器(本例子名字为gitlab)内,有关于gitlab-rake gitlab:backup:create 命令只能在gitlab容器内使用,所以在手动备份时,需要进入容器。

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

可以在系统的/srv/gitlab/data/backups目录下会多一个“**.tar”的文件


三、自动备份

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

1、cron服务的启停

/sbin/service crond start 服务启动
/sbin/service crond stop  服务停止
/sbin/service crond restart 服务重新启动
/sbin/service crond reload  服务重新加载配置

系统在root用户下,crontab -e 命令编辑设置定时任务。

2、设置cron服务开机启动

在/etc/rc.d/rc.local脚本中加入/sbin/service crond start 即可。

3、cron基本格式

*  *  *  *  *  command
分  时  日  月  周  命令

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

4、GitLab自动备份

  • 新建备份的sh文件:在/root 下新建gitlab_backup.sh ,内容如下:

    #! /bin/bash
    case "$1" in 
        start)
                docker exec gitlab gitlab-rake gitlab:backup:create
                ;;
    esac
    
  • 测试 执行gitlab_backup.sh start,如果/srv/gitlab/data/backups 下有新生成的tar包,即可说明sh文件写对了。

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

    0 2 * * * /root/gitlab_backup.sh start
    

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


四、定时将备份上传到另一台服务器

主要通过scp在Linux系统之间进行文件传输,scp是基于SSH登录的,需要我们进行免密码登录的操作。

1、安装sshpass

     wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 
     tar xvzf sshpass-1.05.tar.gz 
     进入解压后文件夹
     ./configure 
     make 
     make install

此时sshpass安装完成。

2、设置gitlab_upload.sh

/root 下新建gitlab_upload.sh ,内容如下:

#! /bin/bash
backdir='/srv/gitlab/data/backups'
latestFileName=`ls $backdir -t|head -n 1`

cd "$backdir"
sshpass -p [passwd] scp "$latestFileName" root@[hostID]

定时任务的设定同上。

### 使用Docker部署GitLab LFS 为了成功使用Docker部署带有LFS支持的GitLab实例,需遵循一系列配置操作。首先确认本地环境已正确安装并运行Docker服务[^2]。 #### 安装依赖项 确保主机上已经安装了必要的软件包来支持Docker容器正常运作。对于大多数Linux发行版而言,这通常意味着更新系统包列表,并通过官方渠道安装最新版本的Docker Engine以及相关工具链。 ```bash sudo apt-get update && sudo apt-get upgrade -y ``` #### 配置Docker网络 为使多个容器间能够相互通信,在启动任何应用之前建议先定义好自定义桥接网络: ```bash docker network create gitlab-network ``` 此命令创建了一个名为`gitlab-network`的新网络,后续用于连接各个组件以便它们可以相互识别和服务发现。 #### 下载并准备GitLab镜像 从官方仓库拉取最新的稳定版GitLab CE(Community Edition),同时指定标签以获取包含LFS功能的支持版本: ```bash docker pull gitlab/gitlab-ce:latest ``` 注意:如果计划长期维护生产环境中使用的GitLab服务器,则应考虑采用特定版本而非始终追踪`latest`标记以防不兼容变更影响现有流程。 #### 启动GitLab容器 利用先前建立好的网络设置参数化地初始化一个新的GitLab实例,重点在于挂载宿主目录作为持久化存储位置(`/srv/gitlab`)保存重要数据文件;另外还需暴露HTTP(S)端口供外部访问[^1]: ```bash docker run --detach \ --hostname gitlab.example.com \ --publish 80:80 --publish 443:443 --publish 22:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ --network=gitlab-network \ gitlab/gitlab-ce:latest ``` 上述脚本中的`--hostname`, `--publish`选项可根据实际情况调整至匹配域名/IP地址及所需监听端口号。而关于SSL证书管理部分则默认由Omnibus GitLab处理程序自动完成,当然也允许手动介入定制更高级别的安全策略。 #### 开启LFS特性 一旦GitLab平台上线完毕,默认情况下即自带对大型二进制对象上传下载能力的支持——只需进入Web界面依次导航至Admin Area -> Settings -> General -> Visibility and access controls找到Enable Git LFS复选框打勾即可激活该项增值服务。 此外,针对开发者客户端侧还需要额外执行如下指令克隆远程项目时同步启用相应模式: ```bash git lfs install git clone http(s)://<your-gitlab-server>/path/to/repo.git cd repo git lfs track "*.ext" git add .gitattributes git commit -m "Track files with Git LFS" git push origin master ``` 这里`.ext`代表希望受控于LFS机制下的扩展名通配符表达式,具体取决于实际业务场景需求灵活设定。 最后值得注意的是,尽管当前描述侧重于单机方案实现路径,但在面对更大规模集群架构设计时往往还会涉及到更多复杂考量因素,比如高可用性(HA), 数据备份恢复, 性能优化等方面的内容均值得深入探讨研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值