nginx,是当前最流行的web服务器。
git,是当前最流行的代码管理工具。
我们经常使用的是git的客户端功能,而开源网站要提供git的服务器功能。
git服务器一般包含ssh和http两种协议的上传和下载,并且要支持网页版的代码浏览。
目前开源的代码库软件很多(例如gitlab),但我觉得最好用的还是git自带的gitweb。
接下来说说怎么在nginx上部署gitweb。
1,gitweb和perl语言
gitweb是用perl语言写的一个CGI脚本。
perl是非常古老的编程语言,在php出现之前曾被广泛用在网站的后端。
perl流行的时候是三十年前,我学编程的时候php已经是“最好的语言”了[捂脸]
perl这种“上古脚本”要运行起来,不但需要nginx服务器,还需要fcgiwrap。
nginx用来处理http请求,fcgiwrap负责把http里包含的网页内容传递给perl脚本。
perl语言的背景说完了,接下来直接看nginx支持gitweb时的配置文件。
2,nginx的配置文件
如下图,第1个框就是gitweb脚本的配置,文件fcgiwrap.socket就是nginx和fcgiwrap之间的通讯工具,它是一个AF_UNIX域的socket文件,位于/var/run目录。
在unix上一切都是文件,包括socket。
常用的socket只有两种,一种是AF_INET用于网络通信,另一种是AF_UNIX用于本机的进程间通信。
nginx和fcgiwrap,就是同一台电脑上的不同进程。
nginx.conf文件的内容
第3个框的内容,是把服务器的主页也设置成gitweb脚本,所以访问/gitweb.cgi与访问服务器的根目录的效果是相同的。
第2个框的内容,是处理通过http协议的代码上传和下载。
这里要用到一个程序git-http-backend,它是git自带的http处理工具,配置项里的目录是它的默认安装路径。
3,nginx和fcgiwrap的启动
配置好nginx之后要先启动fcgiwrap,命令如下:
sudo fcgiwrap -f -s unix:/var/run/fcgiwrap.socket &
要让它以root身份运行,否则没有权限在/var/run目录下创建文件。
命令末尾的符号&表示后台运行,这样退出shell之后fcgiwrap会继续运行。
然后把fcgiwrap.socket文件的权限设置成0777,以免因为权限不够而出错,命令如下:
sudo chmod 0777 /var/run/fcgiwrap.socket
然后启动nginx,命令为:sudo nginx
nginx也要以root身份运行,否则没法绑定80端口(http端口)。
现在可以在浏览器里输入http://127.0.0.1来看代码了,效果如下:
gitweb的效果图
4,代码的下载与上传
下载代码的命令是:git clone http://127.0.0.1/gitweb/A/.git
下载成功之后,把修改之后的代码再上传到服务器,命令是:git push origin master
默认情况下,服务器上的代码库是不允许上传代码的,要在配置项里打开它。
把服务器上的A/.git/config文件修改成下图这样,就可以上传代码了。
修改项目A的config文件,打开上传功能
上传的效果图如下:
上传的效果图
gitweb是一个非常小的网页浏览器,只有一个perl文件、一个js文件、一个css文件、外加两张图片。
我就喜欢这种轻量级的模块,不喜欢庞大的框架。