使用自建Git服務器管理私有項目 Centos 7.3 + Git 2.11.0 + gitosis (實測 筆記)

環境:python

系統硬件:vmware vsphere (CPU:2*4核,內存2G,雙網卡)git

系統版本:CentOS-7-x86_64-Minimal-1611.isogithub

GIT服務器IP:192.168.1.10 SSH端口:默認爲22
vim

開發端1: GIT管理者,管理GIT服務器的成員和項目設置,同時也是使用者 (Win10系統)windows

開發端2: GIT使用者 (Win10系統)centos

 

安裝步驟:安全

1.顯示服務器版本
[root@tCentos7 ~]# cat /etc/redhat-release服務器

CentOS Linux release 7.3.1611 (Core)dom


[root@tCentos7 ~]# uname -rssh

3.10.0-514.2.2.el7.x86_64

 

[root@tCentos7 ~]# ip addr|grep inet

inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 192.168.1.10/24 brd 192.168.1.255 scope global ens192
inet6 fe80::2e16:e3ba:baaf:5f7a/64 scope link


2.安裝git

2.1 安裝依賴的庫

[root@tCentos7 ~]# yum install autoconf curl-devel expat-devel openssl-devel zlib-devel perl-devel

 

2.2 刪除本來的安裝的git

[root@tCentos7 ~]# yum remove git gettext-devel -y

 

2.3 編譯安裝
[root@tCentos7 ~]# cd /usr/local/src

[root@tCentos7 ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.11.0.tar.gz

[root@tCentos7 ~]# tar -zvxf git-2.11.0.tar.gz

[root@tCentos7 ~]# cd git-2.11.0

[root@tCentos7 ~]# make configure

[root@tCentos7 ~]# ./configure --prefix=/usr/local/git   

### 也能夠指定  -with-iconv=/usr/local/libiconv  

### 也能夠指定  --with-openssl=/opt/openssl

[root@tCentos7 ~]# make && make install

 

2.4 增長軟鏈接

[root@tCentos7 ~]# ln -s /usr/local/git/bin/* /usr/bin/

[root@tCentos7 ~]# git --version

git version 2.11.0


3.安裝GIT服務管理工具 gitosis 

[root@centos ~]# cd /usr/local/src

[root@centos ~]# yum install unzip -y

[root@centos ~]# wget https://files.pythonhosted.org/packages/6e/9c/6a003320b00ef237f94aa74e4ad66c57a7618f6c79d67527136e2544b728/setuptools-41.0.0.zip

[root@centos ~]# unzip setuptools-41.0.0.zip && cd setuptools-41.0.0

[root@centos ~]# python setup.py build && python setup.py install

 

[root@tCentos7 ~]# yum install python python-setuptools

[root@tCentos7 ~]# cd /usr/local/src

[root@tCentos7 ~]# git clone git://github.com/res0nat0r/gitosis.git

[root@tCentos7 ~]# cd gitosis

[root@tCentos7 ~]# python setup.py install

顯示Finished processing dependencies for gitosis==0.2即表示成功

 

4.GIT服務管理工具設置

4.1 打開GIT網址 https://www.git-scm.com/ ,下載Git-2.1 1.0-64-bit.exe,而後一路默認安裝。

https://github.com/git-for-windows/git/releases/download/v2.11.0.windows.1/Git-2.11.0-64-bit.exe

 

4.2 設置git 默認打開git本地倉庫目錄 (這裏設置爲D盤下的repo目錄)

點擊Git Bash命令行工具(以下圖)

 

關閉Git Bash命令行工具

用寫字板,打開C:\Program Files\Git\etc\profile文件

 

找到如下段落,而後增長一行內容 cd d:\repo

MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
MANPATH="/usr/local/man:/usr/share/man:/usr/man:/share/man:${MANPATH}"
INFOPATH="/usr/local/info:/usr/share/info:/usr/info:/share/info:${INFOPATH}"

cd d:\repo

 

保存後,從新打開Git Bash 後,默認目錄已經變成 /d/repo (也就是D盤的repo目錄)

 

*******************************************************

若是服務器的端口已經修改過,客戶端訪問也須要進行修改(若是GIT服務器使用默認端口22,則不須要如下步驟)

#修改開發機客戶端配置文件(能夠省略每次輸入端口)

$ mkdir  ~/.ssh

$ vim ~/.ssh/config


#打開後,編輯文件,添加如下代碼
host 192.168.1.10
hostname www.domain.com
port 8200

#修改後,開發機客戶端便可用如下方式進行鏈接訪問(若是域名指定了IP,也能夠經過域名訪問)

#git clone ssh://git@192.168.1.10/gitosis-admin.git
#git clone ssh://git@www.domain.com/gitosis-admin.git

 

#不然須要須要加上端口進行訪問

#git clone ssh://git@192.168.1.10:8200/gitosis-admin.git

#git clone ssh://git@www.domain.com:8200/gitosis-admin.git
*******************************************************

 

4.3 在開發端1上,生成密鑰並上傳到服務器上 (開發機的密鑰名稱爲vicowong@git)

$ mkdir  ~/.ssh

$ cd ~/.ssh 

$ ssh-keygen -m PEM -t rsa -b 4096 -C "youname@git" 

顯示 Enter file in which to save the key 而後輸入指定生成公鑰的文件名 vicowong@git,而後一路回車。(如下生成時顯示)

********************************************************************************

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): vicowong@git
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in vicowong@git.
Your public key has been saved in vicowong@git.pub.
The key fingerprint is:
SHA256:PAvBkuFdbYJp21whRYz6M+c8SymtkjRD5LaNfYe8Dak vicowong@git
The key's randomart image is:
+---[RSA 2048]----+
| . oo*+. |
| . ==.o.= |
| +++= + |
| .*oo |
| o.*S. o |
| *.*+B.. |
| . +oO+= |
| o E+= . |
| .. .o |
+----[SHA256]-----+

********************************************************************************

 

4.4 查看已經生成的密鑰對(私鑰id_rsa,公鑰id_rsa.pub)

$ ll ~/.ssh 

-rw-r--r-- 1 Administrator 197121 1679 1月 12 09:52 'id_rsa'
-rw-r--r-- 1 Administrator 197121 390 1月 12 09:52 'id_rsa.pub'

 

4.5 查看公鑰內容(注意,公鑰內容最後部分是公鑰的名稱 vicowong@git)

$ cat test@git.pub 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkY7YFuitOJ5LJkf8kK741Wj1rHjKTYfbSvkBCkKQ

AAAADAQABAAABAQCkY7YFuitOJ5LJkf8kK741Wj1rHjKTYfbSvkBCkKQhtkp5HnlkBCkKQhtkp5Hnl3

upEZ77S9ALv3+0A7FAp+moRlJ33Kv5433r0Mr01qXRK+xfWJp/1 vicowong@git

 

4.6 從開發機1,把剛生成的公鑰上傳到服務器 (建議用Ftp等工具,直接上傳到服務器的/tmp目錄)

$ scp ~/.ssh/vicowong@git.pub root@192.168.1.10:/tmp/

 

4.7 在服務器上顯示已經上傳的密鑰

[root@tCentos ~]# ll /tmp/id_rsa@git.pub

4.8 .服務器上初始化gitosis

增長 git 用戶

[root@tCentos ~]# adduser -m git

 

切換到 git 用戶
[root@tCentos ~]# su - git

 

把服務器的公鑰導入到gitosis。(完成後便可以使用開發端來管理git服務器)

[root@tCentos ~]# gitosis-init < /tmp/id_rsa.pub

#顯示以上信息即表示成功
#Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
#Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

 

刪除服務器上密鑰(爲安全考慮)

[root@tCentos ~]# su - root

[root@tCentos ~]# rm -rf /tmp/id_rsa.pub


4.9 在開發端1,克隆git管理項目gitosis-admin(gitosis-admin服務器管理項目,自己也是一個git倉庫)

打開Git Bash命令提示工具工具

$ mkdir -p /d/repo

$ cd /d/repo

$ git clone git@192.168.1.10:gitosis-admin.git

 

查看從服務器上GIT倉庫複製下來的GIT項目(也就是本地GIT倉庫)

$ ll /d/repo

drwxr-xr-x 1 Administrator 197121         0 Jul  1  2016 git-admin/

 

查看本地倉庫信息

$ cd /d/repo/git-admin

$ git remote -v
origin git@192.168.1.10:git-admin.git (fetch)
origin git@192.168.1.10:git-admin.git (push)


5 GIt服務端,git服務器管理項目的設置 (在開發端1上經過管理gitosis-admin項目達到管理目的)

5.1查看已經上傳密鑰(全部的公鑰都存放到gitosis-admin/keydir 目錄下)

$ cd /repo/gitosis-admin 

$ ll keydir/

'vicowong@git.pub'

能夠看到,目前有一個公鑰vicowong@git.pub

 

5.2 查看服務器上GIT倉庫設置

$ vim gitosis.conf

#初始內容以下

[gitosis]

[group gitosis-admin]
members = vicowong@git
writable = gitosis-admin

***************************************************************************

[group gitosis-admin]       表示這組(或者說是項目)設置名稱爲gitosis-admin

members = vicowong@git    表示組的成員只有一個 vicowong@git ,對應成員已經上傳到keydir目錄的公鑰

writable = gitosis-admin     表示組的項目名稱是gitosis-admin,組成員擁有寫權限。對應的下載地址就是 git@192.168.1.10:gitosis-admin.git

***************************************************************************

 

5.3 在開發端2上生成新的密鑰(須要事先安裝和設置好Git Bash)

打開Git Bash,生成密鑰時,須要指定密鑰名稱 test.git(能夠參考開發端1的步驟)

$ cd ~/.ssh

$ ssh-keygen -t rsa -C "test@git"

 

查看是否生成成功

$ ll ~/.ssh

-rw-r--r-- 1 Administrator 197121 1679 1月 12 09:52 'test@git'
-rw-r--r-- 1 Administrator 197121 390 1月 12 09:52 'test@git.pub'

 

查看生成公鑰的名稱是不是 test@git

$ cat test@git.pub 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkY7YFuitOJ5LJkf8kK741Wj1rHjKTYfbSvkBCkKQ

AAAADAQABAAABAQCkY7YFuitOJ5LJkf8kK741Wj1rHjKTYfbSvkBCkKQhtkp5HnlkBCkKQhtkp5Hnl3

upEZ77S9ALv3+0A7FAp+moRlJ33Kv5433r0Mr01qXRK+xfWJp/1 test@git

 

5.3 把開發端2上的公鑰文件 test@git.pub,複製到開發端1上的 倉庫管理項目gitosis-admin,對應的目錄下的/repo/gitosis-admin/keydir

$ ll /repo/gitosis-admin/keydir

-rw-r--r-- 1 Administrator 197121 395 6月   8  2015 'vicowong@git.pub'

-rw-r--r-- 1 Administrator 187242 395 6月   8  2015 'test@git.pub'

 

5.4 修改開發機1的gitosis.conf

新增長一個新的項目 test-git,vicowong用戶容許寫,test用戶只讀

新增長一個新的項目 test2-git,rw_menbers組的用戶容許寫(rw_menbers,成員包括2個: vicowong@git user1@git),r_menbers組的用戶只讀

$ cd /repo/gitosis-admin/

$ vim gitosis.conf

 

在文件頂部[gitosis]的下一行,增長兩個分組(讀寫組rw_menbers成員2個,只讀組r_menbers成員1個)

每一個成員都須要把各自開發機上生成的公鑰,複製到管理倉庫gitosis-admin/keydir目錄上(user1@git 需在開發機3上生成)

[group rw_menbers]
members = vicowong@git user1@git

[group r_menbers]
members = test@git

 

#在文件尾增長如下內容

[group test-git]
writable = test-git 
members = vicowong@git

[group test-git_r]
readonly = test-git 
members = test@git

 

[group test2-git]
writable = test2-git
members = @rw_menbers

[group test2-git_r]
readonly = test2-git
members = @r_menbers

 

:wq 保存退出

 

5.5 在開發端1上,把以上的設置提交到服務器上(提交成功,設置纔會生效)

$ git add .

$ git commit -a -m "add test-git repo"

$ git push

 

5.6 .在開發端1,初始,增長及使用項目test-git  

$ cd /d/repo

$ mkdir test-git

$ cd test-git

$ git inti

$ touch readme

$ git add .

$ git commit -a -m "init test-git"

$ git remote add origin git@192.168.1.10:test-git.git

$ git push origin master

 

5.7 .在開發端2,初始,增長及使用項目test2-git

參考5.6  

 

5.8 在開發機2,克隆和使用 test-git

$ cd /d/repo

$ git clone git@192.168.1.10:test-git.git

$ cd test-git

$ git remote -v
origin git@192.168.1.10:test-git.git (fetch)
origin git@192.168.1.10:test-git.git (push)

 

5.9 在開發機2,克隆和使用 test2-git 

參考5.8

 

5.10 其它開發2,克隆和使用Git項目 

參考開發端2的設置

 

*****************************************

在服務器上,把Git 項目倉庫目錄 repositories,指到其它目錄下。

[root@tCentos ~]mkdir -p /data

[root@tCentos ~]mv /home/git/repositories /data

[root@tCentos ~]ln -s /data/repositories /home/git/repositories

*****************************************

相關文章
相關標籤/搜索