凌峰创科服务平台

CentOS如何搭建Git服务器?

在CentOS系统上搭建Git服务器是企业或个人进行版本控制管理的常见需求,以下是详细的操作步骤和注意事项,整个过程主要分为系统准备、安装Git、创建仓库、配置用户权限以及安全设置等环节。

CentOS如何搭建Git服务器?-图1
(图片来源网络,侵删)

确保系统为最小化安装的CentOS 7或更高版本,并通过yum update -y命令更新系统软件包,安装必要的依赖包,执行yum install -y curl policycoreutils-python openssh-server,其中curl用于下载Git,policycoreutils-python用于SELinux管理,openssh-server提供SSH服务,安装完成后,启动SSH服务并设置开机自启:systemctl start sshdsystemctl enable sshd

接下来安装Git软件包,执行yum install -y git,安装后可通过git --version验证版本,创建一个专用用户(如git)用于管理仓库,运行useradd -m git并设置密码(passwd git),建议使用强密码或密钥认证,切换至git用户(su - git),在/home/git目录下初始化一个裸仓库,例如mkdir project.git && cd project.git && git init --bare,裸仓库不包含工作目录,仅用于存储版本历史。

为管理用户权限,可在服务器上创建SSH公钥认证,首先在客户端生成SSH密钥对(ssh-keygen -t rsa -b 4096),将公钥(~/.ssh/id_rsa.pub)内容通过ssh-copy-id git@服务器IP或手动添加到服务器的/home/git/.ssh/authorized_keys文件中,确保文件权限为600(chmod 600 ~/.ssh/authorized_keys),为增强安全性,可禁用git用户的密码登录,编辑/etc/ssh/sshd_config文件,设置PasswordAuthentication no,重启SSH服务(systemctl restart sshd)。

仓库访问控制可通过钩子脚本实现,在project.git/hooks目录下创建pre-receive文件,添加如下内容实现提交者白名单:

CentOS如何搭建Git服务器?-图2
(图片来源网络,侵删)
#!/bin/sh
allowed_users="user1 user2"
while read oldrev newrev refname; do
    gituser=$(git log -1 --pretty=format:%an $newrev)
    if ! echo "$allowed_users" | grep -qw "$gituser"; then
        echo "Error: User $gituser is not allowed to push to this repository."
        exit 1
    fi
done

赋予执行权限(chmod +x pre-receive),即可限制非授权用户提交。

防火墙配置需开放SSH端口(默认22),执行firewall-cmd --permanent --add-service=sshfirewall-cmd --reload,若使用HTTPS访问,需安装Nginx和Gitosis或Gitolite进行Web管理,但SSH方式更简单高效。

日常维护方面,定期备份仓库目录(如tar -czf git_backup.tar.gz /home/git),并监控磁盘空间,SELinux默认可能阻止Git操作,可通过setsebool -P httpd_can_connect_git 1或临时关闭(setenforce 0)排查问题。

以下是相关FAQs:

CentOS如何搭建Git服务器?-图3
(图片来源网络,侵删)

Q1: 如何在Git服务器上创建多个仓库?
A1: 每个仓库需单独创建裸仓库,创建第二个仓库时,切换至git用户,执行mkdir /home/git/new_repo.git && cd /home/git/new_repo.git && git init --bare,客户端可通过git clone git@服务器IP:/home/git/new_repo.git拉取,推送时同理,注意为不同仓库配置独立的权限钩子。

Q2: 提示“Permission denied (publickey,password)”如何解决?
A2: 首先检查服务端SSH服务是否运行(systemctl status sshd),确认客户端公钥是否正确添加至/home/git/.ssh/authorized_keys,且文件权限为600,若使用密码认证失败,需检查/etc/ssh/sshd_config中PasswordAuthentication是否为yes,或确保客户端使用密钥认证(ssh -v git@服务器IP查看详细日志)。

分享:
扫描分享到社交APP
上一篇
下一篇