搭建企業私有Git服務

一、GIT服務器搭建方式

上一節課我們講過GIT是一個分佈式版本管理系統,既然是分佈那麼必定會涉及遠程通信,那麼GIT是採用什麼協議進行遠程通信的呢?

 

 

 

git支持的四種通信協議:

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

1、Local(本地協議)

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

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

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

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

 

  1. 演示本地協議使用方式:

# 從本地 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 會觸發平時用於網路傳輸資料的進程,傳輸過來的是打包好的文件,更節約硬盤空間。

  1. 演示通過 file:///協議與直接拷貝的區別。

2、ssh 協議

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

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

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

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

 

  1. 演示基於 ssh 協議

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

 

  1. 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

 

  1. #創建一個祼項目

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 證書之類的配置

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

 

  1. 演示 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是一個非標準端口,一般防火牆不會開放。

  1. 演示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服務

概要:

  1. gogs 介紹與安裝
  2. gogs 基礎配置
  3. gogs 定時備份與恢復

 

gitlab ==> 功能多一些

 

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

注: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 中

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章