Ubuntu下使用gitosis搭建Git伺服器,並且安裝GitWeb
阿新 • • 發佈:2020-05-12
# 什麼是Gitosis?
> Gitosis是一套用來管理authorized_keys檔案和實現簡單連線限制的指令碼。
>
> 而且Gitosis管理使用者許可權並不是通過網頁或者某個程式,而是通過一個特殊的Git倉庫來管理。你只需要在這個非常“特殊”的倉庫配置好使用者和許可權,然後推送到伺服器上面,Gitosis就會隨之改變執行策略。
# 一、Git的安裝與配置
[email protected]是服務端(Ubuntu主機) , ip是: 192.168.204.130
myWindows$ 是伺服器的管理員(也可以作為客戶端使用)
### 1.安裝git和openssh
從這裡開始的命令在服務端執行(記得要登陸到**root**使用者下哦,當然在普通使用者下也可以在命令前加 **sudo** 來提權執行)
> root@ubuntu:/# **apt-get update**
>
> root@ubuntu:/# **apt-get install git-core openssh-server openssh-client**
git-core 是git版本控制的核心軟體
openssh-server和openssh-client 是由於git需要通過ssh協議在服務端與客戶端之間傳輸檔案
### 2.建立git使用者組與git使用者
該使用者作為Git倉庫和使用者許可權的管理員(這裡不建議建立為其他使用者名稱管理,本人試過用自己的名字,最後仍然是真香了)
> root@ubuntu:/# **groupadd git**
>
> root@ubuntu:/# **git -g git -m**
>
> root@ubuntu:/# **passwd git** //設定git使用者的密碼
# 二、Gitosis的安裝與配置
### 1.安裝gitosis前的準備
初始化伺服器的全域性設定,為安裝gitosis做準備。在任何機器上,第一次使用git,必須要先設定**user.name**和**user.email**這兩條屬性。
> root@ubuntu:/# **git config --global user.name "你的name"**
>
> root@ubuntu:/# **git config --global user.email "你的郵箱"**
### 2.安裝python的setuptools
> root@ubuntu:/# **apt-get install python-setuptools**
### 3.安裝gitosis
/tmp 是ubuntu各種安裝包與檔案的存放目錄,所以建議進入此目錄獲取gitosis包,並安裝。
> root@ubuntu:/# **cd /tmp**
>
> root@ubuntu:/tmp# **git clone https://github.com/res0nat0r/gitosis.git**
>
> root@ubuntu:/tmp# **cd gitosis**
>
> root@ubuntu:/tmp/gitosis# **python setup.py install**
### 4.配置gitosis
接下來的命令在管理員機器執行(本文是Windows系統)
使用git管理員的PC(Windows系統)來生成訪問git伺服器的ssh公鑰,然後將生成的ssh公鑰拷貝到git伺服器,執行相關的命令來允許你的個人計算機進行訪問和管理git伺服器。本文使用 myWindows$ 來作為遠端訪問和控制git伺服器的管理員。
管理員PC也要安裝git , Windows安裝git for Windows , Linux系統參照本篇文章 一、Git的安裝與配置
**執行命令使用的是Git Bash視窗**
然後設定**user.name**和**user.email**這兩條屬性。
之後,執行接下來的這條命令,記得不要輸入任何字元,直接回車
> myWindows /$ **ssh-keygen -t rsa**
執行完畢後 , 會在當前使用者目錄下生成.ssh/id_rsa和.ssh/id_rsa.pub。其中.ssh/id_rsa是私鑰.ssh/id_rsa.pub是公鑰。接下來可以使用如下命令將git管理員的公鑰上傳到git伺服器,也可以直接拷貝到git伺服器,建議目錄是 /tmp。
> myWindows /$ **scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa.pub**
如果這條命令拷貝不成功你也可以用其他方式上傳到伺服器的/tmp目錄下,展開你的想象上傳吧!!
回到git伺服器的**/tmp/gitosis**目錄下,執行(又開始用服務端了哦!)
> root@ubuntu:/tmp/gitosis# **chmod a+r /tmp/id_rsa.pub**
>
> root@ubuntu:/tmp/gitosis# **-H -u git gitosis-init < /tmp/id_rsa.pub**
執行完畢後會出現以下資訊 :
> 已初始化空的 Git 倉庫於 /home/git/repositories/gitosis-admin.git/
>
> 重新初始化已存在的 Git 倉庫於 /home/git/repositories/gitosis-admin.git/
Gitosis通過一個git倉庫來管理配置檔案,倉庫放在/home/git/repositories/gitosis-admin.git中。接下來設定git倉庫的許可權
> root@ubuntu:/tmp/gitosis# **chown git:git /home/git/repositories**
>
> root@ubuntu:/tmp/gitosis# **chmod 755 /home/git/repositories**
>
> root@ubuntu:/tmp/gitosis# **chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update**
### 5.在伺服器上新建一個測試專案倉庫
接下來的命令在服務端執行
在伺服器上新建一個空的專案倉庫,叫做 "test" 。
**這裡需要切換到git使用者!!並且確保你在/home/git/repositories目錄下,可以使用pwd命令來檢視現在處於什麼位置。**
> root@ubuntu:/tmp/gitosis# **su - git**
>
> $ **cd repositories**
>
> $ **git init --bare test.git**
>
> $ **exit**
到此為止,test只是一個空的倉庫,它是不能被clone的。為了能clone,必須要讓管理員放一個初始化的版本到倉庫中。所以現在我們需要先修改一下gitosis-admin倉庫。
### 6.管理gitosis的配置檔案
接下來的命令在管理員機器執行
Gitosis本身的配置也是通過git來實現的。在剛剛上傳公匙的電腦(就是使用ssh-keygen -t rsa命令的機器)上把伺服器上的gitosis-admin.git這個倉庫clone下來,就可以用管理員的身份修改配置了。因為之後還要繼續進行管理所以最好有特定的資料夾存放。
**注意:**訪問git使用者倉庫的預設路徑是/home/git/repositories/
> myWindows /$ **cd /**
>
> myWindows /$ **mkdir admin**
>
> myWindows /$ **cd admin**
>
> myWindows /admin$ **git clone [email protected]:gitosis-admin.git**
>
> myWindows /admin$ **cd gitosis-admin**
該目錄下的keydir目錄是用來存放所有需要訪問git伺服器的使用者的ssh公鑰。哥哥使用者按照前面的方法生成各自的ssh公鑰之後按照名字重新命名一下,然後拷貝到keydir目錄下,然後修改本目錄下的gitosis.conf檔案,做出相應的配置:
> [gitosis]
>
> [group gitosis-admin]
>
> members = tom david
>
> writable = gitosis-admin
>
>
>
> [group team]
>
> members = david tom pitter
>
> writable = test
**注意:**members = keydir目錄下 .pub檔名,否則是沒有訪問許可權的!多個管理者之間要用空格分開,專案名也是一樣的。
這個配置檔案表達瞭如下 :
gitosis-admin組成員有david和tom , 該組對gitosis-admin倉庫有讀寫許可權 ; test組由david tom和pitter三個成員 , 該組對test倉庫有讀寫許可權。
目前這些配置更改只是在本地,必須推送到遠端的git伺服器上才能真正生效。所以在gitosis-admin目錄下執行一下操作
> myWindows /admin/gitosis-admin(master)$ **git add .**
>
> myWindows /admin/gitosis-admin(master)$ **git commit -am "更改git伺服器配置,增加管理員,配置成員可讀寫的庫"**
>
> myWindows /admin/gitosis-admin(master)$ **git push origin master**
### 7.初始化測試專案
現在,伺服器已經搭建完畢,並且有一個空的專案test在伺服器上。接下來,需要測試一下,空倉庫是不能被clone的,所以需要某個由讀寫許可權的人初始化一個版本。在管理員的PC執行 :
> myWindows /admin/gitosis-admin(master)$ **cd /**
>
> myWindows /$ **mkdir test-ori**
>
> myWindows /$ **cd test-ori**
>
> myWindows /test-ori$ **git init**
>
> myWindows /test-ori(master)$ **echo "/\*初始化一個版本,這樣其他的成員才能clone\*/" > version.txt**
>
> myWindows /test-ori(master)$ **git add .**
>
> myWindows /test-ori(master)$ **git commit -m "initial version"**
>
> myWindows /test-ori(master)$ **git remote add origin [email protected]:test.git**
>
> myWindows /test-ori(master)$ **git push origin master**
到此為止,test已經有一個版本了。team的其他成員只要先clone一下test倉庫就可以了,而且這些成員需要在gitosis.conf中被賦予讀寫許可權。
# 三、安裝GitWeb
### 1.安裝gitweb,apache2
> root@ubuntu:/tmp/gitosis# **cd /**
>
> root@ubuntu:/# **apt-get install gitweb apache2**
### 2.修改配置檔案(記得儲存)
***①修改/etc/gitweb.conf***
***內容如下:***
> vim /etc/gitweb.conf
>
> $projectroot = "/home/git/repositories";
>
> $git_temp = "/tmp";
>
> $projects_list = $projectroot;
>
> @stylesheets = ("../gitweb/static/gitweb.css");
>
> $javascript = "../gitweb/static/gitweb.js";
>
> $logo = "../gitweb/static/git-logo.png";
>
> $favicon = "../gitweb/static/git-favicon.png";
>
> @diff_opts = ();
這個檔案的更改基本就是去除註釋而已啦,很簡單的。
***②修改/etc/apache2/conf-available/gitweb.conf***
***內容如下:***
> Alias /gitweb /usr/share/gitweb
>
>
>
> Options +FollowSymLinks +ExecCGI
>
> AddHandler cgi-script .cgi
>
>
### 3.使cgi生效
> root@ubuntu:/# **a2enmod cgi**
>
> root@ubuntu:/# **service apache2 restart**
### 4.訪問GitWeb
> **192.168.204.130/g