在云服务器上搭建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