GitHub是一個免費托管開源代碼的遠程倉庫。但是對於某些視源代碼如生命的商業公司來說,既不想公開源代碼,又捨不得給GitHub交保護費,那就只能自己搭建一臺Git伺服器作為私有倉庫使用。搭建Git伺服器需要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的ap ...
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
再次提交或者拉取,就不用輸入密碼啦!