GitSmartHTTP for gitolite repositories over Apache 不允许我推送

2024-04-16

我正在设置一个 git-http-backend CGI 脚本来处理我的git.domain子域。服务器位于AWS云上的ELB(弹性负载均衡器)后面。我的服务器配置如下(我的 git 托管由 gitolite 处理):

<VirtualHost *:80>
    ServerName git.domain
    ServerAdmin hjpotter92+git@domain

    #SuexecUserGroup git git                                                                                                                                                                    
    DocumentRoot /opt/gitolite/repositories/

    PerlLoadModule Apache::Authn::Redmine

    SetEnv GIT_PROJECT_ROOT /opt/gitolite/repositories/
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER # Have also tried removing this variable
    SetEnv GIT_HTTP_EXPORT_ALL

    ScriptAliasMatch \
        "(?x)^/(.*/(HEAD | \                                                                                                                                                                    
           info/refs | \                                                                                                                                                                        
           objects/(info/[^/]+ | \                                                                                                                                                              
           [0-9a-f]{2}/[0-9a-f]{38} | \                                                                                                                                                         
           pack/pack-[0-9a-f]{40}\.(pack|idx)) | \                                                                                                                                              
           git-(upload|receive)-pack))$" \
        /opt/gitolite/git-core/git-http-backend/$1

    <Directory "/opt/gitolite/git-core">
        AllowOverride None
        Options +ExecCGI -Includes
        Require all granted
    </Directory>
    <Location />
        # enabled in desparation...
        # saw it somewhere in bugzilla powered mailing list
        DAV On

        Order allow,deny
        Require all granted

        AuthType Basic
        AuthName "Git Repositories"
        AuthUserFile /dev/null
        Require valid-user

        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler

        RedmineDSN "DBI:mysql:database=redmine;host=endpoint.rds.amazonaws.com"
        RedmineDbUser "user"
        RedmineDbPass "your"
        RedmineGitSmartHttp yes
    </Location>

    LogLevel info
    CustomLog /var/log/apache2/gitolite.access.log combined
    ErrorLog  /var/log/apache2/gitolite.error.log
</VirtualHost>

我的 apache 服务器是由www-data:www-data用户/组,并且 gitolite 设置为git:git用户/组。为了允许 apache 读/写存储库,我做了:

# usermod -a -G git www-data
// and as a desparate measure, in frustration, the following:
# usermod -a -G www-data git

The PerlAccessHandler并且用户身份验证工作正常,因为我可以使用 redmine 设置中的有效凭据集来克隆我的存储库。

然而,当我试图推动时;我在服务器日志中收到以下内容:

10.0.225.176 [11/Feb/2017:07:46:26 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 401 726 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 401 725 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 200 848 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "POST /xxx.git/git-upload-pack HTTP/1.1" 200 130408 "-" "git/2.11.0"

在客户端(在我在负载均衡器中设置的任何连接超时(30 秒到 10 分钟)后出现以下内容):

Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 930 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504 GATEWAY_TIMEOUT
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

很多时候,我也有POST to git-upload-pack长度为 0(对于具有相同提交的同一存储库的同一命令)

10.0.225.222 [11/Feb/2017:07:50:55 +0530] "POST /pandorica.git/git-receive-pack HTTP/1.1" 200 0 "-" "git/2.11.0"
10.0.225.222 [11/Feb/2017:07:53:21 +0530] "POST /pandorica.git/git-receive-pack HTTP/1.1" 200 0 "-" "git/2.11.0"

并在我的服务器错误日志中收到以下内容:

[core:error] [pid 1683] (70007)The timeout specified has expired: [client 10.0.225.176:2534] AH00574: ap_content_length_filter: apr_bucket_read() failed
[cgid:error] [pid 1683] (70007)The timeout specified has expired: [client 10.0.225.176:2534] AH02550: Failed to flush CGI output to client

我什至尝试过 setuid 和 git 用户的 setuid,希望它可以帮助我推送到存储库;但无济于事!

chmod u+s /opt/gitolite/repositories
chmod g+s /opt/gitolite/repositories
// and the same commands for `*.git` inside `repositories`

里面的 git 配置/opt/gitolite/repositories/xyz.git/:

http.postbuffer=200M
core.repositoryformatversion=0
core.filemode=true
core.bare=true
redminegitolite.projectid=xxx
http.receivepack=true
http.uploadpack=true

作为参考,我已经完成了以下各项:

  1. git-http-后端 https://stackoverflow.com/q/7222992/1190388
  2. Apache 和 git-http-backend https://stackoverflow.com/q/25995863/1190388
  3. 如何通过 http 设置 git? https://stackoverflow.com/q/26734933/1190388
  4. 使用 apache 2.4 设置 git-http-backend https://stackoverflow.com/q/40924641/1190388
  5. 使用 git-http-backend.exe 在 Windows 上设置 Git 服务器 https://stackoverflow.com/q/3817478/1190388

如何设置 Apache VHost 以使其开始接受git push.


我花了一段时间。就我而言,这是权限。我将 docker 引擎进程配置为以非 root 身份运行容器。--userns-重新映射

I have

#/etc/subuid 
docker-user:100000:65536

#/etc/subgid 
docker-runner:100000:65536

#/etc/passwd
docker-user:x:90:90::/home/docker-user:/sbin/nologin
dockremap:x:220:220::/home/dockremap:/bin/false
docker-root:x:100000:2::/home/docker-root:/sbin/nologin
docker-daemon:x:100001:2::/home/docker-daemon:/sbin/nologin 

只需使用这个命令:

setfacl -RL -m g:100000:rwx -m g:100002:rwx /var/git 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitSmartHTTP for gitolite repositories over Apache 不允许我推送 的相关文章

  • 升级到 Yosemite 后 Apache 配置损坏

    昨天我升级到 Yosemite 现在我的 Web 开发本地配置不再起作用 我设法在下面设置了一个 userdir Users user public html我可以通过以下方式访问所有网站localhost user websitename
  • 一个好的多线程 python 网络服务器?

    我正在寻找一个多线程而不是多进程的 python Web 服务器 如 apache 的 mod python 的情况 我希望它是多线程的 因为我希望有一个内存对象缓存供各种 http 线程使用 我的网络服务器做了很多昂贵的事情并计算了一些大
  • PHP 编译器 openssl 错误

    在提问之前 我必须说我已经tried堆栈和其他地方的每个类似问题都失败了 我无法使用composer因为这个错误 requires ext openssl gt the requested PHP extension openssl is
  • Apache 2.2 重定向到 SSL *然后* 进行身份验证(使用解决方案 < 但这是废话吗?)

    似乎是 apache 的地方 所以这里 老问题 如何重定向 HTTP gt HTTPS 然后且仅当 HTTPS 时才进行身份验证 哦 我希望其中的大部分内容都在一个片段中 可以包含在多个 或 块中 因此没有虚拟主机级别的基于随机路径的重写
  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • Apache 2 gzip json 默认输出吗?

    我正在使用此 PHP 代码进行 json 输出 apache默认gzip吗 或者 我该如何检查才能确定 header Content type application json header Cache Control max age 0
  • Apache mod_wsgi django启用多线程多进程

    问题 我如何知道我的 apache 服务器是否已经在多进程和多线程模式下运行 因为当我对其进行负载测试时 它在不同的线程数下给出了相同的结果时间 我用 25 个线程和 50 个线程运行测试 我需要在 Django 代码中为多线程 多进程工作
  • Apache HTTP localhost 在 macOS Monterey 上随机花费 5 秒,但在 HTTPS 上速度很快

    我尽可能地等待 但最终不得不从莫哈韦升级 我知道有些东西会不必要地损坏 当然确实如此 较大的文件 超过 100k 随机需要 5 秒才能加载 它并不总是相同的文件 也不是每次都相同 并且它只发生在 HTTP Apache 中 尝试过端口 80
  • python 3.8 Flask apache 2.4 wsgi 多重处理运行时错误:子解释器不支持 fork

    我正在尝试在 Ubuntu 20 04 中使用 python 3 8 flask wsgi 并使用多处理来运行代码 我写了一段代码 在 python 中运行得很好 这是代码 from flask import Flask from mult
  • 在 CGI 模式下运行时如何覆盖 PHP 配置

    有一些教程告诉我如何在 CGI 模式下运行时覆盖 PHP 配置 但我仍然很困惑 因为很多人都认为服务器运行在 Linux 上 虽然我需要这样做also在 Windows 上 我的主机确实使用 Linux 但我的本地开发计算机使用 Windo
  • 从存储库检出代码时出现 SVN 错误 E175002

    在尝试从在线存储库中签出代码时 我收到以下错误 E175002 repos xxx svn vcc default 的报告 我正在尝试从远程计算机上签出代码 经过长时间的研究 我终于找到了一个解决方案 解决方案是allow from all
  • 在 Ubuntu 12.04 上的 Apache 上配置 SVN 服务器

    我正在尝试通过 HTTP 访问现有的 Subversion 服务器 我的dav svn conf文件看起来像
  • 如何从Python请求库正确返回http响应(想要一个Python反向代理)

    这个问题继续自here https stackoverflow com questions 48635552 how to programmatically communicate with apache 我想创建一个反向代理 它允许我托管
  • 使用 htaccess 将 http://www、http:// 和 https://www 重定向到 https:

    在我的网站上 我在非 www 版本的域上安装了 SSL 证书 我想使用 htaccess 将 http www http non www 和 https www 重定向到 https 我可以将 www 转换为非 www 但 https ww
  • 我怎样才能发现并生存被“Slashdotted”?

    在异常高的流量高峰中生存的好方法是什么 我的想法是 在某些触发点上 我的网站应该暂时切换到 低带宽 模式 切换到基本 HTML 页面 最少的图形 禁用可能会给数据库带来不必要负载的小部件 等等 我的想法是 监控CPU使用率 监控带宽 监控请
  • PHP SNMP - 找不到模块

    我已启用 SNMP 模块并尝试使用该模块中的功能 我已将 MIBDIRS 环境变量设置为我的 mib 所在的位置 但我仍然收到这些 找不到模块 警告 Cannot find module IP MIB At line 0 in none C
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 使用 Apache 在本地网络上托管网站

    我目前在我的机器上使用 Apache 在本地测试 PHP 网站 我只是想知道如何允许连接到本地网络的计算机访问本地计算机上托管的网站 如果仅通过 IP 本地网络上的计算机应该能够访问您的计算机 假设您没有防火墙阻止端口 80 HTTP 完成
  • Apache 从子域重写为 www 但保留所有永久链接

    我已经研究了大约 2 个小时 虽然大多数主题都很相似 但没有一个解释如何做我想做的事情 我正在将一个结构为 blog domain com 的博客移至 www domain com blog 当我重定向时 我需要保留博客文章的永久链接 所以

随机推荐