一、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 會觸發平時用於網路傳輸資料的進程,傳輸過來的是打包好的文件,更節約硬盤空間。
- 演示通過 file:///協議與直接拷貝的區別。
2、ssh 協議
git 支持支持利用ssh 協議進行通信,這是絕大部分linux、uninx系統都支持的,所以利用該協議架設GIT版本服務是非常方便的
優點:首先SSH 架設相對簡單、其次通過 SSH 訪問是安全的、另外SSH 協議很高效,在傳輸前也會盡量壓縮數據。
缺點:權限體系不靈活,必須提供操作系統的帳戶密碼,哪怕是隻需要讀取版本。
適應場景:小團隊、小項目、臨時項目
- 演示基於 ssh 協議
這裏我們把git 服務必須先安裝到linux 系統上,然後才能使用ssh 協議跟git 服務進行通信。
- 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
# 備用下載鏈接: https://pan.baidu.com/s/1czwEz8 密碼: y3hn
$ unzip v2.3.0.zip
$ cd git-2.3.0
#3 編譯 安裝(如果沒有權限就加上sudo)
make prefix=/usr/local/git all
make prefix=/usr/local/git install
#4、添加環境變量
vim /etc/profile
export PATH=/usr/local/git/bin:$PATH
source /etc/profile
#如果成功顯示版本號表示添加成功
git --version
git version 2.3.0
- #創建一個祼項目
git --bare init xinbumi.git
#本地基於遠程克隆倉庫
git clone [email protected]:/data/git-repository/xinbumi.git
cd xinbumi/
#添加文件
echo "this is xinbumi" >> 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 xinbumi.git
cd xinbumi.git/hooks/mv
// 版本更新鉤子,當有版本提交的時候會執行更新
post-update.sample post-update
./post-update
nginx 靜態訪問配置
server {
listen 80;
server_name git.tl.com;
location / {
root /data/git-repository;
}
}
#重命名鉤子
mv hooks/post-update.sample hooks/post-update
本地克隆遠程服務
git clone http://git.tl.com/xinbumi.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 xinbumi.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/xinbumi.git
二、基於gogs快速搭建企業私有GIT服務
概要:
- gogs 介紹與安裝
- gogs 基礎配置
- gogs 定時備份與恢復
gitlab ==> 功能多一些
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
注:mysql 索引長度的問題沒有安裝成功,需要用mysql5.7 以上版本
2、gogs 基礎配置
郵件配置說明:
郵件配置是用於註冊時郵件確認,和找回密碼時候的驗證郵件發送。其配置分爲兩步:
第一:創建一個開通了smtp 服務的郵箱帳號,一般用公司管理員郵箱。我這裏用的是QQ郵箱。
第二:在{gogs_home/custom/conf/app.ini 文件中配置。
QQ郵箱開通smtp服務
1、點擊設置
2、開啓smtp
郵件設置
設置文件:{gogs_home/custom/conf/app.ini
ENABLED = true
HOST=smtp.qq.com:465
FROM=tuling<[email protected]>
USER=
PASSWD=
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 中