Git私服搭建


Git私服搭建

一、Git服務器搭建方式

GIT是一個分布式版本管理系統,既然是分布那么必定會涉及遠程通信,那么GIT是采用什么協議進行遠程通信?

Git支持的四種通信協議:

  1. Local(本地協議)
  2. ssh
  3. http(Dumb、Smart)
  4. git

1、Local(本地協議)

基於本地文件系統或共享(NFS)文件系統進行訪問。

優點:簡單,直接使用了現有的文件權限和網絡訪問權限,小團隊小項目建立一個這樣的版本管理系統是非常輕松的一件事。

缺點:這種協議缺陷就是本身共享文件系統的局限,只能在局域網,而且速度也慢。

適應場景:小團隊,小項目臨時搭建版本服務。

  • 本地協議使用方式:

    # 從本地 f/git/atals 目錄克隆項目
    git clone /f/git/atals/
    # 即使是 bare倉庫也可以正常下載
    git clone /f/git/atals.git
    # 基於file 協議克隆本地項目
    git clone file:///f/git/atals/
    

    如果在 URL 開頭明確的指定 file://,那么 Git 的行為會略有不同。 如果僅是指定路徑,Git 會嘗試使用硬鏈接(hard link)或直接復制所需要的文件。 如果指定 file://,Git 會觸發平時用於網路傳輸資料的進程,傳輸過來的是打包好的文件,更節約硬盤空間。

2、ssh協議

git 支持支持利用ssh 協議進行通信,這是絕大部分linux、uninx系統都支持的,所以利用該協議架設GIT版本服務是非常方便。

優點:首先SSH 架設相對簡單、其次通過 SSH 訪問是安全的、另外SSH 協議很高效,在傳輸前也會盡量壓縮數據。

缺點:權限體系不靈活,必須提供操作系統的帳戶密碼,哪怕是只需要讀取版本。

適應場景:小團隊、小項目、臨時項目

  • 基於ssh協議

    這里git 服務必須先安裝到linux 系統上,然后才能使用ssh 協議跟git 服務進行通信。

    #創建一個祼項目
    git --bare init lin.git
    
    #本地基於遠程克隆倉庫
    git clone root@192.168.0.147:/data/git-repository/lin.git
    cd lin/
    #添加文件
    echo "this is luban" >> README.MF
    # 本地添加、提交、並推送至遠程
    git add -A; git commit -am 'first commit'; git push;
    

    可能的錯誤:

    git-upload-pack: command not found

    原因是 ssh 協議下只能訪問/usr/bin 下的目錄,解決辦法如下

    ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack

    ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack

3、http(Dumb、Smart)

Git http 協議實現是依懶 WEB容器(apache、nginx)及cgi 組件進行通信交互,並利用WEB容器本身權限體系進行授權驗證。在 Git 1.6.6 前只支持http Dumb(啞)協議,該協議只能下載不能提交,通常會配合ssh 協議一起使用,ssh 分配提交帳號,http dumb提供只讀帳號。1.6.6 之后git 提供了git-http-backend 的 CGI 用於實現接收遠程推送等功能。

優點:解決了local 與ssh 權限驗證單一的問題、可基於http url 提供匿名服務,從而可以放到公網上去。而local 與ssh 是很難做到這一點,必如實現一個類似github 這樣的網站。

缺點:架設復雜一些需要部署 WEB服務器,和https 證書之類的配置。

場景:大型團隊、需要對權限精准控制、需要把服務部署到公網上去。

  • http Dumb 配置與使用

    1. 創建服務端版本倉庫

      cd /data/git-repository
      git --bare init lin.git
      cd lin.git/hooks/mv 
      // 版本更新鈎子,當有版本提交的時候會執行更新
      post-update.sample post-update
      ./post-update
      nginx 靜態訪問配置
      server {
              listen       80;
              server_name  git.lin.com;
              location / {
                  root  /data/git-repository;
              }
      }
      #重命名鈎子 
      mv hooks/post-update.sample hooks/post-update
      
    2. 本地克隆遠程服務

      git clone http://git.lin.com/lin.git
      

      注:http Smart 協議 是基於 CGI 配合GIT git-http-backend 腳本進行使用,配置較復雜,現在一般不會這么去做,而是采用gitlab 、gogs 之類的web管理進行代替,在此就不在演示。

4、git協議

Git 協議是包含在 Git 里的一個特殊的守護進程;它監聽在一個特定的端口(9418),類似於 SSH 服務,但是訪問無需任何授權。

優點:目前,Git 協議是 Git 使用的網絡傳輸協議里最快的。 如果你的項目有很大的訪問量,或者你的項目很龐大並且不需要為寫進行用戶授權,架設 Git 守護進程來提供服務是不錯的選擇。 它使用與 SSH 相同的數據傳輸機制,但是省去了加密和授權的開銷。

缺點:Git 協議缺點是缺乏授權機制。 而且9418是一個非標准端口,一般防火牆不會開放。

  • GIT協議的使用

    cd lin.git/
    # 創建一個空文件,表示開放該項目
    touch git-daemon-export-ok
    # 后台啟動守護進程
    $nohub git daemon --reuseaddr --base-path=/data/git-repository/ /data/git-repository/ &
    #本地克隆遠程項目
    git clone git://192.168.0.147:9418/lin.git
    

二、基於gogs搭建私有GIT服務

  1. gogs 介紹與安裝

  2. gogs 基礎配置

  3. gogs 定時備份與恢復

1、gogs介紹和安裝

Gogs 是一款開源的輕量級Git web服務,其特點是簡單易用完檔齊全、國際化做的相當不錯。其主要功能如下:

  1. 提供Http 與ssh 兩種協議訪問源碼服務

  2. 提供可WEB界面可查看修改源碼代碼

  3. 提供較完善的權限管理功能、其中包括組織、團隊、個人等倉庫權限

  4. 提供簡單的項目viki功能

  5. 提供工單管理與里程碑管理。

下載安裝:

官網:https://gogs.io

下載:https://gogs.io/docs/installation 選擇 linx amd64 下載安裝

文檔:https://gogs.io/docs/installation/install_from_binary

  • 安裝:

    • 解壓之后目錄:

  • 運行

    #前台運行
    ./gogs web
    #后台運行
    $nohup ./gogs web &
    

    默認端口:3000

    初次訪問http://<host>:3000 會進到初始化頁,進行引導配置。

    可選擇mysql 或sqlite 等數據。這里選的是sqllite

2、gogs基礎配置

郵件配置說明:

郵件配置是用於注冊時郵件確認,和找回密碼時候的驗證郵件發送。其配置分為兩步:

第一:創建一個開通了smtp 服務的郵箱帳號,一般用公司管理員郵箱。我這里用的是QQ郵箱。

第二:在gogs_home/custom/conf/app.ini 文件中配置。

ENABLED =true 表示啟用郵件服務

host 為smtp 服務器地址,(需要對應郵箱開通smtp服務 且必須為ssl 的形式訪問)

from 發送人名稱地址

user 發送帳號

passwd 開通smtp 帳戶時會有對應的授權碼

重啟后可直接測試

管理員登錄==》控制面版==》應用配置管理==》郵件配置==》發送測試郵件

3、gogs定時備份與恢復

備份與恢復:

#查看備份相關參數
./gogs backup -h
#默認備份,備份在當前目錄
./gogs backup 
#參數化備份  --target 輸出目錄 --database-only 只備份 db 
./gogs backup --target=./backupes --database-only --exclude-repos
#恢復。執行該命令前要先刪除 custom.bak
./gogs restore --from=gogs-backup-20180411062712.zip
#自動備份腳本
#!/bin/sh -e
gogs_home="/home/apps/svr/gogs/"
backup_dir="$gogs_home/backups"

cd `dirname $0`
# 執行備份命令
./gogs backup --target=$backup_dir

echo 'backup sucess'
day=7
#查找並刪除 7天前的備份  
find $backup_dir -name '*.zip' -mtime +7 -type f |xargs rm -f;
echo 'delete expire back data!'

#添加定時任務 每天4:00執行備份
# 打開任務編輯器
crontab -e
# 輸入如下命令 00 04 * * * 每天凌晨4點執行 do-backup.sh 並輸出日志至 #backup.log
00 04 * * * /home/apps/svr/gogs/do-backup.sh >> /home/apps/svr/gogs/backup.log 2>&1

4、客戶端公鑰配置與添加

Git配置;

#Git安裝完之后,需做最后一步配置。打開git bash,分別執行以下兩句命令
git config --global user.name “用戶名”
git config --global user.email “郵箱”
#git 自動記住用戶和密碼操作
git config --global credential.helper store

SSH公鑰創建:

  1. 打開git bash
  2. 執行生成公鑰和私鑰的命令:ssh-keygen -t rsa 並按回車3下
  3. 執行查看公鑰的命令:cat ~/.ssh/id_rsa.pub
  4. 拷貝id_rsa.pub 內容至服務~/.ssh/authorized_keys 中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM