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

