服务器测评网
我们一直在努力

Linux Git 服务器搭建步骤是怎样的?新手怎么操作?

搭建环境与依赖安装

在开始搭建 Git 服务器之前,需要确保系统环境满足要求,并安装必要的依赖软件,以 Ubuntu/Debian 系统为例,首先更新系统软件包列表:

Linux Git 服务器搭建步骤是怎样的?新手怎么操作?

sudo apt update && sudo apt upgrade -y

接着安装 Git 和必要的工具(如 SSH 服务,用于远程安全连接):

sudo apt install git openssh-server openssh-client -y

安装完成后,检查 Git 版本以确保安装成功:

git --version

建议创建一个专门用于 Git 服务的系统用户(如 gituser),避免直接使用 root 用户操作,提升安全性:

sudo adduser gituser

根据提示设置密码,并将该用户添加到 sudo 组(可选,便于后续管理):

sudo usermod -aG sudo gituser

创建 Git 仓库与初始化

为 Git 服务器创建一个专门的目录用于存放仓库,并设置合适的权限,在 /home/gituser 目录下创建 repositories 文件夹:

sudo mkdir -p /home/gituser/repositories
sudo chown -R gituser:gituser /home/gituser/repositories
sudo chmod -R 755 /home/gituser/repositories

进入该目录,创建一个裸仓库(Bare Repository),裸仓库没有工作目录,仅包含版本历史信息,适合作为服务器端仓库:

cd /home/gituser/repositories
git init --bare --shared project.git
  • --bare 表示创建裸仓库;
  • --shared 允许多个用户访问仓库(可根据需求调整权限)。

创建完成后,仓库目录结构如下:

/home/gituser/repositories/project.git/
├── branches/
├── config
├── description
├── HEAD
├── hooks/
├── info/
├── objects/
└── refs/

配置 SSH 访问与用户权限

Git 服务器支持多种协议(如 HTTPS、SSH、Git),SSH 协议因安全性高且配置简单,是最常用的选择,以下是 SSH 访问的配置步骤:

生成 SSH 密钥(客户端操作)

在客户端机器上,生成 SSH 密钥对(如果尚未生成):

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

按提示保存密钥(默认路径为 ~/.ssh/id_rsa),并将公钥(~/.ssh/id_rsa.pub)发送给服务器管理员。

部署公钥到服务器

在服务器端,为每个用户创建 ~/.ssh 目录和 authorized_keys 文件(用于存储客户端公钥):

sudo -u gituser mkdir -p /home/gituser/.ssh
sudo -u gituser touch /home/gituser/.ssh/authorized_keys
sudo chmod 700 /home/gituser/.ssh
sudo chmod 600 /home/gituser/.ssh/authorized_keys

将客户端的公钥内容追加到 authorized_keys 文件中:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..." >> /home/gituser/.ssh/authorized_keys

测试 SSH 连接

在客户端终端中,通过以下命令测试是否可以免密连接到服务器:

Linux Git 服务器搭建步骤是怎样的?新手怎么操作?

ssh gituser@your_server_ip

如果成功登录,说明 SSH 配置正确,退出登录后,即可通过 SSH 推送/拉取代码。

配置 Git 仓库的钩子(可选)

Git 钩子(Hooks)是仓库中特定事件触发时自动执行的脚本,可用于实现自动化流程(如代码提交检查、邮件通知等),以下以 pre-receive 钩子为例,演示如何禁止空提交:

  1. 进入仓库的 hooks 目录:

    cd /home/gituser/repositories/project.git/hooks
  2. 创建 pre-receive 文件:

    sudo nano pre-receive
  3. 添加以下内容(禁止空提交):

    #!/bin/sh
    zero_commit="0000000000000000000000000000000000000000"
    while read oldrev newrev refname; do
        if [ "$newrev" = "$zero_commit" ]; then
            echo "Error: Cannot delete branch or tag"
            exit 1
        fi
        if [ -z "$(git cat-file -t "$newrev" 2>/dev/null)" ]; then
            echo "Error: Invalid commit object"
            exit 1
        fi
    done
    exit 0
  4. 为钩子文件添加执行权限:

    sudo chmod +x pre-receive

其他常用钩子还包括 post-receive(推送后触发)、pre-commit(提交前触发)等,可根据需求定制。

安全加固与最佳实践

搭建 Git 服务器时,安全性至关重要,以下是几项关键的安全加固措施:

限制 Shell 访问

gituser 设置一个受限的 Shell(如 git-shell),防止其通过 SSH 登录服务器执行非 Git 操作:

sudo which git-shell  # 确认 git-shell 路径(通常为 /usr/bin/git-shell)
sudo usermod -s /usr/bin/git-shell gituser

设置后,用户只能通过 SSH 执行 Git 相关命令(如 git pushgit pull),无法登录 Shell。

禁用密码认证

结合 SSH 密钥认证,可禁用密码登录,提升安全性,编辑 SSH 配置文件 /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

找到以下行并修改:

PasswordAuthentication no
PubkeyAuthentication yes

重启 SSH 服务使配置生效:

Linux Git 服务器搭建步骤是怎样的?新手怎么操作?

sudo systemctl restart sshd

定期备份仓库

Git 仓库是项目的核心资产,需定期备份,可通过 rsynctar 命令备份仓库目录:

# 示例:每日备份到 /backup 目录
sudo tar -czf /backup/git-repositories-$(date +%Y%m%d).tar.gz /home/gituser/repositories

使用防火墙限制访问

通过 ufw(Uncomplicated Firewall)限制仅允许特定 IP 访问 SSH 服务:

sudo ufw allow from 192.168.1.100 to any port 22 proto tcp  # 允许特定 IP
sudo ufw enable  # 启用防火墙

客户端连接与使用

完成服务器配置后,客户端可通过以下步骤连接并使用 Git 仓库:

  1. 克隆仓库到本地:

    git clone gituser@your_server_ip:/home/gituser/repositories/project.git
  2. 进入项目目录,创建新文件并提交:

    cd project
    echo "# Hello Git Server" > README.md
    git add README.md
    git commit -m "Initial commit"
  3. 推送代码到服务器:

    git push origin master

如果配置正确,代码将成功推送到服务器仓库,其他用户可通过 git clone 获取最新代码。

总结与扩展

通过以上步骤,已成功搭建了一个基于 Linux 和 Git 的私有代码托管服务器,该方案具备安全性高、配置灵活、成本低廉等优点,适合中小型团队或个人开发者使用。

如果需要更高级的功能(如 Web 界面、权限管理、持续集成等),可进一步扩展:

  • Web 界面:集成 GitWeb 或 Gogs,提供仓库浏览、在线代码编辑等功能;
  • 权限管理:使用 Gitolite 或 GitLab,实现细粒度的分支/标签权限控制;
  • 持续集成:结合 Jenkins 或 GitHub Actions,自动化构建、测试和部署流程。

根据实际需求选择合适的扩展方案,可让 Git 服务器更贴合团队的开发流程,提升协作效率。

赞(0)
未经允许不得转载:好主机测评网 » Linux Git 服务器搭建步骤是怎样的?新手怎么操作?