在Debian上使用读/写HTTPS设置Git服务器

三个月前, 我们决定将我们的项目移至Git。 我想您已经知道Git相对于Subversion的优势,因为有关该主题的讨论太多。 我将在这里描述如何将Debian GNU / Linux盒变成支持通过HTTP(S)进行读写操作的Git服务器的快速且最小的配置。

Git支持4种网络协议来传输数据:SSH,Local,Git和HTTP(S)。 许多人都在防火墙后面,防火墙通常最多只允许访问HTTP(S)。 直到最近,Git HTTP(S)仍仅适用于读取操作(仅适用于克隆,提取,提取 ...)。 大约2年前,出现了Smart HTTP Transport 。 使用这些聪明的cgi脚本(现在已成为稳定的Git的一部分),我们可以轻松设置支持通过HTTP(S)进行读/写的Git服务器。

配置步骤

1)在Debian上安装所有必需的软件包:

$> su -
$> apt-get install git apache2 apache2-utils openssl

2)由于我们需要许多Git存储库,因此我们创建了一个包含所有存储库的基本目录。

$> mkdir -p /opt/allgit/repos

3)创建一个 Git仓库,开发人员可以推拉的代码。

$> cd /opt/allgit/repos
$> mkdir repo1.git
$> cd repo1.git
$> git init --bare

4)我们将使用Apache 2 HTTP服务器来支持Git的HTTP(S)。 在Debian上,当您安装apache2软件包时,将创建用户www-data ,它是Apache的用户。 因为我们需要Apache执行Git操作,所以www-data用户必须对每个Git存储库具有读写权限。

$> chown -R www-data:www-data repo1.git/

5) www-data用户仅由Apache使用,而未被开发人员使用,因此我们需要在其他地方定义Git用户。 我们可以使用Apache提供的HTTP身份验证。 我们可以使用htpasswd ,这是一个Apache工具,可以从纯文本密码为用户生成加密密码。 这些用户与OS的Unix用户无关。 因此,使用此策略,我们可以定义所需数量的Git用户,而无需创建Unix用户。 创建一个特定的目录和文件,对www-data用户具有受限的特权,以便保留git用户和密码。

$> mkdir /etc/gitdata
$> cd /etc/gitdata
$> htpasswd -c gitusers.passwd gituser1
$> htpasswd gitusers.passwd gituser2

6)我选择使用安全的HTTP进行Git通信。 因此,我使用openssl创建了一个自签名SSL证书。 在同一目录上创建证书和私钥对。 填写下一个命令所需的所有字段。

$> openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout mygit_ssl.key -out mygit_ssl.crt

7)另外,我们需要在Apache上启用一些模块,因此请确保启用了mod_sslmod_cgimod_aliasmod_env 。 这可以在Debian上使用a2enmod命令轻松完成, 命令将在下一个目录中创建符号链接。

$> a2enmod <apache_module>
$> ls /etc/apache2/mods-enabled/

8)现在,您只需要配置Apache站点就可以了。 假设您已经有一个域名( 例如mygitdomain.com ),以便将其用于您的服务器。 配置Apache站点(并立即进行测试)的快速方法是复制Apache的现有配置并进行所需的配置更改。

$> cd /etc/apache2/sites-available
$> cp default-ssl mygitdomain.com

9)根据下一个配置,添加(或更改)刚刚创建的mygitdomain.com文件的现有配置。

ServerName mygitdomain.com
ServerAdmin webmaster@localhost
ErrorLog /var/log/apache2/git_apache_error.log
 
SetEnv GIT_PROJECT_ROOT /opt/allgit
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias /allgit/ /usr/lib/git-core/git-http-backend/
 
<Directory "/usr/lib/git-core/">
  AllowOverride None
  Options +ExecCGI -Includes
  Order allow,deny
  Allow from all
 
<LocationMatch "^/allgit/repos/.*$">
  AuthType Basic
  AuthName "My Git Repositories"
  AuthUserFile /etc/gitdata/gitusers.passwd
  Require valid-user
 
SSLEngine on
 
SSLCertificateFile    /etc/gitdata/mygit_ssl.crt
SSLCertificateKeyFile /etc/gitdata/mygit_ssl.key

测试您的Git服务器

1)配置完成。 在Apache服务器中启用此站点,然后重新启动Apache。

$> a2ensite mygitdomain.com
$> /etc/init.d/apache2 restart

2)尝试克隆空的git存储库。

$> git clone https://mygitdomain.com/allgit/repos/repo1.git repo1

证书验证错误

error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none while accessing https://mygitdomain.com/allgit/repos/repo1.git/info/refs
fatal: HTTP request failed

您可以通过以下三种方法解决此问题:

1.在当前shell中设置此变量(将为以下所有命令启用)。
$>出口GIT_SSL_NO_VERIFY = false
2.在每个git命令之前设置与以前相同的变量。 $> env GIT_SSL_NO_VERIFY = true 3.为了将您的证书视为受信任的证书,即使它是自签名证书,也可以获取服务器的证书并将其安装在以下目录之一中: / etc / ssl / certs / / usr / share / ca-certificates /

笔记
这只是我三个月前为了评估Git而进行的快速配置。 为了获得更好的配置,您可以改进许多点(增强安全性)。 所有配置均由root用户进行。

参考:我们的JCG合作伙伴 在Debian上使用读/写HTTPS设置了Git服务器   Adrianos Dadis在Java,Integration和源博客的美德上。


翻译自: https://www.javacodegeeks.com/2012/03/setup-git-server-with-readwrite-https.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值