目录

在云服务器上搭建git服务并启用git协议

本文介绍如何使用基于CentOS 7.7的云服务器搭建一个私有git服务器,用于自己多台电脑之间的项目同步,并启用git协议,可以允许任何人clone其中的某些项目。

本文所有操作均基于阿里云服务器及CentOS 7.7系统,所有操作均使用root用户完成。首先,我们在本地安装git。我使用的是Windows系统,可以直接从官网下载安装包进行安装,安装过程就不在此赘述了。

在服务器上安装git

参考博客

在服务器端安装git的主要目的有2个:其一是用于在服务器上新建仓库,其二是作为git协议的deamon使用。由于CentOS的包管理器自带的git版本太低,因此我们不使用包管理器自带的git。当然如果你愿意使用自带版本的git,你可以直接执行

yum install git

来安装。在此,我仍然希望使用最新版的git,因此需要自行编译安装。首先,卸载系统自带的git,并安装一些依赖:

yum remove git
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

之后,我们创建一个目录用来放置我们下载的源代码。由于我使用的是root账户登录,因此执行

cd /root
mkdir code

创建好目录之后,我们从官网上下载git的源代码以及其依赖的libiconv(下载链接)。下载好之后,通过ftp工具上传到/root/code目录中。 首先解压并安装libiconv库(此处文件名根据你下载的版本不同有所不同):

cd /root/code
tar zxvf libiconv-1.16.tar.gz
cd libiconv-1.16
./configure --prefix=/usr/local/libiconv
make
make install

然后,编译安装git:

cd /root/code
tar zxvf git-2.26.1.tar.gz
cd git-2.26.1.tar.gz
./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv
make
make install

安装完成之后,我们将安装后git可执行文件的连接到/usr/bin

ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack
ln -s /usr/local/git/bin/git /usr/bin/git
ln -s /usr/local/git/bin/git-shell /usr/bin/git-shell
ln -s /usr/local/git/bin/git-upload-archive /usr/bin/git-upload-archive
ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack

接下来,可以查看git的版本是否为我们安装完成的版本:

$ git version
git version 2.26.1

搭建git服务器

参考官方教程

git服务器,简单而言就是一个提供ssh访问的服务器而已。我们需要做的只有一台支持ssh访问的服务器,以及合适的权限管理而已。如果服务器作为私有使用,配置就变得更加简单了:只需要新建一个git账户(防止直接使用root账户导致的安全问题)、配置好服务器上的公钥并在服务器上创建裸仓库即可。 首先,我们新建一个git组,并在组内新建一个git账户:

groupadd git
adduser git -g git

现在git用户的家目录为/home/git。我们切换到git用户并新建一个测试使用的仓库。

su git
cd /home/git
mkdir stm32
cd stm32
mkdir stm32f411-mp3.git
cd stm32f411-mp3.git
git init --bare

为了使用远程git访问该账户,我们需要生成一个ssh秘钥,并将公钥设置在服务器上。在需要访问git服务器的本地计算机上的桌面右键点击Git Bash Here,打开git命令行,输入

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/wangyz/.ssh/id\_rsa):

当询问路径时,直接敲回车使用默认路径即可。 如果需要密码,也可以在提问passphrase的时候输入密码,不需要密码直接敲回车留空即可。执行完上述步骤后,可以在用户根目录下找到 .ssh 目录,该目录里包含公钥文件id_rsa.pub 以及私钥文件id_rsa 。使用记事本打开公钥文件id_rsa.pub,将其中的所有内容(一行)复制到远程服务器的/home/git/.ssh/authorized_keys文件中:

cd /home/git
mkdir .ssh
cd .ssh
touch authorized_keys
nano authorized_keys

复制完毕后,保存退出即可。如果需要新增电脑访问,按照如上流程,在authorized_keys中新增一行即可。 我们本地代码文件夹中右键,点击Git Bash Here,开启命令行,输入

git init
git remote add code git@dev.yuanze.wang:/home/git/stm32/stm32f411-mp3.git
git add .
git commit -m "first commit"
git push --set-upstream code master

将代码推送到远程服务器上。出现Branch 'master' set up to track remote branch 'master' from 'code'.即为成功。

搭建git守护进程

参考官方教程

首先,在阿里云控制台的安全组规则中放行9418 端口的TCP协议。然后,在云服务器上开启9418 端口的防火墙:

nano /etc/sysconfig/iptables

:OUTPUT ACCEPT [40:23016]下增加一行

\-A INPUT -p tcp -m tcp --dport 9418 -j ACCEPT

来放行9418端口。重启iptables服务,来使新的防火墙规则生效:

service iptables restart

接下来,我们创建git deamon的服务文件:

nano /etc/systemd/system/git-daemon.service

输入下列内容:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/home/git /home/git

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

其中,ExecStart后面的路径根据实际情况修改。 最后,我们启用服务,并将服务设置为开机启动:

service git-daemon start
systemctl enable git-daemon

到此为止,git deamon便搭建完成。最后,在我们想允许被共有访问的仓库内,新建一个git-daemon-export-ok文件,即可开启该仓库的公共访问权限。

cd /home/git/stm32/stm32f411-mp3.git
touch git-daemon-export-ok

上述测试用仓库可用于试验 git clone git://dev.yuanze.wang/stm32/stm32f411-mp3.git

https://img.yuanze.wang/posts/git-service-on-server/example.jpg
测试结果