在CentOS系统上搭建Git服务器是一个常见的需求,尤其适合团队协作或个人代码管理,以下是详细的步骤和配置说明,确保服务器稳定运行并支持SSH和HTTP两种访问方式。

确保系统已更新至最新状态,并安装必要的依赖包,执行以下命令:
sudo yum update -y sudo yum install -y git curl openssl-devel
创建一个专门的系统用户用于管理Git仓库,
sudo useradd -m -s /bin/bash git sudo passwd git
初始化Git仓库,在服务器上选择一个目录,如/srv/git,并设置权限:
sudo mkdir -p /srv/git sudo chown -R git:git /srv/git sudo chmod -R 755 /srv/git
创建一个测试仓库,例如test.git:

cd /srv/git sudo -u git git init --bare test.git
配置SSH访问是更安全的方式,在服务器上为每个开发者生成SSH公钥,并将其添加到git用户的~/.ssh/authorized_keys文件中,确保文件权限正确:
sudo mkdir -p /home/git/.ssh sudo chmod 700 /home/git/.ssh sudo touch /home/git/.ssh/authorized_keys sudo chmod 600 /home/git/.ssh/authorized_keys
开发者可通过git clone git@server_ip:/srv/git/test.git克隆仓库。
若需支持HTTP访问,可安装Nginx和Gitosis或Gitolite,这里以Gitolite为例:
sudo yum install -y gitolite3 sudo -u git gitolite setup -pk /path/to/admin.pub
将管理员的公钥路径替换为实际路径,配置完成后,可通过HTTP URL访问仓库,如http://server_ip/git/test.git。

防火墙和SELinux配置也不可忽视,开放SSH(22端口)和HTTP(80端口):
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload
若使用SELinux,需调整上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/git(/.*)?" sudo restorecon -Rv /srv/git
以下是常见配置的对比表格:
| 配置项 | SSH访问 | HTTP访问 |
|---|---|---|
| 端口 | 22 | 80/443 |
| 认证方式 | SSH密钥 | 用户名/密码或Token |
| 配置复杂度 | 简单 | 中等(需Web服务支持) |
| 性能 | 高 | 中等 |
| 适用场景 | 团队内部开发 | 公开或远程访问 |
测试仓库功能,在本地客户端执行:
git clone git@server_ip:/srv/git/test.git cd test echo "test" > README.md git add . git commit -m "initial commit" git push origin master
若推送成功,说明服务器搭建完成。
相关问答FAQs:
-
如何为Git仓库添加用户权限?
答:若使用Gitolite,管理员可通过编辑~git/.gitolite/conf/gitolite.conf文件,在repo块中指定用户权限(如RW+表示读写),修改后执行gitolite push更新配置,SSH用户需提前将公钥添加到~git/.ssh/authorized_keys。 -
如何解决“Permission denied (publickey)”错误?
答:首先检查客户端公钥是否正确添加到服务器的~git/.ssh/authorized_keys文件,并确保文件权限为600,确认git用户的~/.ssh目录权限为700,若问题依旧,检查SSH服务是否正常运行(systemctl status sshd)。
