logo
tt's Note
  • 运维
    • 数据库
    • linux
    • vpn
    • 日志
    • 中间件
    • 服务
    • 监控
    • shell
    • windows
    • 语言
    • 云服务
    • 其他
  • 开发
    • 工具
  • 软件
    • 浏览器
    • 多端
    • win
    • mac
    • 网站
  • 项目
    • 效率工具
    • 兴趣
  • 脚本
    • jenkins
    服务概览
    ansible
    chrony时间服务器
    dnsmasq
    ffmpeg
    frp
    ftp
    gitea
    gitlab
    jenkins
    lsyncd
    minio(私有化oss)
    nacos
    nexus3(私有仓库)
    ossftp
    redmine
    registry(docker私有仓库)
    saltstack
    svn
    上一页gitea下一页jenkins

    #gitlab

    官方文档

    #启动

    docker run \
      -d \
      -p 8080:80 -p 8022:22 \
      -v ./config:/etc/gitlab \
      -v ./logs:/var/log/gitlab \
      -v ./data:/var/opt/gitlab \
      --privileged=true \
      --restart always \
      --name gitlab \
    gitlab/gitlab-ce:13.6.1-ce.0
    

    #备份与恢复

    #备份

    #!/bin/bash
    
    # 同步文件
    function sync_file() {
        cmd_status=1
        run_times=0
        while [ ${cmd_status} != 0 ] && [ ${run_times} -le 3 ]; do  # 连续失败 3 次
            run_times=$((${run_times} + 1))
            cp -vrf $1 $2
            cmd_status=$?
        done
        if [ ${cmd_status} -eq 1 ];then
            rm -rf $1
        fi
    }
    
    function backup_gitlab() {
    	rm -f ${GITLAB_DIR}/data/backups/*.tar
    	rm -rf ${GITLAB_DIR}/.cache/ && mkdir -p ${GITLAB_DIR}/.cache/
    
    	echo "开始备份"
    	docker exec -t gitlab gitlab-backup create
    	# 查找目录中的 .tar 文件,并将结果保存到一个数组中
    	tar_files=$(ls ${GITLAB_DIR}/data/backups/*.tar 2>/dev/null)
    
    	# 获取数组的长度
    	num_tar_files=${#tar_files[@]}
    
    	# 检查 .tar 文件的数量
    	if [ "$num_tar_files" -ne 1 ]; then
    		echo "有多个备份文件, 退出!!!"
    		exit 1;
    	fi
    
    	cp ${GITLAB_DIR}/config/gitlab.rb ${GITLAB_DIR}/.cache/
    	cp ${GITLAB_DIR}/config/gitlab-secrets.json ${GITLAB_DIR}/.cache/
    	cp ${tar_files[0]} ${GITLAB_DIR}/.cache/
    
    	tar -czvf ${GITLAB_DIR}/.cache/$(hostname).tar.gz -C ${GITLAB_DIR}/.cache/ .
    
    	mkdir -p ${BACKUP_DIR}/${BACKUP_DATE}/ && sync_file ${GITLAB_DIR}/.cache/$(hostname).tar.gz ${BACKUP_DIR}/${BACKUP_DATE}/
    }
    
    [[ -f ${GITLAB_DIR}/config/gitlab.rb ]] && { echo "gitlab.rb 不存在, 退出!!!" && exit 1; }
    [[ -f ${GITLAB_DIR}/config/gitlab-secrets.json ]] && { echo "gitlab-secrets.json 不存在, 退出!!!" && exit 1; }
    
    # gitlab路径
    GITLAB_DIR="/data/app/gitlab"
    # 备份日期
    BACKUP_DATE=$(date +%Y-%m-%d)
    # 备份存放的目录
    BACKUP_DIR=/data/oss/backup-mn-sh/git
    # 日志文件
    LOG_FILE=${LOG_FILE:-"backup-$(date +%Y-%m-%d).log"}
    # 日志目录
    LOG_DIR=${LOG_DIR:-"log"}
    mkdir -p ${LOG_DIR}/ && backup_gitlab >> ${LOG_DIR}/${LOG_FILE} 2>&1
    
    Tip

    注:备份不会备份gitlab.rb和gitlab-secrets.json,需要自行备份

    #恢复或迁移

    在新机器上启动实例后,把备份文件移动到对应目录

    backup_name="1710387127_2024_03_14_13.6.1"
    
    docker exec -it gitlab bash
    
    cd /var/opt/gitlab/backups/
    chown git:git ${backup_name}_gitlab_backup.tar
    # 填写_gitlab_backup.tar之前的字符串
    gitlab-backup restore BACKUP=${backup_name}
    

    然后输入两次yes

    最后把旧机器上的gitlab.rb和gitlab-secrets.json复制到新机器重启服务