Git私服搭建
一、Git服務器搭建方式
GIT是一個分布式版本管理系統,既然是分布那么必定會涉及遠程通信,那么GIT是采用什么協議進行遠程通信?
Git支持的四種通信協議:
- Local(本地協議)
- ssh
- http(Dumb、Smart)
- 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 配置與使用
-
創建服務端版本倉庫
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
-
本地克隆遠程服務
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服務
-
gogs 介紹與安裝
-
gogs 基礎配置
-
gogs 定時備份與恢復
1、gogs介紹和安裝
Gogs 是一款開源的輕量級Git web服務,其特點是簡單易用完檔齊全、國際化做的相當不錯。其主要功能如下:
-
提供Http 與ssh 兩種協議訪問源碼服務
-
提供可WEB界面可查看修改源碼代碼
-
提供較完善的權限管理功能、其中包括組織、團隊、個人等倉庫權限
-
提供簡單的項目viki功能
-
提供工單管理與里程碑管理。
下載安裝:
下載: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公鑰創建:
- 打開git bash
- 執行生成公鑰和私鑰的命令:ssh-keygen -t rsa 並按回車3下
- 執行查看公鑰的命令:cat ~/.ssh/id_rsa.pub
- 拷貝id_rsa.pub 內容至服務~/.ssh/authorized_keys 中