gitlab

buyfakett

gitlab

官方文档open in new window

启动

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.rbgitlab-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.rbgitlab-secrets.json复制到新机器重启服务

Last Updated 6/24/2024, 6:22:05 AM