這篇文章我就來介紹一下如何在一臺全裸的阿里雲主機上搭建本身的git服務器。html
1. 安裝gitmysql
首先安裝git,通常而言,如今的服務器已經內置了git安裝包,咱們只須要執行簡單的安裝命令便可安裝。好比:git
$ yum install git # centos
$ apt-get install git # ubuntu
上面是直接用root登錄服務器進行操做,也是爲了演示方便。github
git和mysql不同,mysql在安裝時,得安裝mysql-server,即mysql服務器,git是分佈式的,每個安裝了git的電腦,既是客戶端,也是服務器,git與git之間能夠相互通訊,而咱們所謂的git服務器,實際上和咱們本身的電腦沒有什麼本質上的差異。可是,咱們爲了更有效的管理項目,都採起中心化的管理方式,所以建立一個「git服務器」,做爲其餘全部人提交代碼的最終終端。sql
2.建立git用戶及權限shell
咱們固然不容許直接使用root來進行通訊交互了,因此,咱們建立一個git用戶來做爲從此提交代碼的用戶。ubuntu
$ adduser git
執行這條命令以後,你發如今/home目錄下多了一個git目錄,按理來講,如今,你的系統中多了這個git用戶,而且家目錄在/home/git。可是,咱們並不但願這個用戶經過ssh鏈接到服務器上面去,因此,咱們要禁止這個用戶使用ssh鏈接上去進行操做。咱們經過編輯一個權限文件來處理:centos
$ vi /etc/passwd
找到相似於bash
git:x:1001:1001:,,,:/home/git:/bin/bash
這樣的行,你看到那個末尾的/bin/bash,就是容許ssh鏈接操做的權限,咱們把它改成/user/bin/git-shell,結果以下:服務器
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣處理好,git就不能ssh連上去了(其實是能夠的,只不過會閃退)。
咱們還得給git分配一個密碼,執行:
$ passwd git 123456(你的密碼)
這個密碼用在你後面提交代碼的時候使用。
3.公鑰
這個是git裏面比較特殊的一步操做,通訊的時候,客戶端與服務器須要一個證書進行驗證。操做方法很簡單,首先在你本身的電腦上(ubuntu)生成本身的一個公鑰:
$ cd ~
$ ssh-keygen -t rsa
這時你本身電腦上就有一個公鑰了,可是在哪裏呢?在.ssh目錄下,.開頭的文件夾都是隱藏的,可是能夠cd進去。
$ cd .ssh
$ vi id_rsa.pub
這樣就能看到你的公鑰了,把全部的內容複製下來。接下來,咱們去回服務器上面操做。
$ cd /home/git/
$ mkdir .ssh
$ cd .ssh
$ vi authorized_keys
若是是裸機,服務器上面/home/git目錄下應該沒有.ssh目錄,因此咱們本身建立,打開(自動建立)authorized_keys以後,把剛纔複製下來的公鑰黏貼進去,ok了,保存退出。
使用證書,主要是爲了無需密碼就能夠提交代碼,具體請看《使用SSH證書遠程登錄你的服務器》。
4.初始化一個git倉庫
我習慣把這類東西丟到/var下去,因此,咱們在/var下面建立一個git目錄
$ cd /var
$ mkdir git $ chown -R git:git git $chmod 777 git $ cd git
接下來,咱們用git命令初始化一個倉庫:
$ git init --bare arepoforyourproject.git
初始化完成以後,這個空的倉庫就OK了。
這裏有一個細節,就是.git目錄必需要有可讀寫權限,由於當咱們在push的時候,是使用git用戶推送到服務器上面去,會有一個寫入的過程,若是不賦予可寫權限,push就會失敗。
5.克隆試試
回到你本地的電腦上,咱們經過克隆來試試倉庫是否可使用:
$ git clone git@10.0.0.121:/var/git/arepoforyourproject.git
而後會提示你輸入git的密碼,輸入進去,而後會再提示你克隆了一個空白的版本庫。這說明服務器已經OK了。
6.多用戶和權限管理
若是團隊很小,把每一個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys
文件裏就是可行的。若是團隊有幾百號人,就無法這麼玩了,這時,能夠用Gitosis來管理公鑰。
相關參考:https://www.cnblogs.com/herd/p/7063091.html
http://www.tangshuang.net/1693.html
相關GIT教程還能夠參考廖雪峯的相關教程: