- Windows 7 Ultimate, 64-bit 6.1.7601, Service Pack 1(實體機,虛擬機VMware的宿主機)
- VMware® Workstation 7.1.4 build-385536
- Fedora 16 x86_64(Git服務器,是上學時候安裝的虛擬機,已經整整8年了,老了唉)
- Windows 10 v1511 x64(實體機,測試外網連接git服務器)
- Git(自行編譯/下載)
- Apache(自行編譯/下載)
- gitweb(自行編譯/下載)
有興趣的同學可以去研究下《HTTP權威指南》,這本書不算薄(手動滑稽)。
其實不單是HTTP協議,所有網絡協議都可以被概括為
“為了傳送指定的數據,網絡中發送數據的一端要和接受數據的一端約定一個相同的數據格式,這個數據格式就是所謂的協議”。
從廣義上來講,所有人都可以制定協議,只是市面上大家一起用的就那么幾個而已,所以HTTP也同樣沒那么神秘。
”超文本傳輸協議(HTTP)是用於傳輸諸如HTML的超媒體文檔的應用層協議。它被設計用於Web瀏覽器和Web服務器之間的通信,但它也可以用於其他目的。 HTTP遵循經典的客戶端-服務端模型,客戶端打開一個連接以發出請求,然后等待它收到服務器端響應。 HTTP是無狀態協議,意味着服務器不會在兩個請求之間保留任何數據(狀態)。雖然通常基於TCP / IP層,但可以在任何可靠的傳輸層上使用; 也就是說,一個不會靜默丟失消息的協議,如UDP。“
HTTP在大部分人眼里的用途就是在Web瀏覽器中輸入一個URL(網站地址),然后Web瀏覽器中就會呈現出一個五彩繽紛的世界(網頁),所以很大一部分就出現了思維定勢,認為HTTP就是用來做網站的協議,然而這種認知是非常錯誤的,事實上HTML只是搭載HTTP服務器傳輸給客戶機的一種文檔而已,HTML可以由類似php、python、perl等語言動態生成,當然也可以是提前編輯好的HTML文檔,HTML傳輸到客戶機之后,大量的工作都是由Web瀏覽器去做,Web瀏覽器會去解析HTML文檔,然后以圖形、文字或視頻的形式在瀏覽器中經行渲染輸出,豐富信息,以達到友好的人機交互。
然而事實上,你可以用HTTP可以去傳送任何你想要的數據,只要發送/接收端有能處理這些數據的方法(程序),這就是為什么sample.git明明是git建立的一個文件夾,卻可以包含到URL中(http://www.web-site.com/sample.git),git客戶端可以將此URL設為遠程庫,從而在此庫上進行一系列的git操作(clone、commit等),因為git服務端有cgi腳本,通過perl-cgi解析sample.git目錄中的git信息,將git信息解釋為HTML文檔,最后再把HTML文檔發送給客戶端,就可以通過Web瀏覽器去查看或管理git庫,而客戶端的git程序會將URL解析為一個類似本地路徑(雖然不是,但是意思一樣),路徑里包含了所有git信息,要什么數據客戶端都會向git服務端請求,然后git服務端將所需要代碼等一並傳輸到git客戶端(即下載),所以git客戶端就可以依據URL進行git的克隆、提交等操作。
git自身也提供網頁化服務功能,依賴輕型http服務程序,管理員就可以輕松做出一個git的web站點,只是如果作為web形式長期訪問的話,用apache或者nginx搭建一個比較好。
git的SSH服務器搭建比較簡單,就不再贅述,搭建過程中只需要注意兩點:確保SSH服務正常運行,防火牆將SSH(端口一般為22)設為信任,剩下的就按照官方文檔配置就行。
- 配置監聽端口
[root@Fedora ~]# vim /etc/httpd/conf/httpd.conf
找到“Listen”塊,配置
Listen 8080
因為我的80端口被nginx占用了,所以用了8080,注意tomcat可能將8080占用,這時候你的機器上就要配置一個未被占用的端口為apache監聽端口。
- 模塊及擴展腳本配置
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule cgi_module modules/mod_cgi.so
如果上訴三個模塊被注釋掉的話,就去掉注釋,放開模塊。
Include /etc/httpd/conf.d/gitweb.conf
在httpd.conf腳本最后加入擴展的配置腳本
- 擴展腳本
[root@Fedora ~]# cd /etc/httpd/conf.d
/etc/httpd/conf.d文件夾中存放的是apache的擴展腳本,如果已經安裝git和gitweb,里面應該有一個git.conf腳本,是安裝git和gitweb時自動生成的
Alias /git /var/www/git <Directory /var/www/git> Options +ExecCGI AddHandler cgi-script .cgi DirectoryIndex gitweb.cgi </Directory>
但是我們現在要自己搭建一個git服務器,所以就自己自定義一個gitweb.conf腳本,內容如下
Alias /gitweb /home/git/gitweb <Directory /home/git/gitweb> Options +ExecCGI AddHandler cgi-script .cgi DirectoryIndex gitweb.cgi </Directory>
大致和git.conf一樣,不一樣的地方是HTTP索引變為由/git變為/gitweb,索引指向的目錄變為/home/git/gitweb,其中"git"為專門為Git服務端設置的用戶名,"gitweb"是存放git庫的文件夾,怎么建用戶、及git建庫,請自行從萬能的網絡或者書籍獲取。
- 重啟服務
[root@Fedora ~]# systemctl restart httpd.servic
- 設置cgi腳本
$ cp /var/www/git/gitweb.cgi /home/git/gitweb/gitweb.cgi
$ cp -r /var/www/git/static /home/git/gitweb/static
- Web瀏覽Git的http服務
- 服務器本地Web瀏覽器可以訪問HTTP,但是客戶機無法訪問
[root@Fedora ~]# setup
將HTTPS和HTTP設為信任,保存關閉。
然后修改/etc/sysconfig/iptables
[root@Fedora ~]# vim /etc/sysconfig/iptables
將8080端口放開
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
然后重啟防火牆IP端口規則
[root@Fedora ~]# systemctl restart iptables.service
然后http服務就正式對外開放了。
- HTTP可以ping通,但是無訪問權限
[root@Fedora ~]# usermod -a -G git apache
確保 apache用戶(在httpd.conf中配置的用戶)具有訪問 gitweb指定代碼庫的權限,比如, /home/git/gitweb 屬於git用戶和git組,所以將git添加到apache用戶組中,以保證apache對/home/git/gitweb的權限最大化,還是權限不夠,那么就直接將git用戶的目錄權限全部放開(哈哈)
[root@Fedora ~]# chmod 777 /home/git
- 鏈接