`

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

 

分享到:
评论

相关推荐

    整合Apache+PHP+MySQL

    在IT领域,尤其是在Web开发中,整合Apache、PHP和MySQL是一项基础且重要的任务。这个组合被称为LAMP(Linux、Apache、MySQL、PHP)堆栈,是开源Web服务器平台的基石,广泛应用于各种网站和应用程序的开发。下面我们...

    cxf_web:整合git测试

    这个标题表明我们正在处理一个关于Apache CXF Web服务框架与Git版本控制系统整合的测试项目。Apache CXF是一个开源的Java框架,主要用于构建和开发Web服务,它支持多种协议和服务模型,如SOAP、RESTful、JAX-RS和JAX...

    apache-maven-3.0.4

    1. **整合框架**:Maven可以帮助开发者轻松地集成Spring、Struts和MyBatis等框架,通过依赖管理自动引入相应的库。 2. **配置简化**:Maven的插件可以自动生成Struts的ACTION类、Spring的配置文件以及MyBatis的...

    storm-kafka整合代码

    在分布式计算领域,Apache Storm 和 Apache Kafka 是两个非常重要的组件。Storm 用于实时数据处理,而 Kafka 则是一个高吞吐量的分布式消息系统。当我们谈论"storm-kafka整合代码"时,这意味着我们要将这两者结合,...

    初阶PHP Apache MySQL网站设计

    6. 整合PHP、Apache和MySQL:将这三个组件结合在一起是创建动态网站的关键。你将学习如何设置环境,让PHP脚本与MySQL数据库交互,并通过Apache服务器向用户展示结果。 7. 安全实践:包括如何防止SQL注入、跨站脚本...

    org.apache.servicemix.bundles.spring-jdbc-3.2.8.RELEASE_2.zip

    Apache ServiceMix 是一个基于 OSGi 的企业级服务混合体,它整合了多个开源组件,如 Spring、CXF、Camel 等,提供了一个灵活的平台来构建和部署分布式应用程序。Spring JDBC 是 Spring 框架的一部分,专门用于简化 ...

    jenkins+git+tomcat+ansible发到tomcat-重启

    根据给定的信息,本文将详细解释如何通过整合Jenkins、Git、Tomcat和Ansible实现自动化部署Web应用程序至Tomcat服务器的过程。整个流程分为几个关键步骤:首先在GitHub上创建远程仓库并推送代码;其次安装配置...

    基于Spring MVC与Apache Dbutils整合的图形化模板定制一键生成代码及Spring配置文件设计源码

    该项目是一款基于Spring MVC框架和Apache Dbutils集成的图形化模板定制工具,旨在实现一键化自动生成Model、DAO、Service代码及Spring Web配置文件。该工具采用Freemarker模板语言进行代码生成,支持事务控制,并...

    LINUX+APACHE+PHP+BDB+OPENLDAP+PHPLDAPADMIN安装配置包和步骤2

    8. **配置Apache与PHP及PHPLDAPADMIN的整合**: 配置Apache的VirtualHost,确保mod_php已启用,并设置适当的DocumentRoot指向PHPLDAPADMIN的Web目录。 9. **测试和优化**: 启动所有服务,通过浏览器访问PHPLDAPADMIN...

    基于Linux的Apache+JSP+Oracle.rar

    **整合过程**: 要将Apache、JSP和Oracle整合,首先要确保Apache与Tomcat正确配置,使得Apache能够通过mod_jk或mod_proxy_ajp模块转发JSP请求给Tomcat处理。然后,要在Tomcat中部署JSP应用,这通常涉及打包应用为WAR...

    eclipse插件包括git、maven3、activiti

    Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java...通过将这些插件整合到Eclipse中,开发者可以在一个统一的环境中完成从代码编写到流程设计的全部工作,提升了开发体验和团队协作能力。

    Java Web整合开发王者归来

    《Java Web整合开发王者归来》是一本全面深入探讨Java Web开发技术的专著,涵盖了从基础知识到高级应用的广泛内容。书中的章节设置系统而全面,旨在帮助读者逐步掌握Java Web开发的核心技能。 1. 入门篇:这部分...

    apache-tomcat-8.0.50

    将这些组件整合在一起,可以搭建一个高效、稳定的Java EE开发和运行环境。开发者可以利用Eclipse JEE创建、配置和运行基于Tomcat的Web应用,同时利用Maven管理和构建项目,而JDK 1.8则提供了运行这些应用所需的Java...

    wordpress-git:使用以下工具管理WordPress网站的简单框架仓库:wp-cli,git,composer

    【标题】:“wordpress-git”是针对WordPress网站管理的一个框架,它整合了wp-cli、git和composer这三款强大的工具,旨在让WordPress的开发、部署和版本控制变得更加高效和简便。 【描述】:这个项目名为...

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

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

    springmvc+mybatis框架整合详解

    SpringMVC+MyBatis框架整合详解 本文详细介绍了SSM框架的搭建和SpringMVC开发详解,通过对Spring、MyBatis和SpringMVC框架的整合,实现了一个完整的Web应用程序。 一、SSM框架的搭建 SSM框架是指Spring、...

    showdoc部署整合包.rar

    2. **star7th-showdoc-a43716c.rar**:这很可能是ShowDoc源代码的一个特定版本,标记为"a43716c",这通常是一个Git提交哈希值,表示代码库在某个特定时间点的状态。解压此文件后,用户可以将ShowDoc部署到Apache...

    phpstudy2010 整合压缩包

    "phpstudy2010 整合压缩包"是一个针对初学者和开发者的实用工具,它集成了PHP、Apache和MySQL等关键组件,方便用户在Windows环境下快速搭建Web开发环境。这个压缩包提供了完整的安装程序phpStudy2010.exe以及使用...

    JavaWeb整合开发与项目实战

    项目实战中,开发者还需要掌握版本控制工具,比如Git,以便于团队协作和代码管理。此外,了解单元测试和持续集成的概念也是至关重要的,它们能够帮助开发者在开发过程中及时发现并修复问题。 在Java Web开发中,有...

    基于Webpy+Apache HTTP Server的微信小程序架构搭建研究.zip

    - **版本管理**:使用Git进行代码版本控制,确保团队协作的顺利进行。 - **持续集成/持续部署(CI/CD)**:采用Jenkins或类似的工具实现自动化测试和部署,提升开发效率。 6. **案例分析与实战经验** - 通过具体...

Global site tag (gtag.js) - Google Analytics