搭建企業(yè)私有Git服務(wù)

git支持的四種通信協(xié)議:

1. Local(本地協(xié)議)

2. ssh

3. http(Dumb、Smart)

4. git

1、Local(本地協(xié)議)

基于本地文件系統(tǒng)或共享(NFS)文件系統(tǒng)進(jìn)行訪問,

優(yōu)點:簡單回梧,直接使用了現(xiàn)有的文件權(quán)限和網(wǎng)絡(luò)訪問權(quán)限,小團(tuán)隊小項目建立一個這樣的版本管理系統(tǒng)是非常輕松的一件事。

缺點:這種協(xié)議缺陷就是本身共享文件系統(tǒng)的局限鸳址,只能在局域網(wǎng),而且速度也慢泉懦。

適應(yīng)場景:小團(tuán)隊稿黍,小項目臨時搭建版本服務(wù)。

l 演示本地協(xié)議使用方式:

# 從本地 f/git/atals 目錄克隆項目

git clone /f/git/atals/

# 即使是 bare倉庫也可以正常下載

git clone /f/git/atals.git

# 基于file 協(xié)議克隆本地項目

git clone file:///f/git/atals/

如果在 URL 開頭明確的指定 file://崩哩,那么 Git 的行為會略有不同巡球。 如果僅是指定路徑,Git 會嘗試使用硬鏈接(hard link)或直接復(fù)制所需要的文件邓嘹。 如果指定 file://酣栈,Git 會觸發(fā)平時用于網(wǎng)路傳輸資料的進(jìn)程,傳輸過來的是打包好的文件,更節(jié)約硬盤空間汹押。

2矿筝、ssh 協(xié)議

git 支持支持利用ssh 協(xié)議進(jìn)行通信,這是絕大部分linux棚贾、uninx系統(tǒng)都支持的窖维,所以利用該協(xié)議架設(shè)GIT版本服務(wù)是非常方便的

優(yōu)點:首先SSH 架設(shè)相對簡單榆综、其次通過 SSH 訪問是安全的、另外SSH 協(xié)議很高效陈辱,在傳輸前也會盡量壓縮數(shù)據(jù)奖年。

缺點:權(quán)限體系不靈活,必須提供操作系統(tǒng)的帳戶密碼沛贪,哪怕是只需要讀取版本陋守。

適應(yīng)場景:小團(tuán)隊、小項目利赋、臨時項目

l 演示基于 ssh 協(xié)議

這里我們把git 服務(wù)必須先安裝到linux 系統(tǒng)上水评,然后才能使用ssh 協(xié)議跟git 服務(wù)進(jìn)行通信。

l **linux 安裝git服務(wù) **

# 1.安裝依賴環(huán)境

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 編譯 安裝(如果沒有權(quán)限就加上sudo)

make prefix=/usr/local/git all

make prefix=/usr/local/git install


#4媚送、添加環(huán)境變量

vim /etc/profile

export PATH=/usr/local/git/bin:$PATH

source /etc/profile


#如果成功顯示版本號表示添加成功

git --version

git version 2.3.0


l **#創(chuàng)建一個祼項目**

`git --bare init luban.git`

#本地基于遠(yuǎn)程克隆倉庫

git clone root@192.168.0.147:/data/git-repository/luban.git

cd luban/


#添加文件

`echo "this is luban" >> README.MF`

# 本地添加中燥、提交、并推送至遠(yuǎn)程

`git add -A; git commit -am 'first commit'; git push;`

可能的錯誤:

`git-upload-pack: command not found`

原因是 ssh 協(xié)議下只能訪問/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 協(xié)議實現(xiàn)是依懶 WEB容器(apache吟秩、nginx)及cgi 組件進(jìn)行通信交互咱扣,并利用WEB容器本身權(quán)限體系進(jìn)行授權(quán)驗證。在 Git 1.6.6 前只支持http Dumb(喓馈)協(xié)議闹伪,該協(xié)議只能下載不能提交,通常會配合ssh 協(xié)議一起使用壮池,ssh 分配提交帳號偏瓤,http dumb提供只讀帳號。1.6.6 之后git 提供了git-http-backend 的 CGI 用于實現(xiàn)接收遠(yuǎn)程推送等功能椰憋。

優(yōu)點:解決了local 與ssh 權(quán)限驗證單一的問題厅克、可基于http url 提供匿名服務(wù),從而可以放到公網(wǎng)上去橙依。而local 與ssh 是很難做到這一點,必如實現(xiàn)一個類似github 這樣的網(wǎng)站证舟。

缺點:架設(shè)復(fù)雜一些需要部署 WEB服務(wù)器,和https 證書之類的配置

場景:大型團(tuán)隊票编、需要對權(quán)限精準(zhǔn)控制、需要把服務(wù)部署到公網(wǎng)上去

l 演示 http Dumb 配置與使用

1卵渴、創(chuàng)建服務(wù)端版本倉庫

cd /data/git-repository

git --bare init luban.git

cd luban.git/hooks/mv

// 版本更新鉤子慧域,當(dāng)有版本提交的時候會執(zhí)行更新

post-update.sample post-update

./post-update

nginx 靜態(tài)訪問配置

server {

        listen       80;

        server_name  git.tl.com;

        location / {

            root  /data/git-repository;

        }

}

#重命名鉤子

`mv hooks/post-update.sample hooks/post-update`

本地克隆遠(yuǎn)程服務(wù)

`git clone http://git.tl.com/luban.git`

**注:**http  Smart 協(xié)議 是基于  CGI 配合GIT  git-http-backend 腳本進(jìn)行使用,配置較復(fù)雜浪读,現(xiàn)在一般不會這么去做昔榴,而是采用gitlab 辛藻、gogs 之類的web管理進(jìn)行代替,在此就不在演示互订。

4吱肌、GIT 協(xié)議

Git 協(xié)議是包含在 Git 里的一個特殊的守護(hù)進(jìn)程;它監(jiān)聽在一個特定的端口(9418)仰禽,類似于 SSH 服務(wù)氮墨,但是訪問無需任何授權(quán)。

優(yōu)點

目前吐葵,Git 協(xié)議是 Git 使用的網(wǎng)絡(luò)傳輸協(xié)議里最快的规揪。 如果你的項目有很大的訪問量,或者你的項目很龐大并且不需要為寫進(jìn)行用戶授權(quán)温峭,架設(shè) Git 守護(hù)進(jìn)程來提供服務(wù)是不錯的選擇猛铅。 它使用與 SSH 相同的數(shù)據(jù)傳輸機(jī)制,但是省去了加密和授權(quán)的開銷凤藏。

缺點

Git 協(xié)議缺點是缺乏授權(quán)機(jī)制奸忽。 而且9418是一個非標(biāo)準(zhǔn)端口,一般防火墻不會開放揖庄。

l 演示GIT協(xié)議的使用

`cd luban.git/`

# 創(chuàng)建一個空文件栗菜,表示開放該項目

`touch git-daemon-export-ok`

# 啟動守護(hù)進(jìn)程

$nohub git daemon --reuseaddr --base-path=/data/git-repository/ /data/git-repository/ &

#本地克隆遠(yuǎn)程項目

`git clone git://192.168.0.147:9418/luban.git`

**二、基于gogs快速搭建企業(yè)私有GIT服務(wù)**

概要:

1. gogs 介紹與安裝

2. gogs 基礎(chǔ)配置

3. gogs 定時備份與恢復(fù)

gitlab ==> 功能多一些

**1抠艾、gogs 介紹安裝**

Gogs 是一款開源的輕量級Git web服務(wù)苛萎,其特點是簡單易用完檔齊全、國際化做的相當(dāng)不錯检号。其主要功能如下:

1. 提供Http 與ssh 兩種協(xié)議訪問源碼服務(wù)

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

3. 提供較完善的權(quán)限管理功能腌歉、其中包括組織、團(tuán)隊齐苛、個人等倉庫權(quán)限

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

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

**下載安裝**

官網(wǎng):[<u>https://gogs.io</u>](https://gogs.io)

下載:[<u>https://gogs.io/docs/installation</u>](https://gogs.io/docs/installation) 選擇 linx amd64 下載安裝

文檔:[<u>https://gogs.io/docs/installation/install_from_binary</u>](https://gogs.io/docs/installation/install_from_binary)

安裝:

解壓之后目錄:

![image.png](https://upload-images.jianshu.io/upload_images/14478586-93e221d2f663fb36.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


運(yùn)行:

#前臺運(yùn)行

./gogs web

#后臺運(yùn)行

$nohup ./gogs web &

默認(rèn)端口:3000

初次訪問http://<host>:3000 會進(jìn)到初始化頁,進(jìn)行引導(dǎo)配置。

可選擇mysql 或sqlite 等數(shù)據(jù)凹蜂。這里選的是sqllite

*注:mysql 索引長度的問題沒有安裝成功,需要用mysql5.7 以上版本*

**2馍驯、gogs 基礎(chǔ)配置**

**郵件配置說明:**

郵件配置是用于注冊時郵件確認(rèn),和找回密碼時候的驗證郵件發(fā)送玛痊。其配置分為兩步:

第一:創(chuàng)建一個開通了smtp 服務(wù)的郵箱帳號汰瘫,一般用公司管理員郵箱。我這里用的是QQ郵箱擂煞。

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

**QQ郵箱開通smtp服務(wù)**

1、點擊設(shè)置

2对省、開啟smtp

**郵件設(shè)置**

設(shè)置文件:{gogs_home/custom/conf/app.ini

![image.png](https://upload-images.jianshu.io/upload_images/14478586-f0658c0792e9f6bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


ENABLED = true

HOST=smtp.qq.com:465

FROM=tuling<2877438881@qq.com>

USER=

PASSWD=

**ENABLED** =true 表示啟用郵件服務(wù)

**host** 為smtp 服務(wù)器地址蝗拿,(需要對應(yīng)郵箱開通smtp服務(wù) 且必須為ssl 的形式訪問)

**from** 發(fā)送人名稱地址

**user** 發(fā)送帳號

**passwd** 開通smtp 帳戶時會有對應(yīng)的授權(quán)碼

**重啟后可直接測試**

管理員登錄==》控制面版==》應(yīng)用配置管理==》郵件配置==》發(fā)送測試郵件

**3晾捏、gogs定時備份與恢復(fù)**

備份與恢復(fù):

#查看備份相關(guān)參數(shù)

./gogs backup -h

#默認(rèn)備份,備份在當(dāng)前目錄

./gogs backup

#參數(shù)化備份  --target 輸出目錄 --database-only 只備份 db

./gogs backup --target=./backupes --database-only --exclude-repos

#恢復(fù)。執(zhí)行該命令前要先刪除 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`

# 執(zhí)行備份命令

./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!'

#添加定時任務(wù) 每天4:00執(zhí)行備份

# 打開任務(wù)編輯器

crontab -e

# 輸入如下命令 00 04 * * * 每天凌晨4點執(zhí)行 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仓手,分別執(zhí)行以下兩句命令

git config --global user.name “用戶名”

git config --global user.email “郵箱”

#git 自動記住用戶和密碼操作

git config --global credential.helper store

**SSH公鑰創(chuàng)建**

1胖齐、打開git bash

2、執(zhí)行生成公鑰和私鑰的命令:ssh-keygen -t rsa 并按回車3下

3俗或、執(zhí)行查看公鑰的命令:cat ~/.ssh/id_rsa.pub  

4市怎、拷貝id_rsa.pub 內(nèi)容至至服務(wù)~~/.ssh/authorized_keys 中
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辛慰,隨后出現(xiàn)的幾起案子区匠,更是在濱河造成了極大的恐慌,老刑警劉巖帅腌,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰弄,死亡現(xiàn)場離奇詭異,居然都是意外死亡速客,警方通過查閱死者的電腦和手機(jī)戚篙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溺职,“玉大人岔擂,你說我怎么就攤上這事±嗽牛” “怎么了乱灵?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長七冲。 經(jīng)常有香客問我痛倚,道長,這世上最難降的妖魔是什么澜躺? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任蝉稳,我火速辦了婚禮,結(jié)果婚禮上掘鄙,老公的妹妹穿的比我還像新娘耘戚。我一直安慰自己,他們只是感情好操漠,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布收津。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朋截。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天吧黄,我揣著相機(jī)與錄音部服,去河邊找鬼。 笑死拗慨,一個胖子當(dāng)著我的面吹牛廓八,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赵抢,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼剧蹂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烦却?” 一聲冷哼從身側(cè)響起宠叼,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎其爵,沒想到半個月后冒冬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摩渺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年简烤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇幻。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡横侦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绰姻,到底是詐尸還是另有隱情枉侧,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布龙宏,位于F島的核電站棵逊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏银酗。R本人自食惡果不足惜辆影,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍特。 院中可真熱鬧蛙讥,春花似錦、人聲如沸灭衷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迫像,卻和暖如春劈愚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闻妓。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工菌羽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人由缆。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓注祖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親均唉。 傳聞我的和親對象是個殘疾皇子是晨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355