Gitlab和Confluence和Svn的备份

Gitlab和Confluence和Svn的备份

一、Gitlab的备份如何做

按道理,看到这里的,一般已经是容器已经在运行了,想起来备份还没做的,下次记得一次性搞定做完。
如果是业务运行时间,不要重新配置,找一个空闲时间做,或者提前发通知

1.首先你需要一个在宿主机上存储备份文件的地方

例如是:/data/nasmnt/gitbackup

然后假设你有NAS,可以在NAS上新建一个目录出来,然后在宿主机上把NAS的远端目录挂载到宿主机本地的备份目录/data/nasmnt/gitbackup

如果你有其他大存储设备,也可以这样做,把备份异地存放

如果你没有大存储设备,也可只存放在宿主机本地。
例如这里我选定的存储目录是/data/nasmnt/gitbackup,并且把这个挂载到远程NAS上,相当于异地备份了。

然后需要把这个目录进行持久化。我这里Gitlab是用compose做的,比较方便修改,如图:

这里容器内持久化的目录是/var/opt/gitlab/backups,(这个到时候修改容器配置文件即可)

然后重启一下容器即可。

然后进入容器修改对应配置文件

shell 复制代码
# 1.进入容器修改gitlab的配置文件
docker exec -it 3e2770414ea7 /bin/bash
vim /etc/gitlab/gitlab.rb
#在配置文件最后一行写入如下配置:
gitlab_rails['manage_backup_path'] = false   # 关闭gitlab自动管理备份路径的权限
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"  # 指定备份的路径(就是上方持久化的那个容器目录路径)
gitlab_rails['backup_archive_permissions'] = 0644   # 设置生成备份文件的权限
gitlab_rails['backup_keep_time'] = 97200    # 设置备份文件保留时间(单位:秒) 这里是27h
gitlab_rails['env'] = {
    "SKIP" => "artifacts"     # 在备份过程中跳过Ci/CD 构建的产物(节省磁盘空间)
}
保存退出!
# 重新配置 GitLab(会重新解析 gitlab.rb)
gitlab-ctl reconfigure
# 重启 GitLab 服务
gitlab-ctl restart
shell 复制代码
# 2.退出容器,并写备份的脚本以及设定备份定时任务即可。
#备份脚本:gitlab-backup.sh
####################################################
#!/bin/bash
start_time=$(date +%s)
human_starttime=`date + '%Y-%m-%d %H:%M:%S'`
logfile="/var/log/gitlab_backup.log"
echo "### start Gitlab-Backup, starttime[${human_starttime}]"

#backup gitlab skip artifacts, cron=1  means the backup tar can be used in another machine.
docker exec gitlab gitlab-rake gitlab:backup:create SKIP=artifacts CRON=1

end_time=$(date +%s)
usedtime=$(end_time - start_time)
echo "### Finised Gitlab_Backup ,usetime[${usedtime} seconds]"
#####################################################################

# 写入定时任务:
vim /etc/crontab
0 1 * * * root sh /opt/script/gitlab-backup.sh >> /var/log/gitlab_backup.log 2>&1

如果遇到权限问题,建议直接把宿主机的目录设为777
sudo chmod 777 /data/nasmnt/gitbackup

二、Confluence的备份如何做

shell 复制代码
# 脚本如下
#####################################
#!/bin/bash
set -e
start_time=$(date +%s)

function retain_latest_files() {
    local dir="$1"
    local prefix="$2"
    local num_to_keep=${3:-2}

    # 检查参数是否为空
    if [ -z "$dir" ] || [ -z "$prefix" ]; then
        echo "Usage: retain_latest_files directory_path file_prefix [num_to_keep]"
        return 1
    fi

    # 获取所有匹配文件,并按照时间戳排序
    sorted_files=($(find "$dir" -maxdepth 1 -type f -name "${prefix}*\.sql" | sort -t '_' -k 2,5n))

    # 确保至少有指定数量的文件才开始删除操作
    if [ ${#sorted_files[@]} -ge $num_to_keep ]; then
        # 删除除最新指定数量个以外的所有文件
        for file in "${sorted_files[@]:$num_to_keep}"; do
            echo "delete file $file"
            rm -rf "$file"
        done
    fi

    echo "Retained the $num_to_keep most recent files:"
    printf "\t%s\n" "${sorted_files[@]:0:$num_to_keep}"
}

datetime=$(date +'%Y%m%d%H%M%S')
human_starttime=$(date '+%Y-%m-%d %H:%M:%S')
targetdir='/data/nasmnt/kbbackup'
sqlbackfile="${targetdir}/kb_${datetime}.sql"

# only a readonly user for database confluence
mysql_host='172.20.50.102'
mysql_user='dumper'
#单独创建的用户用于备份,密码不在这里存储。
mysql_p='xxxxx!'
dbname='confluence'

kbhome='/data/docker-compose/kb/confluence'

echo "####Start KB_BACKUP[time:$human_starttime]"

echo "step1: backup mysql db"
mysqldump -u ${mysql_user} -h ${mysql_host} -p${mysql_p} --max_allowed_packet=512M ${dbname} > ${sqlbackfile}

echo "step2: only keep 1 backup kb_xxx.sql"
retain_latest_files "$targetdir" "kb_" 1

echo "step3: backup kb homedir"
rsync -avz "${kbhome}" "${targetdir}"

end_time=$(date +%s)
usedtime=$((end_time - start_time))

echo "####Finished KB_BACKUP[used:${usedtime} seconds]"
#####################################

写入定时任务:

vim /etc/crontab

0 3 * * * root sh /opt/script/confluence-backup.sh >> /var/log/confluence_backup.log 2>&1

如果遇到权限问题,建议直接把宿主机的目录设为777

sudo chmod 777 /data/nasmnt/confluence_backup

三、Svn的备份如何做

增加 持久化备份目录,并重启容器
-v data/nasmnt/svnbackup/:/home/svnadmin/backup

创建宿主机本机备份目录,例如/data/nasmnt/svnbackup,有NAS的可映射到NAS上。

在SVN管理员的web界面,添加备份任务即可

每周六 1:30全量备份,保留副本数1

相关推荐
ℳ₯㎕ddzོꦿ࿐9 小时前
告别手工发版:用 GitLab CI/CD 打通前后端自动化部署的“任督二脉”
ci/cd·自动化·gitlab
ℳ₯㎕ddzོꦿ࿐10 小时前
实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南
linux·docker·gitlab
源图客10 小时前
Linux(CentOS9)服务器部署gitlab-ce-18.11.1-ce.0.el9.x86_64.rpm
linux·服务器·gitlab
ℳ₯㎕ddzོꦿ࿐11 小时前
实战篇:结合 GitLab CI/CD 实现 Spring Cloud 微服务自动化部署与防坑指南
spring cloud·ci/cd·gitlab
菜萝卜子1 天前
【Git】GitLab 18.9 全局服务器钩子(Server Hooks)官方规范与落地实践
服务器·git·gitlab
长沙红胖子Qt1 天前
SVN培训笔记(四):使用sourceTree时,PC硬盘或者移动硬盘更换电脑后sourceTree无法拉取同步和推送已有项目管理的处理方法
svn·sourcetree管理svn·sourcetree迁移git·git svn
lilili也2 天前
Git、VScode、GitLab
git·vscode·gitlab
郭龙_Jack3 天前
Gitlab CICD流水线设计
gitlab
金融小师妹3 天前
AI多因子定价模型:美元强化与能源约束下 黄金反弹受限弹性解析
深度学习·svn·逻辑回归·能源
Irene19913 天前
推荐 win11 可用的 SVN 版本:64位,下载最新的 TortoiseSVN 1.14.x 版本
svn