簡單搭建本身的git服務

背景介紹

最近天氣比較冷,休息時間一直宅在家,閒的很無聊,忽然靈光一閃,想到雙十一在阿里雲買的一服務器還沒怎麼用呢,就有了搭建本身個站的想法,此時代碼託管的需就出現了,又不想在第三方託管花大價錢買服務,遂決定本身搭一個吧。linux

1. 環境準備

服務器:centOS 7.4 開發機器:OSX 10.13.6git

2. 協議

git 可使用四種主要的協議來傳輸數據:本地傳輸,SSH 協議,Git 協議和 HTTP 協議。因爲centOS 系統已經支持經過 SSH 對服務器的訪問。SSH也是惟一一個同時支持讀寫操做的網絡協議。另外兩個網絡協 議(HTTP 和 Git)一般都是隻讀的,因此雖然兩者對大多數人均可用,但執行寫操做時仍是須要 SSH。SSH 同時也是一個驗證受權的網絡協議;而由於其廣泛性,因此我選擇了SSH協議做爲了個人數據傳輸協議。web

3. centOS安裝git

因爲只是用來做爲我我的託管代碼的git倉庫,平時建立和訪問項目直接登陸服務 器就好啦,也不用作一個 web頁面來訪問本身的項目,因此我採起的是yum源安裝git:shell

$ yum -y install git
複製代碼

git --version查看git有沒有安裝好,此時安裝的yum源的git最新版本爲1.8.3.1。若是須要高版本或者想要作一個web界面訪問項目的話, 能夠採起源碼編譯安裝的方式安裝git。vim

4. 添加一個git帳戶

$ sudo adduser git 
$ su - git
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@gitserver,經過此命令將我電腦的ssh公鑰上傳到
git用戶的authorized_keys文件中.
複製代碼

5. 初始化一個裸倉

在linux中,通常採用在 /opt 目錄中安裝應用,因此我在 /opt 下新建了一個git目錄用來做爲個人git 倉,在 /opt/git 目錄下新建一個以 工程名+.git 的目錄,cd到project.git目錄下,而後經過bash

$ git --bare init
複製代碼

建立一個裸倉。服務器

6. 測試git倉庫

在個人電腦上,網絡

$ git clone git@gitserver:/opt/git/project.git
複製代碼

此時成功拉取了服務器上的git倉庫到本地,說明咱們的簡易git服務器搭建成功。ssh

7. 設置git用戶對服務器的操做權限

做爲一個額外的防範措施,你能夠用 git 自帶的 git-shell 工具限制 git 用戶的活動範圍。只要把它設 爲 git 用戶登入的 shell,那麼該用戶就沒法使用普通的 bash 或者 zsh 什麼的 shell 程序。編輯 /etc/passwd 文件:工具

$ sudo vim /etc/passwd
複製代碼

在文件末尾,你應該能找到相似這樣的行:

git:x:1002:1003::/home/git:/bin/bash

把 /bin/bash改成/bin/git-shell,或者使用which git-shell查看它的實際安裝路徑,而後用實際安 裝路徑替換/bin/bash便可。修改後以下:

git:x:1002:1003::/home/git:/bin/bash

如今 git 用戶只能用 SSH 鏈接來推送和獲取 git 倉庫,而不能直接使用主機 shell。嘗試普通 SSH 登陸的話,會看到下面這樣的拒絕信息:

  • fatal: Interactive git shell is not enabled.
  • hint: ~/git-shell-commands should exist and have read and execute access.
  • Connection to gitserver closed.

總結

因爲linux文件權限相關的問題,在新建git目錄和建立git倉庫以前,必定要先建立git用戶,而且切換到git用戶作相關操做,不然git push的時候會由於文件權限問題而沒法成功推送代碼到git服務器上。

相關文章
相關標籤/搜索