代码仓库,除了用来管理代码外,还有一个很重要的用途,就是后面用于CI/CD的构建,本来想用gitlab,研究后发现免费版有仓库容量限制,只限2G,经过进一步调研决定使用gitea来作为代码仓库。安装步骤如下:
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
如果报有冲突发生,利用下面命令删除冲突的组件
yum erase podman buildah -y
在服务器 10.10.10.2 分别创建 /home/software/gitea/data和/home/software/gitea/config两个目录,然后授权这个两个目录chown 1000:1000 data config
docker run -d --privileged=true --restart=always --name=gitea -p 3022:22 -p 3000:3000 -v /home/software/gitea/data:/data -v /home/software/gitea/config:/etc/gitea gitea/gitea
访问 http://10.10.10.2:3000/ 打开配置页面,个人这里最好选择用sqlite3,方便后面一起备份,不用分开程序备份与数据库备份
curl https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/sbin/mc #下载命令行客户端
chmod 777 /usr/local/sbin/mc #授权命令行客户端
mc alias set miniobackup https://10.10.10.1:9090 用户名 密码 --insecure
#建立Minio访问别名,https://10.10.10.1:9090 是Minio 接口地址,具体可以见第一步Minio安装命令
mc mb miniobackup/git-backup --insecure
#建立专门用来保存备份的桶
echo "Creating gitea backup inside docker containter ..."
docker exec -u git -w /tmp $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini --file /tmp/gitea-dump.zip'
echo "Copying backup file from the container to the host machine ..."
docker cp $(docker ps -qf "name=gitea"):/tmp/gitea-dump.zip /tmp
echo "Removing backup file in container ..."
docker exec -u git -it -w /tmp $(docker ps -qf "name=gitea") bash -c 'rm /tmp/gitea-dump.zip'
echo "Renaming backup file ..."
BACKUPFILE=gitea-dump-$(date +"%Y%m%d%H%M").zip
mv /tmp/gitea-dump.zip /home/software/backup/gitea/$BACKUPFILE
echo "Backup file is available: "$BACKUPFILE
echo "Copy " $BACKUPFILE "to minio"
/usr/local/sbin/mc cp $BACKUPFILE miniobackup/git-backup --insecure
echo "Remove " $BACKUPFILE
rm -f $BACKUPFILE
echo "Gitea backup Done."
注意标红文字:
1)name=gitea中的gitea是gitea容器的名称,具体见上面安装说明
2) mc一定要输入全路径,否则设定定时任务时会报找不到mc命令
3)将上述命令保存到一个sh里面,然后用crontab -e设定定时执行,例如:0 */12 * * * sh /home/software/backup/gitea/backup.sh 每12小时执行一次
1)假设现在机器已经崩溃,之前gitea的数据全部丢失,先按照上面部署方法,用docker重新部署一个新的gitea
2)从Minio下载备份zip文件,通过如下命令,复制到新的gitea容器/tmp目录
docker cp gitea-dump-202304071610.zip gitea:/tmp
3)进入gitea容器,并解压备份zip文件
docker exec -u root -it -w /tmp gitea /bin/bash
unzip gitea-dump-202304071610.zip
4)在gitea容器里面用备份文件替换新文件
cp -rf data/* /data/gitea/
cp -rf repos/* /data/git/repositories/
5)在gitea容器里面重新授权git用户,这一步一定要做,否则gitea容器服务重启
chown -R git:git /data
6)退出gitea容器,exit
7)用git用户重新登录gitea容器
docker exec -u git -it gitea /bin/bash
8)在gitea容器里面按照gitea文档重新运行初始化命令
/usr/local/bin/gitea -c '/data/gitea/conf/app.ini' admin regenerate hooks
9)退出gitea容器,exit
10)重启gitea容器,docker restart gitea
11)通过浏览器访问,亲测能看到原来的数据