搭建Git HTTP服务器

搭建一个Git HTTP(S)服务器

你可以将你的仓库放在一个HTTP请求目录下,然后直接使用git clone对应的URL路径即可。
Git提供了一个叫git-http-backend的程序,它可以帮助你实现推送。具体步骤如下:

  • 安装Git和Apache/Nginx。
  • 配置Apache/Nginx以便它可以处理Git HTTP请求。
  • 配置Git以便它可以使用Apache/Nginx作为HTTP服务器。
  • 创建一个裸仓库。
  • 启用Git HTTP后端。
  • 配置访问控制。

下面的指南,可以帮助你完成每个步骤:

1. 安装Git和Apache/nginx。

Git:你可以从Git官方网站下载Git的安装程序,然后按照安装向导的指示进行安装。
Apache/Nginx:你可以从Apache/Nginx官方网站下载Apache/Nginx的安装程序,然后按照安装向导的指示进行安装。

2. 配置Apache/Nginx以便它可以处理Git HTTP请求。

在Apache的配置文件中添加以下内容:

SetEnv GIT_PROJECT_ROOT /path/to/git/repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

如果使用ngnix,则需要在配置文件中加入一下内容:

location ~ /git(/.*) {
    client_max_body_size 0;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /path/to/git/repositories;
    fastcgi_param PATH_INFO $1;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
}

上述的内容的解释如下:

  • location ~ /git(/.*) {:匹配 URL 以 /git 开头的请求。
  • client_max_body_size 0;:允许客户端上传任意大小的文件。
  • include fastcgi_params;:包含 FastCGI 的参数。
  • fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;:指定 Git HTTP 后端的位置。
  • fastcgi_param GIT_HTTP_EXPORT_ALL “”;:禁用 Git HTTP 后端的导出功能。
  • fastcgi_param GIT_PROJECT_ROOT /path/to/git/repositories;:指定 Git 仓库的根目录。
  • fastcgi_param PATH_INFO $1;:将 URL 中的第一个参数传递给 Git HTTP 后端。
  • fastcgi_pass unix:/var/run/fcgiwrap.socket;:将请求转发到 FastCGI 进程。

3. 配置Git以便它可以使用Apache/Nginx作为HTTP服务器。

在Git的配置文件中添加以下内容:

[http]
    receivepack = true
    uploadpack = true
    sslVerify = false
    sslCert = /path/to/cert.pem
    sslKey = /path/to/key.pem
    sslCAInfo = /path/to/ca.pem
    sslCertPasswordProtected = true

4. 创建一个裸仓库。

使用以下命令创建一个裸仓库:

git init --bare /path/to/repo.git

5. 启用Git HTTP后端。

在Apache的配置文件中添加以下内容:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /path/to/users.htpasswd
    Require valid-user
    Options +ExecCGI
    SetEnv GIT_HTTP_BACKEND "/usr/libexec/git-core/git-http-backend"
</LocationMatch>

如果使用ngnix,则需要在配置文件中添加以下内容

location ~ /git(/.*) {
    client_max_body_size 0;
    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 /path/to/git/repositories;
    fastcgi_param PATH_INFO $1;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
}

6. 配置访问控制。

创建一个用户列表文件:

user1:password1
user2:password2

使用以下命令创建一个密码文件:

htpasswd -c /path/to/users.htpasswd user1
htpasswd /path/to/users.htpasswd user2

另,
可以通过spawn-fcgi的-p指令指定fcgiwrap监听某端口,这是不同于套接字的设置。

spawn-fcgi -f /usr/sbin/fcgiwrap -p 7099

相应的http配置如下:

location ~ /git(/.*)$ {
    client_max_body_size 0;
    fastcgi_pass 127.0.0.1:7099;
    fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /git/repositories;
    fastcgi_param PATH_INFO $1;
    include /etc/nginx/fastcgi_params;
}

仓库的创建

通过git init创建服务器端仓库

git init --bare xxxx.git

创建仓库后,需要确认该仓库支持http
确认仓库路径下的.git/config文件中,需要有下列的内容

[http]
    receivepack = true
    uploadpack = true
    sslVerify = false

过期

替代

当前的git版本中,已经不支持git-http-backend了。
需要通过gitweb提供http协议。
安装gitweb的方法如下(alpine)

apk add git-gitweb --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

配置方法

gitweb是一个perl的cgi程序,代码在下面的目录中

/usr/share/gitweb/gitweb.cgi

Docker

在hub.docker.com中,有一个名为fraoustin/gitweb的nginx&gitweb镜像,镜像地址

下面是镜像的主页文档:


Docker Image for gitweb
generate a nginx server with git server and gitweb for ihm on http://127.0.0.1/

load when start image load file in

  • /usr/share/gitweb/docker-entrypoint.pre
  • /usr/share/gitweb/docker-entrypoint.post
    Parameter
  • SET_CONTAINER_TIMEZONE (false or true) manage time of container
  • CONTAINER_TIMEZONE timezone of container
  • GITPROJECT
  • GITUSER (default gituser)
  • GITPASSWORD (default gitpassword)
  • IHM (default “”)
    Volume
  • /var/lib/git
    Port
  • 80 for gitweb
    Command
  • addrepos: add repository
  • addauth : add user for git
  • rmrepos : remove repository
  • rmauth : remove user
    Usage direct

run image fraoustin/gitweb

docker run -d -e "CONTAINER_TIMEZONE=Europe/Paris" -e "GITPROJECT=test" -v <localpath>:/var/lib/git --name test -p 80:80 fraoustin/gitweb

user default is gituser and password default is gitpassword

you use http://localhost/ for access gitweb

you can clone project

git clone http://gituser:gitpassword@localhost/test.git

You can change user and password by variable environment

Usage by Dockerfile
Sample of Dockerfile

FROM fraoustin/gitweb
COPY ./00_init.sh /usr/share/gitweb/docker-entrypoint.pre/00_init.sh
RUN chmod +x -R /usr/share/gitweb/docker-entrypoint.pre

File 00_init.sh

#!/bin/bash
REPOS='/var/lib/git/test.git'
if [ ! -d $REPOS ]; then
    addrepos test
    cd $REPOS
    chmod -R g+ws .
    chgrp -R nginx .
fi
addauth $GITUSER $GITPASSWORD

build image mygit

docker build -t mygit .

run image mygit

docker run -d -e "CONTAINER_TIMEZONE=Europe/Paris" -e "GITUSER=gituser" -e "GITPASSWORD=gitpassword" -v <localpath>:/var/lib/git --name test -p 80:80 mygit

IHM material design
If you want use a new design for ihm, you can use IHM variable

  • IHM = mdl
docker run -d -e "CONTAINER_TIMEZONE=Europe/Paris" -e "IHM=mdl" -e "GITPROJECT=test" -v

问题一

如果您在alpine系统中安装完git后,没有git-http-backend,可能是因为git-http-backend二进制文件在最新的alpine linux包(3.7及以上)中丢失。可以通过下面的命令单独安装:

apk add git-daemon

问题二

如果fcgi程序没有权限创建文件,您可以尝试以下方法来提升权限:
检查文件夹的权限。确保您的fcgi程序有足够的权限来访问该文件夹。您可以使用chmod命令更改文件夹的权限。例如,如果您想将文件夹的所有者和组的权限设置为读、写和执行,则可以使用以下命令:

chmod u+rwx,g+rwx 文件夹名

检查nginx用户的权限。确保nginx用户有足够的权限来访问该文件夹。您可以使用chown命令更改文件夹的所有者和组。例如,如果您想将文件夹的所有者设置为nginx用户,则可以使用以下命令:

chown nginx 文件夹名

参考资料
GitWeb学习笔记
GitWeb服务器搭建

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux上搭建Git远程仓库,需要按照以下步骤进行操作: 1. 安装Git:在Linux上安装Git,可以使用命令行工具或者包管理器进行安装。 2. 创建Git用户:为了安全起见,最好为Git创建一个专门的用户,用于管理Git仓库。 3. 创建Git仓库:使用Git命令创建一个空的Git仓库,可以在本地或者远程服务器上创建。 4. 配置Git仓库:为Git仓库设置一些基本的配置信息,如用户名、邮箱等。 5. 克隆Git仓库:在本地或者其他服务器上克隆Git仓库,可以使用SSH或者HTTP协议进行克隆。 6. 推送代码:将本地代码推送到Git仓库中,可以使用Git命令或者Git客户端进行操作。 7. 拉取代码:从Git仓库中拉取代码到本地,可以使用Git命令或者Git客户端进行操作。 以上是在Linux上搭建Git远程仓库的基本步骤,具体操作可以根据实际情况进行调整。 ### 回答2: 在Linux系统中,我们可以通过Git搭建一套远程仓库,以方便团队进行代码的共享和管理。下面是一个简单的步骤: 1. 安装Git:在Linux系统中使用以下命令安装Git: ``` sudo apt-get install git ``` 2. 创建git用户:使用以下命令创建一个名为git的用户: ``` sudo adduser git ``` 3. 创建Git仓库:在git用户的home目录下创建仓库文件夹,例如: ``` sudo mkdir /home/git/repo.git ``` 4. 初始化仓库:使用以下命令初始化仓库: ``` sudo git init --bare /home/git/repo.git ``` 5. 设置仓库访问权限:在仓库目录下使用以下命令设置权限: ``` sudo chown -R git:git /home/git/repo.git sudo chmod -R 755 /home/git/repo.git ``` 6. 创建SSH密钥:使用以下命令在本地机器上创建SSH密钥: ``` ssh-keygen ``` 7. 将公钥添加至仓库:将生成的公钥(~/.ssh/id_rsa.pub)添加至git用户的.home目录下的authorized_keys文件中,例如: ``` sudo su git cd /home/git mkdir .ssh cd .ssh touch authorized_keys nano authorized_keys ``` 在authorized_keys文件中添加公钥。 8. 克隆仓库:使用以下命令将远程仓库克隆到本地: ``` git clone git@ip:/home/git/repo.git ``` 其中,ip为远程服务器的IP地址;repo.git为仓库文件夹。 至此,我们已经成功地在Linux系统中搭建了一个Git远程仓库。我们可以让团队成员通过SSH协议访问该仓库,并进行代码的管理和共享。 ### 回答3: Git是一个流行的版本控制系统,可以通过Linux操作系统搭建Git远程仓库。以下是搭建Git远程仓库的步骤,这将有助于您在Linux上设置仓库。 1.安装Git软件包:首先,安装Git软件包。Git是一个自由软件,可以从Git网站上免费下载。您可以使用以下命令安装Git: sudo apt-get install git 如果您使用的是不同的Linux发行版,请选择相应的命令来执行安装。 2.创建Git用户:创建一个专用的Git用户,充当版本控制仓库的管理员。此操作可增强安全性。 sudo adduser git 创建用户时,设置密码和其他信息。 3.创建Git仓库:选择要在Linux服务器上设置的Git仓库目录,并创建目录。然后为用户Git设置目录权限。 sudo mkdir /opt/git sudo chown git:git /opt/git 创建完成后,使用以下命令进入目录: cd /opt/git 您可以使用以下命令初始化仓库,并将它设置为共享资源: sudo git init --bare --shared=my-group my-project.git 其中 my-group 是组名,my-project.git 是创建的仓库。同时,Git要求您对各个项目分配名称。 4.设置远程访问:您应该设置一个访问Git仓库的方式。为此,请在虚拟主机上打开SSH,并创建仓库访问的公钥和私钥。 您可以使用以下命令生成SSH密钥: sudo su - git ssh-keygen -t rsa 将公钥添加到Git仓库: sudo cat /home/git/.ssh/id_rsa.pub >> /opt/git/my-project.git/.ssh/authorized_keys 5.下载代码仓库:现在,您可以将代码版本控制仓库从Linux服务器下载到客户端。为此,您需要标识仓库位置、仓库名称以及提供SSH密钥。 git clone git@<ServerIpAddressOrHostname>:<RepositoryDirectory>/<RepositoryName>.git 最后,您可以使用以下命令离开Git用户: # exit 总之,以上是在Linux服务器上设置Git远程仓库的步骤。通过这些步骤,您可以更好地管理和维护仓库,从而更加有效地管理代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值