在騰訊雲的ubuntu伺服器上面安裝git伺服器

Cecil-Chen發表於2018-04-25

GitHub是一個免費託管開原始碼的遠端倉庫。但是對於某些視原始碼如生命的商業公司來說,既不想公開原始碼,又捨不得給GitHub交保護費,那就只能自己搭建一臺Git伺服器作為私有倉庫使用。搭建Git伺服器需要準備一臺執行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。

假設你已經有sudo許可權的使用者賬號,下面,正式開始安裝。

第一步,安裝git:

$ sudo apt-get install git

第二步,建立一個git使用者,用來執行git服務:

$ sudo adduser git -m (-m表示自動建立使用者的登入目錄)

並設定密碼:

$ sudo passwd git

連續輸入兩次密碼即可。

第三步,建立證書登入:

收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰匯入到/home/git/.ssh/authorized_keys檔案裡,一行一個。

將.ssh目錄的許可權設定為700

將authorized_keys的許可權設定為600

第四步,初始化Git倉庫:

先選定一個目錄作為Git倉庫,假定是/var/www/pj001.git,在/var/www/目錄下輸入命令:

$ sudo git init –bare pj001.git

Git就會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾。然後,把owner改為git:

$ sudo chown -R git:git pj001.git

第五步,禁用shell登入:

出於安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成。找到類似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git使用者可以正常通過ssh使用git,但無法登入shell,因為我們為git使用者指定的git-shell,每次一登入就自動退出。

第六步,克隆遠端倉庫:

現在,可以通過git clone命令克隆遠端倉庫了,在各自的電腦上執行:

$git clone git@server:/var/www/pj001.git

Cloning into `sample`…

warning: You appear to have cloned an empty repository.

其中可能會要求輸入伺服器上git使用者的密碼。

第七步,本地開發完了之後就可以使用git push命令將程式碼推送到伺服器了。推送成功之後,發現伺服器上面並沒有我們的程式碼,這是因為我們之前在伺服器建立倉庫的時候使用了 –bare 選項,沒有工作區,所有看不到檔案,進入到伺服器的/var/www/目錄下面,輸入一下命令,複製工作區:

$ sudo git clone pj001.git pj001

$ sudo chown -R git:git pj001

第八步,在/var/www/pj001目錄中仍然沒有發現我們提交上來的檔案,這時我們進入pj001目錄裡面,輸入以下命令:

$ cd /var/www/pj001

$ git pull 

第九步,不想每次提交了都還要在伺服器pull一遍,git的hook為我們提供了一個操作,進入/var/www/pj001.git/hooks目錄,輸入以下命令:

$ cd /var/www/pj001.git/hooks

$ sudo vim post-receive

複製以下內容,儲存至post-receive

 1 #!/bin/sh
 2 
 3 #判斷是不是遠端倉庫
 4 
 5 IS_BARE=$(git rev-parse --is-bare-repository)
 6 if [ -z "$IS_BARE" ]; then
 7 echo >&2 "fatal: post-receive: IS_NOT_BARE"
 8 exit 1
 9 fi
10 
11 unset GIT_DIR
12 DeployPath="/var/www/pj001"
13 
14 cd $DeployPath
15 
16 #git stash
17 
18 #git pull origin master
19 
20 git fetch --all
21 git reset --hard origin/master

將post-receive的chown修改為git:

$ sudo chown git:git post-receive

第十步,重新提交程式碼,你會發現程式碼自動同步到了伺服器。

第十一步,每次都需要輸入密碼太麻煩,確認第三步正確以後,編輯/etc/ssh/sshd_config檔案,找到RSAAuthentication,PubkeyAuthentication和AuthorizedKeysFile,修改成

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /home/git/.ssh/authorized_keys

重啟ssh

$ sudo service ssh restart

再次提交或者拉取,就不用輸入密碼啦!

 

相關文章