凌峰创科服务平台

centos 搭建git 服务器

  1. 使用 Git 自带的 Gitosis 或 Gitolite:这是最经典的方式,通过管理一个特殊的 git 用户的 authorized_keys 文件来控制用户访问权限,Gitolite 是 Gitosis 的升级版,功能更强大,是目前推荐的“纯 SSH”方式。
  2. 使用 Gogs / GitLab:这是更现代化的方式,它们是完整的 Web 界面的 Git 服务平台,集成了用户管理、权限控制、问题跟踪、CI/CD 等功能,开箱即用。

我将为你详细介绍这两种方式,你可以根据自己的需求选择。

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

准备工作

在开始之前,请确保你有一台已经安装好 CentOS 7/8/9 的服务器,并且拥有 rootsudo 权限,为了方便操作,我们先将系统更新到最新状态。

sudo yum update -y

使用 Gitolite(推荐的传统方式)

这种方式轻量、高效,完全基于 SSH,无需 Web 服务器。

第 1 步:创建 Git 专用用户

为了安全,我们不应该用 root 用户来运行 Git 服务,创建一个名为 git 的系统用户。

sudo adduser git

第 2 步:在服务器上安装 Git 和 Gitolite

# 安装 Git
sudo yum install -y git
# 安装 Gitolite
# Gitolite 通常不在官方仓库中,我们可以从 EPEL 仓库安装,或者从源码安装。
# 这里推荐使用 EPEL 仓库。
sudo yum install -y epel-release
sudo yum install -y gitolite3

安装完成后,Gitolite 会自动创建配置文件和仓库,通常位于 /home/git/.gitolite/home/git/repositories

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

第 3 步:在客户端生成 SSH 密钥

这一步在你的本地电脑(客户端)上操作,而不是服务器上。

如果你还没有 SSH 密钥,请先生成一对:

# 邮箱可以替换成你自己的,用于标识密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

一路按回车即可,使用默认的路径(~/.ssh/id_rsa)。

完成后,你会得到 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。

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

第 4 步:将公钥上传到服务器并初始化 Gitolite

将你刚刚生成的公钥文件(id_rsa.pub)上传到服务器的 /tmp 目录。

# 在客户端使用 scp 命令上传
scp ~/.ssh/id_rsa.pub user@your_server_ip:/tmp/

注意:这里的 user 是你用来登录服务器的普通用户,不是 git 用户。

登录到服务器,使用这个普通用户来初始化 Gitolite。

# 登录服务器
ssh user@your_server_ip
# 切换到 git 用户
sudo su - git
# 使用 Gitolite 的安装脚本来初始化
# gl-setup 会提示你输入管理员信息,它会读取 /tmp 目录下的 .pub 文件
# 将你上传的 id_rsa.pub 文件作为管理员公钥
gl-setup /tmp/*.pub

gl-setup 会执行以下操作:

  1. 设置 git 用户的 .ssh/authorized_keys 文件,使其通过 Gitolite 来验证 SSH 连接。
  2. 创建一个名为 gitolite-admin 的仓库,这个仓库用于管理所有仓库的权限。

第 5 步:管理仓库和用户

Gitolite 的管理方式非常巧妙:通过向 gitolite-admin 仓库提交代码来管理权限

  1. 克隆 gitolite-admin 仓库到你的客户端

    # 退出服务器,回到你的本地客户端
    exit # 或者 Ctrl+D
    # 克隆管理仓库
    git clone git@your_server_ip:gitolite-admin
  2. 查看管理仓库结构: 进入 gitolite-admin 目录,你会看到两个文件夹:

    • conf/: 存放配置文件,最重要的是 gitolite.conf
    • keydir/: 存放所有用户的公钥,文件名通常与用户名对应(john.pub, jane.pub)。
  3. 添加新用户

    • 让新用户(john)生成自己的 SSH 公钥。
    • john.pub 文件内容复制到 gitolite-admin/keydir/john.pub 文件中。
    • 提交并推送到服务器:
      cd gitolite-admin
      git add keydir/john.pub
      git commit -m "Add user john"
      git push
  4. 创建新仓库并设置权限

    • 编辑 conf/gitolite.conf 文件,这是一个强大的配置文件,语法如下:
      repo my-new-project
          RW+     =   alice   # alice 对此仓库有读写+创建分支/标签的权限
          RW      =   john    # john 对此仓库有读写权限
          R       =   jane    # jane 对此仓库只有读权限
    • 保存文件,然后提交并推送:
      git add conf/gitolite.conf
      git commit -m "Create my-new-project repo and set permissions"
      git push

第 6 步:使用新仓库

任何被授权的用户都可以像克隆任何其他 Git 仓库一样克隆它了。

# 在 alice 的电脑上
git clone git@your_server_ip:my-new-project

至此,一个功能完善的 Git 服务器就搭建完成了。


使用 Gogs(推荐现代化方式)

Gogs 是一个用 Go 语言编写的、轻量级的自托管 Git 服务,它有漂亮的 Web 界面,易于安装和使用。

第 1 步:安装必要的依赖

sudo yum install -y git
sudo yum install -y wget
sudo yum install -y sqlite  # Gogs 默认使用 SQLite,生产环境建议用 MySQL/PostgreSQL

第 2 步:创建 Git 用户

同样,我们为 Gogs 创建一个专用用户。

sudo adduser git

第 3 步:下载并安装 Gogs

我们直接下载 Gogs 的二进制文件。

# 切换到 git 用户
sudo su - git
# 创建 Gogs 安装目录
mkdir -p ~/gogs
cd ~/gogs
# 下载最新的 Gogs 版本 (请替换为最新的版本号)
wget https://github.com/gogs/gogs/releases/download/v0.13.0/gogs_v0.13.0_linux_amd64.zip
unzip gogs_v0.13.0_linux_amd64.zip

第 4 步:配置 Gogs

Gogs 的配置文件是 custom/conf/app.ini,首次运行前,最好先创建一个自定义配置文件。

cd ~/gogs
mkdir -p custom/conf
touch custom/conf/app.ini

编辑 custom/conf/app.ini 文件,进行基本配置:

APP_NAME = Gogs: Go Git Service
RUN_USER = git
RUN_MODE = prod
[database]
# 使用 SQLite,路径是相对于 Gogs 根目录的
DB_TYPE = sqlite3
HOST = 127.0.0.1:3306
NAME = gogs.db
USER = root
PASSWD =
PATH = data/gogs.db
[repository]
ROOT = /home/git/gogs-repositories
[server]
# 监听所有网络接口,端口为 3000
HTTP_ADDR = 0.0.0.0
HTTP_PORT = 3000

第 5 步:启动 Gogs

Gogs 提供了一个方便的脚本来管理服务。

# 切换回 root 用户
exit
# 创建一个 systemd 服务文件,以便管理 Gogs
sudo vim /etc/systemd/system/gogs.service

粘贴到 gogs.service 文件中:

[Unit]
Description=Gogs
After=syslog.target network.target
[Service]
# 使用 git 用户运行
User=git
WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs/gogs web
RestartSec=2s
Type=simple
Restart=always
[Install]
WantedBy=multi-user.target

启动并设置开机自启 Gogs:

sudo systemctl daemon-reload
sudo systemctl start gogs
sudo systemctl enable gogs

检查服务状态:

sudo systemctl status gogs

如果看到 active (running),说明启动成功。

第 6 步:通过 Web 界面完成安装

  1. 打开浏览器,访问 http://your_server_ip:3000
  2. 你会看到 Gogs 的初始化设置页面。
  3. 数据库配置:如果你使用了 SQLite,直接使用默认配置即可,如果你配置了 MySQL,需要先创建数据库和用户,然后在这里填写连接信息。
  4. 应用名称:填写你想要的 Git 服务名称。
  5. 管理员账户:创建一个管理员账户(用户名、密码、邮箱)。
  6. 点击 "Install Gogs" 按钮。

安装完成后,你会被重定向到登录页面,现在你已经拥有一个功能齐全的 Web Git 服务平台了!

第 7 步:后续使用

  • 创建仓库:登录 Web 界面,点击 "New Repository" 即可创建新仓库。
  • 用户管理:在 Web 界面可以方便地添加/删除用户,管理团队和权限。
  • 克隆仓库:在仓库页面,你会得到 SSH 或 HTTP 的克隆地址。

方案对比与选择

特性 方案一 (Gitolite) 方案二 (Gogs)
部署方式 命令行,配置文件管理 Web 界面,图形化管理
权限管理 通过 gitolite-admin 仓库的 Git 提交来管理 通过 Web 界面进行图形化管理
用户管理 手动添加公钥到 keydir 在 Web 界面注册或由管理员添加
Web 界面 有,功能齐全(仓库浏览、问题、Wiki 等)
附加功能 仅提供 Git 仓库服务 提供问题跟踪、Wiki、Pull/Merge Request、CI/CD 集成等
资源占用 极低,仅依赖 Git 和 SSH 较低,但比纯 Git 服务多一些
适用场景 - 简单、轻量、无需 Web 界面的场景
- 对命令行操作熟悉的团队
- 快速搭建一个权限可控的 Git 服务器
- 需要图形化界面的团队
- 项目需要 Wiki、问题跟踪等功能
- 计划集成 CI/CD 流水线
- 适合中小型团队或个人项目

总结建议:

  • 如果你只是需要一个快速、轻量、安全的 Git 服务器,并且不介意使用命令行来管理权限,Gitolite 是一个绝佳的选择
  • 如果你希望拥有一个现代化的 Web 界面,方便团队成员通过浏览器进行操作,并且需要一些项目管理功能,强烈推荐使用 Gogs,它的安装和后续管理都非常简单。
分享:
扫描分享到社交APP
上一篇
下一篇