凌峰创科服务平台

centos7搭建git服务器

在CentOS 7系统中搭建Git服务器是一个常见的需求,无论是个人项目还是团队协作,自建Git服务器都能提供更好的可控性和安全性,以下是详细的搭建步骤,包括环境准备、安装配置、权限管理及安全优化等内容。

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

环境准备

首先需要一台安装好CentOS 7系统的服务器,确保系统已更新至最新状态,执行以下命令更新系统并安装必要的依赖包:

sudo yum update -y
sudo yum install -y curl policycoreutils-python openssh-server

安装完成后,启动SSH服务并设置开机自启:

sudo systemctl enable sshd
sudo systemctl start sshd

为确保服务器时间同步,建议安装NTP服务:

sudo yum install -y ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd

安装Git

CentOS 7的默认软件仓库中可能包含Git,但版本可能较旧,建议通过EPEL仓库或源码编译安装最新版本,这里以EPEL仓库为例:

centos7搭建git服务器-图2
(图片来源网络,侵删)
sudo yum install -y epel-release
sudo yum install -y git

安装完成后,验证Git版本:

git --version

若需升级到最新版本,可通过源码编译安装,步骤如下:

  1. 安装编译依赖:
    sudo yum install -y gcc gettext-devel openssl-devel perl-ExtUtils-MakeMaker xmlto asciidoc
  2. 下载最新源码包(以Git 2.35.0为例):
    cd /usr/local/src
    wget https://github.com/git/git/archive/v2.35.0.tar.gz
    tar -xzvf v2.35.0.tar.gz
    cd git-2.35.0
  3. 编译并安装:
    make configure
    ./configure --prefix=/usr/local
    make all
    sudo make install

创建Git用户和仓库目录

为了安全,建议创建一个专用的Git用户用于管理仓库:

sudo useradd -m -s /bin/bash git
sudo passwd git  # 设置密码

创建仓库存储目录并设置权限:

centos7搭建git服务器-图3
(图片来源网络,侵删)
sudo mkdir -p /srv/git
sudo chown -R git:git /srv/git
sudo chmod -R 755 /srv/git

初始化仓库并设置SSH访问

创建空仓库

以创建一个名为project.git的仓库为例:

sudo su - git
cd /srv/git
git init --bare project.git
exit

配置SSH免密登录

在客户端生成SSH密钥(若未生成):

ssh-keygen -t rsa -b 4096

将公钥(~/.ssh/id_rsa.pub添加到服务器的/home/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
sudo sh -c "echo '客户端公钥内容' >> /home/git/.ssh/authorized_keys"
sudo chown -R git:git /home/git/.ssh

测试连接

在客户端执行:

ssh git@服务器IP

若无需密码登录成功,则配置正确。

配置Git钩子(可选)

Git钩子可实现自动化操作,如提交前检查代码格式、推送后自动部署等,以下是一个简单的钩子示例: 在/srv/git/project.git/hooks/目录下创建pre-receive文件:

sudo nano /srv/git/project.git/hooks/pre-receive
```拒绝空提交):
```bash
#!/bin/sh
while read oldrev newrev refname; do
    if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
        echo "错误:不允许删除分支" >&2
        exit 1
    fi
done
exit 0

赋予执行权限:

sudo chmod +x /srv/git/project.git/hooks/pre-receive

安全优化

  1. 禁用Git用户shell登录:编辑/etc/passwd文件,将Git用户的shell改为/usr/bin/git-shell
    sudo usermod -s /usr/bin/git-shell git
  2. 防火墙配置:允许SSH和Git(若使用HTTP协议):
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload
  3. 定期备份:编写备份脚本,定期备份仓库目录:
    #!/bin/bash
    DATE=$(date +%Y%m%d)
    tar -czf /backup/git_backup_$DATE.tar.gz /srv/git

    通过crontab设置定时任务(如每天凌晨2点执行):

    0 2 * * * /path/to/backup_script.sh

多仓库管理与权限控制

若需为不同用户分配不同仓库的权限,可通过以下方式实现:

  1. 创建用户组
    sudo groupadd dev-team
    sudo usermod -a -G dev-team user1
    sudo usermod -a -G dev-team user2
  2. 设置仓库组权限
    sudo chown -R git:dev-team /srv/git/project.git
    sudo chmod -R 770 /srv/git/project.git
  3. 使用Gitosis或Gogs:对于更复杂的权限管理,可部署Gitosis(基于SSH的权限管理工具)或Gogs(轻量级Git服务Web界面)。

常见问题与解决方案

  1. 问题:客户端推送时提示Permission denied (publickey)
    解决:检查服务端/home/git/.ssh/authorized_keys文件权限是否为600,公钥格式是否正确,以及客户端是否正确生成了SSH密钥对。

  2. 问题:仓库无法创建或推送,提示fatal: Could not read from remote repository
    解决:检查仓库目录权限(chown -R git:git /srv/git),确保Git用户对目录有读写权限,并验证仓库是否为bare仓库(git init --bare)。


FAQs

问题1:如何为Git仓库设置HTTPS访问?
解答:可通过配置Nginx或Apache反向代理结合SSL证书实现,首先安装Nginx:

sudo yum install -y nginx

然后配置Nginx监听443端口,指向Git仓库目录,并配置SSL证书(可使用Let's Encrypt免费证书),具体配置需结合Git的HTTP backend模块,详细步骤可参考Nginx官方文档。

问题2:如何限制Git用户的磁盘空间?
解答:可通过Linux的磁盘配额功能实现,首先安装quota工具:

sudo yum install -y quota

然后对/srv/git分区启用配额,设置用户或组的空间限制,具体步骤包括:编辑/etc/fstab添加usrquota选项,重新挂载分区,使用edquota命令为Git用户设置软/硬限制(如软限制10GB,硬限制12GB)。

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