1. 程式人生 > >Ubuntu下使用gitosis搭建Git伺服器,並且安裝GitWeb

Ubuntu下使用gitosis搭建Git伺服器,並且安裝GitWeb

# 什麼是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