gitlab
buyfakett
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
复制到新机器重启服务