基於gogs搭建Git私有服務
一、基於gogs搭建Git私有服務
1、Git遠端通訊詳解
在我的上一篇文章裡面說Git是一個分散式的系統,既然它是一個分散式的系統那就肯定會涉及到遠端通訊,那麼Git是採用什麼協議來進行遠端通訊呢?
a、Local(本地協議)
Local本地協議就是基於本地檔案系統進行的共享。比如說公司的一個伺服器,在伺服器上拿出一個資料夾進行共享,那我們就可以把原始碼儲存在這個共享資料夾裡面,那麼開發人員就可以基於這個本地協議直接訪問這個共享資料夾來實現這個檔案的commit和checket。如下圖所示:
優點:簡單,直接並且使用了現有的檔案許可權和網路訪問許可權。如果是小團隊或者小專案建立一個這樣的版本管理系統就很輕鬆。
缺點:這種協議本身受制於檔案系統共享的侷限性,只能在區域網訪問並且速度比較慢。
b、ssh協議
git支援利用ssh協議進行通訊,這是絕大部分的Linux系統和Unix系統都支援的,所以利用該協議搭建Git服務是非常方便的。
優點: SSH架構相對於比較簡單,通過ssh訪問比較安全,在進行檔案傳輸的時候會進行壓縮,傳輸效率會高一些。
缺點: 使用ssh必須將使用者ip,伺服器的使用者名稱、密碼、賬號給開發人員,許可權體系不靈活。
c、http
Git的http協議實現是依賴WEB容器(apache、nginx)及cgi元件進行通訊互動,並且利用WEB容器本身的一個許可權體系進行授權驗證。http Dump協議,在Git1.6.6版本之前該協議是隻能下載不能提交的,也就是說這種協議值提供只讀賬號。再Git1.6.6版本之後提供了git-http-backend的CGI用於實現接收遠端推送功能。
優點:解決了local和ssh許可權驗證單一的問題、可基於http url提供匿名服務,從而可以放到公網上去。而local與ssh是很難做到這一點的。
缺點:架設複雜,需要部署一些WEB伺服器,和https證書之類的配置。
應用場景:大型團隊,需要對許可權進行精準控制,需要把服務部署到公網上去。
d、Git協議
Git協議是包含在Git軟體中的一種特殊的守護程序。它監聽在一個特定的埠(9418),類似於SSH服務,但是訪問不需要任何授權。
優點:傳輸速度快,是這四個協議裡面最快的。如果你的專案很大並且不需要為寫進行使用者授權,架設Git守護程序是一個很不錯的選擇。它還使用了SSH相同的資料傳輸機制,但是它省去了加密和授權的開銷。
缺點:Git協議缺乏授權機制並且9418埠不是一個標準埠,防火牆一般不會開放。
2、基於gogs搭建web管理服務
a、gogs的介紹與安裝
gogs是一款開源的輕量級Git Web服務,其特點是簡單易用文件齊全國際化做的很好。其主要功能如下:
1、提供http與ssh兩種協議訪問原始碼服務
2、提供可以用Web介面可檢視修改原始碼程式碼
3、提供完善的許可權管理功能、其中包括組織、團隊、個人等倉庫許可權
4、提供簡單的專案viki功能
5、提供工單管理與里程碑管理
第一步:去官網下載gogs這個軟體
下載完成後使用xftp這個工具將其上傳到Linux,我在Linux上新建了一個名叫data的資料夾,將其上傳到了這個檔案下。如下圖所示:
第二步:使用tar -xzvf gogs_0.11.66_linux_amd64.tar.gz
解壓gogs_0.11.66_linux_amd64.tar.gz,解壓成功後如下圖所示:
第三步:在Linux上安裝Git服務:
1、使用yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
命令安裝依賴環境;
2、使用wget https://github.com/git/git/archive/v2.3.0.zip
下載Git原始碼,unzip v2.3.0.zip
命令解壓Git原始碼;
3、進入解壓後的Git目錄,使用make prefix=/usr/local/git all
編譯Git原始碼,使用make prefix=/usr/local/git install
安裝Git服務;
4、新增Git環境變數,使用vim /etc/profile
開啟profile檔案,將以下內容複製到該檔案
export PATH=/usr/local/git/bin:$PATH
source /etc/profile
5、輸入git --version
驗證Git是否安裝成功,如果出現版本號則表示成功,如圖所示:
6、建立Git倉庫,在data資料夾裡面建立一個git-resp的資料夾,這個資料夾專門用來放Git倉庫,然後再git-resp內建立一個git倉庫叫demo.git,如下圖所示:
第四步:配置nginx伺服器(Nginx再Linux環境安裝),nginx.conf檔案配置如下:
user root; ###新增一個root賬戶
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
###日誌列印格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
###日誌檔案的路徑以及用什麼格式列印
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name git.resp.com; ###配置伺服器ip地址
location / {
root /data/git-resp; ###指定git倉庫的路徑,這個路徑下的所有倉庫都能訪問
}
}
}
配置後使用./sbin/nginx -t
檢測nginx.conf檔案是否配置錯誤,配置無誤的效果如圖所示:
第五步:進入gogs目錄並且使用./gogs web
命令啟動gogs,如下圖所示:
啟動成功後我們可以看到上面的圖片裡面有一個地址http://0.0.0.0:3000,這個地址是不能訪問的。我們需要訪問的是我們再nginx裡面配置的那個地址為git.resp.com:3000
。第一次訪問會進入一個引導設定頁面,設定完成後會進入如下頁面:
到此,gogs搭建私有git服務就完成了。
b、gogs定時備份與恢復
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