凌峰创科服务平台

centos git服务器

在CentOS系统上搭建Git服务器是企业或个人开发者常用的版本控制方案,本文将详细介绍从环境准备到服务配置的全过程,包括安装依赖、初始化仓库、配置SSH访问以及安全设置等关键步骤。

centos git服务器-图1
(图片来源网络,侵删)

环境准备与基础安装

首先需要一台已安装CentOS 7/8系统的服务器,推荐使用最小化安装后通过yum补充必要组件,执行以下命令更新系统并安装Git及依赖服务:

sudo yum update -y
sudo yum install -y git curl openssl openssh-server

安装完成后检查Git版本:

git --version

确保输出类似git version 2.x.x,CentOS 7默认Git版本可能较旧,若需升级可通过EPEL仓库或源码编译。

创建Git专用用户

出于安全考虑,建议创建独立的系统用户管理Git服务:

centos git服务器-图2
(图片来源网络,侵删)
sudo useradd -m -s /bin/bash git
sudo passwd git  # 设置用户密码

切换至git用户进行后续操作:

su - git

初始化裸仓库

裸仓库(Bare Repository)不包含工作目录,适合作为中央服务器,在用户家目录下创建项目仓库:

mkdir -p ~/repos/myproject.git
cd ~/repos/myproject.git
git init --bare

--bare参数会创建.git目录作为根目录,避免混淆工作文件,设置仓库所有者为git用户:

sudo chown -R git:git ~/repos

配置SSH免密访问

Git服务器通常通过SSH协议传输数据,需为每个开发者配置SSH密钥,在开发者本地机器生成密钥:

centos git服务器-图3
(图片来源网络,侵删)
ssh-keygen -t rsa -b 4096 -C "developer@example.com"

将公钥(~/.ssh/id_rsa.pub通过安全通道发送至服务器,在服务器端创建~/.ssh/authorized_keys并追加公钥:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

为开发者添加公钥时,建议使用ssh-copy-id命令或手动验证密钥格式,确保每行一个公钥且无多余空格。

钩子脚本配置

Git钩子(Hooks)用于自动化操作,例如post-receive钩子可在代码推送后执行部署脚本,创建钩子文件:

vim ~/repos/myproject.git/hooks/post-receive
```自动部署到Web目录):
```bash
#!/bin/bash
git --work-tree=/var/www/myproject --git-dir=/home/git/repos/myproject.git checkout -f

赋予执行权限:

chmod +x ~/repos/myproject.git/hooks/post-receive

需确保/var/www/myproject目录存在且git用户有写入权限:

sudo mkdir -p /var/www/myproject
sudo chown -R git:git /var/www/myproject

防火墙与SELinux配置

CentOS默认启用防火墙,需开放SSH端口(22):

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

若启用SELinux,需调整上下文:

sudo semanage fcontext -a -t git_sys_content_t "/home/git/repos(/.*)?"
sudo restorecon -Rv /home/git/repos

安全加固建议

  1. 禁用密码登录:编辑/etc/ssh/sshd_config,设置PasswordAuthentication no后重启SSH服务:
    sudo systemctl restart sshd
  2. 定期备份:通过rsyncgit bundle命令备份裸仓库:
    git bundle create ~/backup/myproject.gitbundle --all
  3. 访问控制:通过gitoliteGitLab实现更精细的权限管理,替代手动管理authorized_keys

开发者客户端操作

开发者在本地克隆仓库:

git clone git@server_ip:/home/git/repos/myproject.git

后续推送代码:

cd myproject
echo "Initial commit" > README.md
git add .
git commit -m "Initial commit"
git push origin master

常见问题处理

若遇到权限错误,检查仓库所有者及SELinux上下文;连接超时则确认防火墙和SSH服务状态,建议通过journalctl -u sshd查看SSH服务日志。

相关问答FAQs

Q1: 如何在CentOS上升级Git到最新版本?
A1: CentOS 7/8默认仓库的Git版本较旧,可通过EPEL仓库升级:

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum update git --enablerepo=epel-testing

或从源码编译安装(需安装gccmake等依赖)。

Q2: Git服务器如何支持HTTPS协议访问?
A2: 可配置Nginx作为反向代理并启用SSL证书:

  1. 安装Nginx:sudo yum install nginx
  2. 创建SSL证书(可使用Let's Encrypt免费证书)
  3. 配置Nginx站点,将/git请求代理至Git的HTTP服务(需安装git-http-backend
  4. 设置防火墙规则允许HTTPS流量(443端口)
    详细配置可参考Nginx官方文档和Git文档中的"Smart HTTP"章节。
分享:
扫描分享到社交APP
上一篇
下一篇