凌峰创科服务平台

CentOS如何搭建Git服务器?

  1. 使用 Gitosis / Gitolite(推荐,更安全、更灵活)

    这种方法通过一个专门的 Git 管理工具来控制用户对仓库的访问权限,是搭建多用户、多项目 Git 服务器的标准做法。

    CentOS如何搭建Git服务器?-图1
    (图片来源网络,侵删)
  2. 使用 SSH + Authorized Keys(简单,适合个人或小团队)

    这种方法利用 Linux 系统自身的用户和 SSH 认证机制,配置简单,但权限管理不如方法一灵活。


准备工作

在开始之前,请确保您有一台已经安装好的 CentOS 系统(本教程以 CentOS 7/8 为例),并且您拥有 root 权限或一个具有 sudo 权限的用户。

更新系统软件包:

sudo yum update -y

使用 Gitolite(推荐)

Gitolite 是一个服务器端的工具,它通过管理一个特殊的 git 用户的 ~/.ssh/authorized_keys 文件来控制哪些用户可以执行哪些操作(如读写、只读等)。

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

步骤 1:安装 Git 和 Gitolite

  1. 安装 Git

    sudo yum install -y git
  2. 创建一个专门的 git 用户 这个用户将用来运行 Git 服务,不建议使用 root 用户。

    sudo adduser git
  3. 您的本地电脑上生成 SSH 密钥对 如果您还没有,请在您将要用来管理 Git 服务器的本地电脑**上打开终端,运行以下命令,它会生成一对密钥(id_rsaid_rsa.pub),请一路按回车键即可。

    ssh-keygen -t rsa

    您需要将公钥(~/.ssh/id_rsa.pub)上传到服务器上,我们可以用 scp 命令:

    CentOS如何搭建Git服务器?-图3
    (图片来源网络,侵删)
    # 将您的公钥复制到服务器的 /tmp 目录下,并重命名,方便识别
    scp ~/.ssh/id_rsa.pub your_server_ip:/tmp/your_name.pub

    your_server_ip 替换为您的服务器 IP 地址,your_name 替换为您的名字或任何标识符。

步骤 2:在服务器上配置 Gitolite

  1. git 用户身份登录服务器

    ssh git@your_server_ip
  2. 安装 Gitolite

    • 安装 Gitolite 的依赖:
      sudo yum install -y perl-Time-HiRes
    • 从 Git 仓库克隆 Gitolite 并安装:
      git clone https://github.com/sitaramc/gitolite
      mkdir -p ~/bin
      gitolite/install -to ~/bin
  3. 使用您的公钥初始化 Gitolite 回到您刚才用 scp 复制过来的公钥,假设它在 /tmp/your_name.pub

    # 将公钥移动到 git 用户的主目录下
    mv /tmp/your_name.pub ~/ 
    # 运行 setup 命令进行初始化
    ~/bin/gitolite setup -pk your_name.pub

    执行后,您会看到 git 用户的主目录下多了一个 repositories 目录,这里将存放所有的 Git 仓库,Gitolite 会自动管理 ~/.ssh/authorized_keys 文件。

步骤 3:管理仓库和用户

您可以在您的本地电脑上管理 Gitolite 了。

  1. 克隆 Gitolite 的管理仓库 退出服务器的 git 用户登录,回到您的本地电脑,运行以下命令:

    git clone git@your_server_ip:gitolite-admin

    您需要输入 git 用户的密码(如果您之前设置了的话),克隆成功后,您会得到一个名为 gitolite-admin 的仓库。

  2. 理解 gitolite-admin 仓库的结构

    • keydir/:这个目录用于存放所有用户的公钥,将用户的公钥(user_a.pub, user_b.pub)文件放到这里,他们就能访问服务器了。
    • conf/gitolite.conf:这是核心配置文件,用于定义仓库和用户权限。
  3. 添加新用户和新仓库

    • 添加用户:假设您要添加一个新用户 user_c
      1. user_c 在自己的电脑上生成 SSH 密钥对。
      2. 将他的公钥(user_c.pub)通过邮件或其他方式发送给您。
      3. user_c.pub 文件放入 gitolite-admin/keydir/ 目录下。
    • 创建新仓库并设置权限:编辑 gitolite-admin/conf/gitolite.conf 文件,添加如下内容:
      repo    my-new-project
          RW+     =   your_name      # 您自己拥有读写和创建分支/标签的权限
          RW      =   user_c         # user_c 拥有读写权限
          R       =   user_a         # user_a 只有只读权限
      • RW+:读写、创建分支/标签。
      • RW:读写,不能创建分支/标签。
      • R:只读。
  4. 提交并推送配置

    cd gitolite-admin
    git add .
    git commit -m "Add user_c and create my-new-project repo"
    git push

    当您 push 配置后,Gitolite 服务器会自动更新 git 用户的 authorized_keys 文件和仓库的权限。

步骤 4:用户克隆和使用仓库

user_c 可以克隆仓库了:

git clone git@your_server_ip:my-new-project

他会被自动授予正确的权限。


使用 SSH + Authorized Keys(简单方法)

这种方法直接利用 Linux 的用户系统,每个仓库对应一个用户或一个用户组。

步骤 1:创建 Git 用户和仓库目录

  1. 安装 Git

    sudo yum install -y git
  2. 创建 Git 用户

    sudo adduser git
  3. 创建一个裸仓库 “裸仓库”没有工作目录,只包含 Git 的版本历史信息,非常适合作为服务器端仓库,我们将在 /home/git 目录下创建。

    sudo mkdir -p /home/git/repositories
    sudo chown -R git:git /home/git/repositories
    sudo su - git
    cd ~/repositories
    git init --bare my-project.git
    exit

    一个名为 my-project.git 的仓库已经准备好了。

步骤 2:配置 SSH 访问

  1. 在您的本地电脑上生成 SSH 密钥对 如果您还没有,请生成:

    ssh-keygen -t rsa
  2. 将公钥添加到服务器的 git 用户 将您的公钥(~/.ssh/id_rsa.pub追加到服务器上 git 用户的 authorized_keys 文件中。

    # 将您的公钥内容复制到剪贴板
    # 然后登录到服务器
    ssh your_server_ip
    # 切换到 git 用户
    sudo su - git
    # 创建 .ssh 目录(如果不存在)
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    # 将公钥内容追加到 authorized_keys 文件
    # (请将 'PASTE_YOUR_PUBLIC_KEY_HERE' 替换为您实际的公钥内容)
    echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
    # 设置正确的权限
    chmod 600 ~/.ssh/authorized_keys
    exit
    exit

步骤 3:克隆和使用仓库

您可以从您的本地电脑克隆这个仓库了:

git clone git@your_server_ip:my-project.git

如果一切顺利,您就可以开始使用这个仓库了。

权限管理(简单版)

  • 只读用户:将只读用户的公钥也添加到同一个 ~/.ssh/authorized_keys 文件中即可,但他们只能 clonefetch,无法 push
  • 限制用户:如果您想禁止某个用户 push,可以在 ~/.ssh/authorized_keys 文件中为他那一行公钥的末尾添加命令限制:
    command="git-receive-pack 'my-project.git'",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA...

    这样,这个用户就只能对这个仓库执行 git-receive-pack(即 push 相关操作),而无法执行其他命令。


总结对比

特性 方法一 (Gitolite) 方法二 (SSH + Keys)
权限管理 非常灵活和强大,可以精确到每个用户对每个仓库的读写、创建分支等权限。 相对简单,通常基于用户或用户组,精细控制较麻烦。
用户管理 集中管理,通过 gitolite-admin 仓库添加/删除用户,无需在服务器上创建系统用户。 依赖系统用户,虽然不用为每个 Git 用户创建系统用户,但公钥管理相对分散。
配置方式 通过 Git 推送配置文件进行管理,非常方便。 需要手动编辑服务器上的 authorized_keys 文件。
适用场景 多用户、多项目、需要复杂权限控制的团队 个人项目、小团队、或者对权限要求不高的场景
推荐度 ★★★★★ (强烈推荐) ★★★☆☆ (简单易用)

对于绝大多数需要作为正式服务器的场景,强烈推荐使用方法一(Gitolite),它的权限管理能力和便捷的配置方式会为您省去很多后续的麻烦。

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