我正在尝试使用 git http 后端做我自己的 git 服务器。我使用 nginx 和 fcgiwrap 完成所有这些工作。我还使用 docker 容器而不仅仅是主机。所以我的 nginx 配置如下所示:
location /git {
alias /srv/git;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.gitpasswd;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /srv/git;
fastcgi_param PATH_INFO $uri;
}
我的 docker 映像(其中 nginx 、 git http 后端和 fcgiwrap 工作)具有用于运行 fcgiwrap 的 Dockerfile 和 docker-entrypoint.sh 。它们看起来像这样:
Dockerfile
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
nginx \
spawn-fcgi \
fcgiwrap \
git \
git-core \
libc6 \
curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
docker-entrypoint.sh
#!/bin/bash
echo "Starting fcgiwrap..."
spawn-fcgi -s /var/run/fcgiwrap.socket /usr/sbin/fcgiwrap
if [ $? -ne 0 ]; then
echo "Failed to start fcgiwrap" >&2
exit 1
fi
ps aux | grep fcgiwrap
echo "Starting nginx..."
nginx -g "daemon off;"
if [ $? -ne 0 ]; then
echo "Failed to start nginx" >&2
exit 1
fi
跑步时一切正常。在我的本地计算机上,我添加此远程网址:https://user:[email protected]/git/chatservice/这是一个示例。当尝试推送时,我收到此错误: fatal: 无法访问 'https://user:[email protected]/git/chatservice/' : 未找到存储库 404.
我尝试检查 git http-backend 是否有效,是的,它有效,并且我检查了包装器是否运行,它也运行,一切都运行得很好,但 nginx 我认为无法找到到此存储库的路径,或者它没有权限,但我检查了它确实有但我认为仍然不起作用。在 nginx 日志中,我只看到发出 404 的请求,仅此而已,没有详细信息。
我刚刚在 PATH 信息中添加了 $1 而不是 $uri。因为当使用 reg exp git 后端时只需要路由到存储库而不需要 /git/ 所以要直接获取存储库路径我需要编写 $1