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

相关推荐
disgare4 天前
SVN 使用教程总结
svn
Gazer_S4 天前
【GitLab npm Registry 非标准端口安装问题解决方案】
前端·npm·gitlab
-KamMinG4 天前
Gitlab版本升级方案-13.x到17.x
gitlab
金融小师妹5 天前
基于AI通胀预期建模与能源冲击传导机制的政策分析:高频信号下的风险再评估
人工智能·svn·能源
Digitally5 天前
无需 iTunes,如何将文件从电脑传输至 iPad?
svn·电脑·ipad
菜鸡00016 天前
把一个项目传到 GitLab 的某个群组
大数据·elasticsearch·gitlab
AlbertS7 天前
记一次推送lfs失败不能迁移git仓库到新的gitlab的问题
git·ai·gitlab·lfs·rejected
日更嵌入式的打工仔7 天前
Windows 下 GitLab 完整使用指南
windows·gitlab
会飞的大可7 天前
Jenkins vs GitLab CI/CD:2026 企业级 CI/CD 工具深度选型评测
ci/cd·gitlab·jenkins
金融小师妹7 天前
AI利率路径重估:降息预期消退下,金价月度回撤超14%深度解析
深度学习·svn·逻辑回归·能源