使用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爲我們提供了極大的便利!

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