`

git 整合apache

阅读更多

 

SSH协议私服

适合公司内部小型团队使用的是SSH协议

因为这个协议简单、快速、安全,唯一麻烦的就是需要设置主机信任关系(将公钥提交到私服上,以使得私服与自己建立信任关系),这类文章网上很多,这里就不讲述了,可以参考以下链接:

http://bbs.scmlife.com/thread-22143-1-1.html
http://blog.prosight.me/index.php/2009/11/485

同时除了标准的SSH协议外,还可以实现一些基于SSH协议封装的东东,比如SSH+GitShell和Gitosis,都可以简化一些配置管理的工作

 

只读的HTTP协议私服

本文主要讲述的还是HTTP协议私服的搭建,这里我们先不考虑如何提交代码,仅考虑检出(只读)的情况

首先,需要一个apache服务器,这个安装就不说了,假设安装完成的apache服务器在~/local/httpd22位置

然后执行以下语句

$ cd ~/local/httpd22/htdocs
$ mkdir myproject.git
$ cd myproject.git
$ git init --bare

这里需要注意--bare参数,表示是要生成一个"干净"的仓库,仅包含历史代码不包含工作代码。如果是希望初始化一个已存在的代码库,也可以类似如下命令替换最后一行git命令:

$ git clone --bare /path/to/my_project myproject.git

注意这里也使用了--bare参数,表示仅克隆出历史代码

这样完成了一个仓库的初始化,但要客户端可以使用还缺少了一步——配置钩子(hook),执行下面命令:

$ cd ~/local/httpd22/htdocs/myproject.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
$ ./hooks/post-update  # 刚刚初始化完成必须手工执行一次

这样Git会在每次有update之后(post update)执行这个钩子(其实际是执行了命令:git update-server-info,可以通过vi hooks/post-update查看)

现在大功告成,客户端可以执行这样的代码来获取项目代码:

$ git clone http://bb-iit-dev05.bb01.baidu.com:8080/gitproject.git

 

可写的HTTP协议私服

可写的HTTP协议私服是基于WebDAV实现的,它比SSH的好处是可以不需要生成公私钥,通过用户名密码认证(HTTP Basic认证),对于普通用户来说更加简便且容易理解

我们将在上一节的基础上将服务器改造成可写的私服

 

1. 开启WebDAV

首先是要开启Apache服务器的WebDAV功能,以Apache Http 2.2为例。首先建立gitrepo目录用于存放git的仓库

$ cd ~/local/httpd22
$ mkdir gitrepo

然后在conf/httpd.conf中将如下行去掉注释:

Include conf/extra/httpd-dav.conf

编辑文件conf/extra/httpd-dav.conf,写入大致如下内容:

DavLockDB "/home/work/local/apache-httpd-2.2.11/var/DavLock"

Alias /git "/home/work/local/apache-httpd-2.2.11/gitrepo"

<Directory "/home/work/local/apache-httpd-2.2.11/gitrepo/">
    Dav On
    Options +Indexes +FollowSymLinks

    AllowOverride None
    Order Allow,Deny
    Allow from all

    AuthType Basic
    AuthName "Git"
    AuthUserFile "/home/work/local/apache-httpd-2.2.11/user.git"
    Require valid-user
</Directory>

其中第一行高亮为指定DAVLockDB的位置,需要确保路径/home/work/local/apache-httpd-2.2.11/var存在,否则会遇到无法获取锁的问题

AuthUserFile是用于存储用户密码的文件,这个文件需要我们生成:

$ htpasswd -bc user.git guolin mypass

如果已经存在这个文件则不需要-c参数

然后重启Apache服务器

$ cd bin
$ ./apachectl configtest
Syntax OK
$ ./apachectl restart

现在试试看使用任意浏览器访问URL:http://bb-iit-dev05.bb01.baidu.com:8080/git/,如果弹出提示输入用户名密码则表示配置成功,输入之前htpasswd设置的用户名密码后,登录成功

 

2. 建立测试用仓库

首先需要建立一个供我们测试用的仓库,这个仓库可以从其他地方clone过来,也可以自己init出来,但前提是必须带有--bare参数,例如:

$ cd ~/local/httpd22/gitrepo
$ mkdir testproject.git
$ cd testproject.git
$ git init --bare
$ mv hooks/post-update.sample hooks/post-update
$ ./hooks/post-update

 

3. 测试

首先自然是测试clone功能:

$ git clone http://guolin@bb-iit-dev05.bb01.baidu.com:8080/git/testproject.git

会提示需要输入密码,输入正确后,clone成功

接着测试push功能,这个才是配置WebDAV的重点,接上面:

$ cd testproject
$ echo this is a testing > a
$ git add a
$ git commit -am "just test"
$ git push origin master

输入密码后如果提交成功则表示测试OK。如果提示下面的错误:

fatal: git-push is not available for http/https repository when not compiled with USE_CURL_MULTI
fatal: git-http-push failed

则表示git需要带上USE_CURL_MULTI的flag重新编译才能支持git-http-push功能

 

4. 权限配置

到此为止我们还只是构建了一个需要认证的,且可以用于push的Git私服,还没有涉及到授权这块。那么下面我们将通过WebDAV为私服增加授权配置

由于权限是基于WebDAV配置的,因此我们主要是修改Apache的httpd-dav.conf文件:

<Directory "/home/work/local/apache-httpd-2.2.11/gitrepo/">
    Dav On
    Options +Indexes +FollowSymLinks

    # 拒绝所有请求
    Deny from all

    AuthType Basic
    AuthName "Git"
    AuthUserFile "/home/work/local/apache-httpd-2.2.11/user.git"
    AuthGroupFile "/home/work/local/apache-httpd-2.2.11/group.git"
</Directory>

<Directory "/home/work/local/apache-httpd-2.2.11/gitrepo/testproject.git/">
    Allow from all
    Order Allow,Deny
    # 可读组
    <Limit GET>
       Require group testproject-read
    </Limit>
    # 可写组
    <Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
       Require group testproject-write
    </Limit>
</Directory>

以上高亮的地方是需要注意的,首先我们添加了AuthGroupFile用于根据组来授权的功能;然后为我们的testproject项目进行了独立配置,使用Limit限制了testproject-read组和testproject-write组的不同权限

接下来我们编辑group.git文件,将用户加入到组中(假设user.git中现在有guolin,wujinliang,liuou三个用户):

testproject-read: guolin
testproject-write: wujinliang liuou

这样配置表示guolin有读取testproject的权限,却没有写入权限,而wujinliang和liuou却拥有读写权限。至此权限配置完成

可以使用guolin用户测试下效果:

$ git push origin master
Password:
error: The requested URL returned error: 401 while accessing http://guolin@bb-iit-dev05.bb01.baidu.com:8080/git/testproject.git/info/refs
fatal: HTTP request failed

这样一个带有权限配置的Git HTTP私服就大功告成了

 

关于客户端

按照以上配置,每次Git客户端进行读写操作都需要重新输入密码,如果觉得太麻烦,那么可以编辑~/.netrc文件(因为git是基于curl来进行http传输的)

machine bb-iit-dev05.bb01.baidu.com
login guolin
password mypass

 

分享到:
评论

相关推荐

    若依整合Ureport2导出报表错误的解决方法

    若依整合Ureport2导出报表提示 Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 的解决文档说明

    CentOS下与Apache连接的PHP多版本共存方案实现详解

    apache下有多个fastCGI的支持方案:至少有mod_fcgi、mod_fastcgi(git)、mod_proxy_fcgi等。这两个模块都有点老,尤其mod_fastcgi自从2007年以来就没有更新,略掉不谈,事实上没用过用。mod_proxy_fcgi模块是httpd ...

    java版商城源码下载-idea_git:耶稣

    Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。 JeeSite主要定位于企业信息化领域,已内置企业信息化系统的基础功能和高效的代码生成工具, 包括:系统权限组件...

    开源bbs源码java-testgit:测试git

    JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台。 JeeSite本身是以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache...

    tomcat:Apache Tomcat 的 Docker 官方镜像打包

    这是用于的的 Git 存储库(不要与tomcat上游提供的任何官方tomcat镜像混淆)。 有关如何使用此 Docker 映像的完整自述文件以及有关贡献和问题的信息,请参阅。 的 生成/维护,特别是。 看到此处合并的更改尚未显示...

    开源bbs源码java-cb-shop:测试git

    Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。 JeeSite主要定位于企业信息化领域,已内置企业信息化系统的基础功能和高效的代码生成工具, 包括:系统权限组件...

    开源bbs源码java-jeesites:测试git

    Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。 JeeSite主要定位于企业信息化领域,已内置企业信息化系统的基础功能和高效的代码生成工具, 包括:系统权限组件...

    webvectors:将您的word2vec网络化:在线服务分布式语义模型的框架

    网页向量 Webvectors是在网络上提供矢量语义模型(尤其是基于预测的单词嵌入,如word2vec或ELMo )的工具包,可轻松向公众展示其功能。 它要求Python&gt; = 3.6,并在后台使用Flask , Gensim和... Apache的整合或Gunicorn

    java版商城源码下载-jeesite:复制https://git.oschina.net/thinkgem/jeesite

    Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。 JeeSite主要定位于企业信息化领域,已内置企业信息化系统的基础功能和高效的代码生成工具, 包括:系统权限组件...

    java查看sun包源码-heroku-blog:使用Maven管理的轻巧型个人博客,基于SpringMVC与Hibernate,可用于部署在

    并整合Spring Boot,可用于部署在Heroku等云端上,项目运行预览:。 使用支付宝,打赏一下作者,请他喝瓶饮料。 部署开发环境 如果你想二次开发本应用,可以将其直接导入IDE开发(本应用使用Undertow作为容器运行),...

    基于SpringMVC+Spring+MyBatis (SSM) 架构的高效率便捷开发框架源码+项目说明.zip

    本项目是一个整合 **SpringMVC+Spring+MyBatis(SSM)** 框架的 **Demo**。 拥有高效率便捷开发模式,使开发人员更专注于业务,达到面向业务开发。 项目使用 **Maven** 构建,便于项目管理,支持 **Oracle、...

    kafka-connect-mqtt:Kafka Connect MQTT连接器

    kafka-connect-mqtt 此仓库包含用于Apache Kafka的MQTT源和接收器连接器。 已通过Kafka 2+进行了测试。 使用源连接器,您可以订阅MQTT主题,并将这些消息写到Kafka主题。 接收器连接器以相反的方式工作。 笔记: ...

    wagon:免安装可携的Laravel开发环境

    DR:这是一个整合cmder,git,uwamp,composer的懒人包,只要下载后就可以直接拥有一个免安装可携带的Laravel开发环境:) 警告:wagon原始的设计用意,仅在于“免安装”与“快速获取Laravel开发环境”,方便如工作坊...

    springboot-dubbo-zookeeper-demo:弹簧靴集成dubbo和zookeeper

    git clone git@github.com:apache/incubator-dubbo.gitcd incubator-dubbomvn clean install -DskipTests -Drat.skip=true下载原始打包如果不想下载打包也行,直接用官方的包,不过官方只提供了0.1.0版本的包,只能...

    单点登录源码

    Apache Shiro | 安全框架 | [http://shiro.apache.org/](http://shiro.apache.org/) Spring session | 分布式Session管理 | [http://projects.spring.io/spring-session/]...

    artemis-wildfly-integration:存放必要的资料的存储库,以将ActiveMQ6与WildFly集成

    去做这个: git clone https://github.com/apache/activemq-artemis cd activemq-artemis mvn clean install 一旦activemq Artemis的构建完成,就会将适当的jar添加到您的本地.m2目录中,并且您可以从artemis-...

    Hexos:基于[hexo](https:hexo.iozh-cn)的框架

    基于的整合框架 组件 插件 文章摘录: Ver: Git部署: Ver: 提要: 版本: 搜索数据生成: 版本: 搜索数据生成: 版本: 站点地图: 版本: JSON内容数据: 版本: Restful API: 版本: PullRequests...

    .net开源的综合开发框架wojilu框架.zip

    官方网址:http://www.wojilu.com开发教程:http://www.wojilu.com/framework授权协议:Apache License,可免费用于商业环境参加开发团队比较简单,一般需要先了解 Git 和 Github 的操作:Git 使用教程图解(中文): ...

    offline-layers:使用Cordova http-mbtiles插件的实验性离线地图应用程序

    离线层使用 cordova插件进行离线层的实验。描述首先,将在/storage/sdcard/tiles目录中找到的*.mbtiles文件添加为Leaflet和Openlayers映射的图层。要求Apache Cordova&gt; = 3安装 git clone ...

    CalculatorDevOps:小型项目SPE

    #CalculatorDevOps 这是班加罗尔IIIT软件生产工程课程的一个小型项目... 源代码管理管理-Git和GitHub 测试-JUnit 构建-Apache Maven 持续整合-詹金斯 容器化-Docker 配置管理和持续部署-Ansible 连续监控-ELK堆栈

Global site tag (gtag.js) - Google Analytics