使用gitea通过码云完整克隆github源码库到本地备份(Windows Docker环境)

1、前言

  在搭建Gitlab私服的过程中,与老同事进行了交流,一个老同事又向我推荐了gitea,这个东东最大的好处就是支持从远端的github上将库完整的拽到本地,以便快速访问,只是碍于github在国内访问糟糕的网速,所以真正需要备份完整github库还需要从gitee上绕一圈,下面我就将在Windows Docker环境中搭建的过程分享给大家。

2、gitea简介

  Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。

  它是跨平台的,支持 Linux、macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC。

  本质上它还是一个Git的服务端,与Gitlab类似,但它还具有从Github端直接复制库的能力。我们主要就是利用这个能力。

  另外在Windows平台上有专门的Gitea的exe安装包,与windows完全兼容,大家也可以直接使用。这里就主要针对docker方式下如何搭建展开讨论,同时docker下的搭建方式也可以用于linux。具体用哪个就看个人喜好吧。

3、搭建gitea的yaml文件

  在gitea官方,推荐使用 docker-compose使用下面的YAML来启动gitea的容器:

version: "2"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST=db:3306
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
     ports:
       - "3000:3000"
       - "222:22"
    depends_on:
      - db

  db:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
   networks:
      - gitea
    volumes:
      - ./mysql:/var/lib/mysql

  这个文件内容很好理解,就是最终运行一个gitea + mysql的组合服务,作为一个gitea运行的单元,也就是使用mysql来作为gitea的后台数据库。相应的gitea还可以使用其他的数据库,也可以使用它默认的SQLet数据库,相关的YAML文件都可以在官网找到,这里就不再复制粘贴浪费篇幅了。

  这里要提醒各位的是,因为Windows Docker环境的特殊性,那么这里的YAML文件直接运行往往会因为Windows系统与Linux系统文件权限管理方式的不同而以失败告终。但在Windows Docker环境下可以用Volume的方式挂载卷来持久化数据。关于数据持久化及保护的问题,在前面几篇文章中已经讲过了,这里就不再啰嗦了。

  之所以粘贴这个YAML文件,主要是分析如果要在Windows Docker环境下启动一个gitea的容器,需要做些什么。从文件中可以看出,如果要使用Mysql来搭建gitea话需要先启动一个mysql 5.7版的容器,参数都已经清楚了,这个很容易翻译成docker run命令,需要注意的就是首先忽略文件中创建的容器间专用网络gitea,因为是本地搭建,这个没什么必要,但是如果是其它应用,还是老老实实建网络为好。另一个要注意的问题就是volumes部分的参数,就全部改用卷,同时gitea的两个只读的挂载也就忽略了,因为是Windows Docker环境,无法挂载。

4、在Windows Docker中搭建gitea

  首先按照前述的YAML文件中的参数,翻译为docker run命令,创建一个MySQL 5.7的容器:

docker volume create gitea_db
docker run --name gitea_mysql -d --privileged=true -p 3306:3306  -e "MYSQL_ROOT_PASSWORD=gitea" -e "MYSQL_USER=gitea" -e "MYSQL_PASSWORD=gitea" -e "MYSQL_DATABASE=gitea" -v gitea_db:/var/lib/mysql mysql:5.7

  上面这个命令中要注意的地方就是-p参数将端口暴露到了本机的3306口,这就要首先保证本机3306口没有被占用,当然这个也可以省略,因为在启动gitea容器时使用–link参数,就可以直接挂接mysql容器,gitea知道mysql的默认端口是3306,不用暴露到主机。这里暴露主要是为了方便有好事者可以从本机用mysql工具连接进去查看下里面的数据。😉

  接着就可以根据YAML中的参数,翻译为docker run命令,创建gitea的容器了,并且挂载刚才的mysql数据库:

docker volume create gitea_data
docker run --name gitea -d --privileged=true -p 322:22 -p 8000:3000 -v gitea_data:/data --link gitea_mysql:db -e "USER_UID=1000" -e "USER_GID=1000" -e "DB_TYPE=mysql" -e "DB_HOST=db:3306" -e "DB_NAME=gitea" -e "DB_USER=gitea" -e "DB_PASSWD=gitea" gitea/gitea

  注意上面参数中,将gitea的3000端口暴露到了主机的8000端口上,主机浏览器中输入http://localhost:8000/ 即可访问。初次访问时一定注意设定gitea的管理原账号和密码,不然就无法登陆了。

5、在gitee上先导入github库

  打开自己的gitee账号,按下图操作,从自己的github账号中将所有库都导到gitee中:

在这里插入图片描述

  这里要注意的就是,目前gitee有库大小限制,很多体积大的库没法搬过来,有条件的网友可以通过申请gitee的企业账号后搬迁。

6、从gitee上将库导入到本地gitea

  接着访问刚搭建的本地gitea环境,然后按照下图所示顺序操作,从gitee上将库导入到本地进行备份:(最后一步就是点击迁移仓库按钮)
在这里插入图片描述

  最终库迁移时长根据库大小以及网络带宽情况耗时不同。

7、设置本地仓库属性重新指向github并定时同步

  导入本地结束后,打开本地gitee导好的库,按照下图操作,打开仓库设置:

在这里插入图片描述

  滚动到镜像设置属性页,按照下图所示步骤,将github对应库的url复制粘贴进去,并输入github对应的账号密码后点击更新,使代码库又重新指向github,并定时同步更新,也可以手动同步:

在这里插入图片描述
  更新后:

在这里插入图片描述
  注意可以通过在镜像间隔后面的框中输入不同的数组字母组合按照规则指定库自动更新的周期。这样就完成了将远端的github库整体搬迁到本地的工作,需要注意的是,貌似现在gitee不会复制github中的release中的编译结果过来,所以下载各种编译后的软件版本还是要绕回github,并忍受令人抓狂的网速。

  当然gitea本身就可以被当做git server来使用,本地客户端就主要用git来访问即可。关于git的操作就不啰嗦了。这样本地的gitea也可以被用来放置私有的代码库,这样克隆的公共开源库和本地私有代码库就可以统一在一个server端进行管理。具体是用gitlab还是gitea就看个人喜好了。推荐gitea用来备份和快速访问github的源码库,本地私有代码还是用gitlab来管理,个人感觉gitlab其它功能上要比gitea好一些。

8、总结

  整个过程之所以从gitee绕一道的原因主要是因为直接访问github网速太差,还容易掉线,本地备份往往耗时还不容易成功,所以就用gitee来做一个中间缓冲,这样因为网速的提升,备份成功率就大大提升,最后在同步的时候,因为每次变更的内容不会太大,所以就重新指回github更新即可。

  整个过程之所以从gitee绕一道的原因主要是因为直接访问github网速太差,还容易掉线,本地备份往往耗时还不容易成功,所以就用gitee来做一个中间缓冲,这样因为网速的提升,备份成功率就大大提升,最后在同步的时候,因为每次变更的内容不会太大,所以就重新指回github更新即可。

  最后感谢gitee为我们提供了极大的便利!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章