首先,复制模板文件过来,你可以挑选其中之一。以下是debian的文件位置,其他发布请自行查询。
/usr/share/doc/mercurial-common/examples/hgweb.wsgi
/usr/share/doc/mercurial-common/examples/hgweb.fcgi
/usr/share/doc/mercurial-common/examples/hgweb.cgi
我使用nginx+fastcgi模式部署,因此复制了hgweb.fcgi。我假定你的仓库在~/hg下面,有很多子仓库。复制hgweb.fcgi到~/hg/下,改名为hgweb.py,并修改以下两行。
config = "/path/to/you/config"
WSGIServer(application, bindAddress='hgweb.sock').run()
其中bindAddress为你需要监听的unixsocket路径,没有前缀表示在当前目录生成。而后建立配置文件,大概为以下内容。
[web]
allow_push = someone
push_ssl = false
[paths]
/hg/proj1=/path/to/proj1
/hg/proj2=/path/to/proj2
以上就完成了hgweb的服务配置,/hg/proj1是你的url映射路径,/path/to/proj1是物理路径。someone是允许进行push的人,而push_ssl是允许http推送。而后,启动服务。
python hgweb.py &
chmod 666 hgweb.sock
注意,这里要用screen之类的程序来启动hgweb,否则term关闭后服务进程停止,就没的玩了。修改权限是因为debian下的nginx使用www-data运行,对/home/user/hg没有读写权限,导致无法使用unixsock。
在nginx中做以下配置。
location ^~ /hg/ {
limit_except GET {
auth_basic "Restricted";
auth_basic_user_file /home/user/hg/users;
}
fastcgi_pass unix:/home/user/hg/hgweb.sock;
include fastcgi_params;
}
如果你不需要auth,可以自行参照nginx的配置修改。其他web服务器以此类推。重启服务后,http://domains/hg/proj1就可以访问到proj1了。
当然,其实最后还要提一句,如果你不需要web界面,可以直接设定将文件内容直接发出去,这样也是可以做pull/push的。
参考:
没有评论:
发表评论