凌峰创科服务平台

CentOS 7如何搭建Git服务器?

基础裸仓库 方案(最简单)

这是最直接的方式,适合个人使用或小团队,它通过 SSH 访问,利用系统用户来管理权限。

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

步骤 1: 安装 Git 和 SSH 服务器

确保你的 CentOS 7 系统已经更新,并安装 Git 和 OpenSSH 服务器。

# 更新系统软件包
sudo yum update -y
# 安装 Git
sudo yum install -y git
# 安装 OpenSSH 服务器(通常已安装)
sudo yum install -y openssh-server

步骤 2: 创建一个专用的 Git 用户

为了安全和管理方便,我们创建一个不登录的 git 用户来专门管理 Git 仓库。

# 创建 git 用户,并设置其 shell 为 /usr/sbin/nologin 防止登录
sudo useradd -m -s /usr/sbin/nologin git

步骤 3: 创建裸仓库

“裸仓库”是指没有工作目录的仓库,它只包含 Git 的版本历史信息,非常适合作为中央服务器。

我们将在 /home/git 目录下创建一个名为 my-project.git 的仓库。

CentOS 7如何搭建Git服务器?-图2
(图片来源网络,侵删)
# 切换到 git 用户
sudo su - git
# 创建一个裸仓库
git init --bare my-project.git
# 退出 git 用户
exit

你的 Git 仓库已经准备好了,路径是 /home/git/my-project.git

步骤 4: 在客户端克隆和推送

在任何一个装有 Git 的客户端机器上(你的电脑),你可以进行如下操作。

生成 SSH 密钥(如果还没有) 在你的客户端电脑上,打开终端执行:

# 一路按回车即可,使用默认路径和空密码
ssh-keygen -t rsa -b 4096

将公钥复制到服务器 你需要将客户端生成的公钥(通常是 ~/.ssh/id_rsa.pub)添加到服务器 git 用户的 authorized_keys 文件中。

方法 A:直接在服务器上添加

# 登录到服务器
ssh your_server_ip
# 切换到 git 用户
sudo su - git
# 创建 .ssh 目录(如果不存在)
mkdir -p .ssh
chmod 700 .ssh
# 将你的公钥内容追加到 authorized_keys 文件中
# (请在你的客户端电脑上执行 'cat ~/.ssh/id_rsa.pub',然后复制粘贴到这里)
echo "你的客户端公钥内容" >> .ssh/authorized_keys
# 设置正确的权限
chmod 600 .ssh/authorized_keys
exit
exit

方法 B:使用 ssh-copy-id 命令(更简单) 在你的客户端电脑上直接执行:

# 将你的公钥自动追加到服务器的 git 用户下
ssh-copy-id git@your_server_ip
# 它会提示你输入服务器的 root 或 git 用户的密码

在客户端克隆仓库

# 格式: git clone <git_user@server_ip:/path/to/repo.git>
git clone git@your_server_ip:/home/git/my-project.git

进行开发并推送

# 进入克隆下来的项目目录
cd my-project
# 创建一个新文件并提交
echo "Hello, Git Server!" > README.md
git add .
git commit -m "Initial commit"
# 推送到服务器
git push origin master

你已经成功搭建了一个基础的 Git 服务器。


使用 Gitolite 进行权限管理(推荐)

当团队变大,你需要精细控制每个用户对不同仓库的读写权限(如只读、读写、管理员)时,Gitolite 是一个非常优秀的解决方案,它通过一个特殊的 gitolite 用户和配置文件来管理所有仓库和用户权限。

步骤 1: 安装 Gitolite

在你的 CentOS 7 服务器上安装必要的软件。

# 安装 Git 和 Perl (Gitolite 依赖)
sudo yum install -y git perl

步骤 2: 准备管理员

Gitolite 需要一个“管理员”来设置其他用户的权限,这个管理员可以是你自己,也可以是团队中的某个人,这里我们以你(服务器上的 root 用户)为例。

  1. 在客户端生成 SSH 密钥 在你的客户端电脑上,确保你已经生成了 SSH 密钥对(id_rsaid_rsa.pub),如果还没有,请运行 ssh-keygen

  2. 将管理员的公钥上传到服务器 将你客户端的公钥(id_rsa.pub)复制到服务器上,并重命名为 admin.pub

    # 在你的客户端电脑上执行
    scp ~/.ssh/id_rsa.pub root@your_server_ip:/tmp/admin.pub
  3. 在服务器上安装 Gitolite 登录到你的服务器。

    # 登录服务器
    ssh root@your_server_ip
    # 创建 gitolite 用户
    sudo useradd -m -s /bin/bash gitolite
    # 将 admin.pub 移动到 gitolite 用户目录下
    sudo mv /tmp/admin.pub /home/gitolite/
    # 切换到 gitolite 用户
    sudo su - gitolite
    # 克隆并安装 Gitolite
    git clone git://github.com/sitaramc/gitolite
    mkdir -p bin
    gitolite/install -to bin
    # 确保 ~/bin 在你的 PATH 中
    echo 'export PATH=$HOME/bin:$PATH' >> .bashrc
    source .bashrc
    # 初始化 Gitolite
    gl-setup admin.pub

    gl-setup 过程中,它会提示你输入两次 gitolite 用户的密码,完成后,Gitolite 就安装好了。

步骤 3: 管理仓库和用户

所有的管理操作都通过 Git 本身来完成,你需要将你的客户端电脑~/.ssh/config 配置一下,以便方便地推送配置。

在客户端克隆 Gitolite 的管理仓库 这个仓库包含了所有仓库和用户权限的配置文件。

# 在你的客户端电脑上执行
git clone gitolite@your_server_ip:gitolite-admin

理解 gitolite-admin 仓库结构 克隆下来的 gitolite-admin 仓库有两个关键目录:

  • keydir/: 存放所有用户的公钥,文件名通常是用户名,内容是对应的公钥。
  • conf/gitolite.conf: 这是核心的权限配置文件。

添加新用户 假设你要添加一个新用户 john

  • john 在他的电脑上生成 SSH 密钥,并将他的 id_rsa.pub 发送给你。
  • john.pub 文件内容复制到 gitolite-admin/keydir/john.pub
  • 提交并推送:
    cd gitolite-admin
    git add keydir/john.pub
    git commit -m "Add user john"
    git push

    一旦推送,john 就可以立即使用他的私钥访问服务器了。

创建新仓库并设置权限 编辑 conf/gitolite.conf 文件,语法非常直观。

# conf/gitolite.conf
@developers = alice bob john # 定义一个用户组
repo my-project
    RW+     = @developers      # @developers 组有读写和创建分支的权限
    R       = jane             # jane 只有读权限
repo another-project
    RW+     = alice            # 只有 alice 有完全控制权
  • RW+: Read-Write-plus (读写、删除、强制推送)
  • RW: Read-Write (读写)
  • R: Read (只读)

保存文件后,提交并推送:

git add conf/gitolite.conf
git commit -m "Create my-project and set permissions"
git push

Gitolite 会自动在服务器上创建 my-project.gitanother-project.git 仓库,并应用你设置的权限。


使用 GitLab(功能最强大)

如果你的需求不仅仅是代码托管,还包括问题跟踪、CI/CD(持续集成/持续部署)、Wiki、代码审查等,那么应该使用 GitLab,GitLab 是一个完整的 DevOps 平台,通常以 Docker 方式部署。

简要步骤

  1. 安装 Docker 和 Docker Compose

    # 安装 Docker
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    # 启动 Docker 并设置开机自启
    sudo systemctl start docker
    sudo systemctl enable docker
    # 安装 Docker Compose
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
  2. 下载 GitLab Docker Compose 文件

    sudo mkdir -p /srv/gitlab
    sudo chown -R 1000:1000 /srv/gitlab
    cd /srv/gitlab
    sudo curl -O https://gitlab.com/gitlab-org/gitlab/-/raw/master/docker-compose.yml
  3. 编辑配置 你需要编辑 docker-compose.ymlgitlab.rb(在 config 目录下,如果不存在可以复制 gitlab.rb.example)来设置外部访问的域名、数据持久化路径等。

  4. 启动 GitLab

    sudo docker-compose up -d

    首次启动会下载大量镜像并初始化,可能需要较长时间。

  5. 访问 GitLab 启动后,通过浏览器访问你在配置中设置的域名或 IP 地址,首次登录需要使用 root 用户的密码(密码在 /srv/gitlab/config/initial_root_password 文件中,12小时后失效)。


总结与对比

特性 裸仓库 Gitolite GitLab
易用性 非常简单,适合新手 需要学习配置语法,但功能强大 开箱即用,功能最全
权限管理 基于系统用户,粗糙 非常精细,支持用户组和细粒度权限 功能强大,支持项目/群组级别的复杂权限
附加功能 非常丰富(CI/CD, Wiki, Issue, MR, 仪表盘等)
适用场景 个人、小团队、快速原型 中小型团队,需要权限控制 企业级、大型团队、完整的 DevOps 流程
资源消耗 极低 (需要较多 CPU 和内存)

如何选择?

  • 如果你只是自己用,或者和两三个非常信任的朋友一起用,方案一(裸仓库)足够了,简单直接。
  • 如果你在管理一个小团队,需要对不同的人分配不同的仓库读写权限,方案二(Gitolite)是最佳选择,它轻量、专业且安全。
  • 如果你的团队规模较大,或者你需要一个集成了项目管理、CI/CD 等功能的完整平台,不要犹豫,直接使用方案三(GitLab)。
分享:
扫描分享到社交APP
上一篇
下一篇