凌峰创科服务平台

Ubuntu如何搭建Git服务器?

  1. 使用 gitolite:这是最经典、功能最丰富的方式,适合需要精细权限控制(如每个仓库、每个用户的读写/只读权限)的场景,它通过一个特殊的 git 用户和 SSH 连接来工作。
  2. 使用 Gitea:这是一个现代化的、轻量级的 Git 服务程序,类似于 GitHub/GitLab 的轻量版,它有 Web 界面,方便用户和仓库管理,非常适合个人或小团队使用。

使用 gitolite(经典、功能强大)

这种方法的核心是利用 SSH 的公钥认证来管理用户和权限。

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

第 1 步:安装 Git 和创建 git 用户

确保你的 Ubuntu 系统已经更新,并安装了 Git。

# 更新软件包列表
sudo apt update
# 安装 git
sudo apt install git -y
# 创建一个专门的 'git' 用户来管理仓库
sudo adduser --system --shell /bin/bash --group --home /home/git git

第 2 步:在管理员的机器上生成 SSH 密钥

这一步非常重要! 你需要在你自己的电脑(比如你的 macOS 或 Windows 笔记本)上操作,而不是在服务器上。

  1. 检查你是否已经有 SSH 密钥:

    ls -al ~/.ssh

    如果看到 id_rsaid_rsa.pub 文件,说明你已经有了,如果没有,请执行下一步。

    Ubuntu如何搭建Git服务器?-图2
    (图片来源网络,侵删)
  2. 生成新的 SSH 密钥(一路按回车即可):

    ssh-keygen -t rsa -b 4096
  3. 将你的公钥 (id_rsa.pub) 复制到服务器的 /tmp 目录下,并命名为 admin.pub,你可以使用 scp 命令:

    # 将你的公钥从本地电脑上传到服务器的 /tmp 目录
    # 将 user@your_local_machine 替换为你的用户名和主机名/IP
    # 将 server_ip 替换为你的服务器 IP 地址
    scp ~/.ssh/id_rsa.pub user@server_ip:/tmp/admin.pub

第 3 步:在服务器上安装 gitolite

切换到服务器上进行操作。

  1. 登录到你的服务器(如果还没登录的话)。

    Ubuntu如何搭建Git服务器?-图3
    (图片来源网络,侵删)
  2. git 用户身份登录,并设置其环境变量:

    sudo su - git
    # 设置 git 的用户名和邮箱(可选,但推荐)
    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"
  3. 安装 gitolite

    # 克隆 gitolite 的代码仓库
    git clone https://github.com/sitaramc/gitolite
    # 进入 gitolite 目录
    cd gitolite
    # 执行安装脚本
    ./install -ln

    这会在 /home/git 目录下设置好 gitolite 的环境。

  4. 用你刚才上传的 admin.pub 来初始化 gitolite

    # 回到 git 用户的家目录
    cd ~
    # 使用 gl-setup 来初始化,它会读取 /tmp/admin.pub 文件
    # gl-setup 会打开一个编辑器,让你修改配置文件 gitolite.conf
    # 如果你不熟悉,直接保存退出即可(按 :wq)
    gl-setup /tmp/admin.pub

    执行成功后,你的公钥会被重命名为 admin.pub 并存放在 ~/.ssh/authorized_keys 中,gitolite 的管理仓库 gitolite-admin 也会被自动创建。

第 4 步:管理仓库和用户

gitolite 的管理方式非常巧妙:它通过管理一个特殊的仓库 gitolite-admin 来管理所有其他的仓库。

  1. 在你的管理员电脑上克隆 gitolite-admin 仓库

    # 退出服务器登录
    exit
    # 在你的本地电脑上,克隆管理仓库
    # 注意:git@server_ip 是通过 SSH 连接的,使用的是你在服务器上创建的 git 用户
    git clone git@server_ip:gitolite-admin
  2. 配置仓库和权限

    • 进入 gitolite-admin 目录,你会看到两个文件夹:confkeydir
    • keydir:存放所有用户的公钥,文件名就是用户名(alice.pub, bob.pub),你需要把新用户的公钥文件放在这里。
    • conf:存放 gitolite.conf 文件,这是权限配置的核心。

    打开 conf/gitolite.conf,你可以这样定义仓库和权限:

    repo    testing
            RW+     =   alice    # alice 对 testing 仓库有读写和删除权限
            R       =   bob      # bob 对 testing 仓库有只读权限
    repo    project-alpha
            RW+     =   @all     # 所有用户都有读写和删除权限
    • RW+ = 读写 + 推送删除分支/标签的权限
    • RW = 读写权限
    • R = 只读权限
    • @all 代表所有已知的用户
  3. 提交并推送配置

    cd gitolite-admin
    # 修改 conf/gitolite.conf 或添加了新的公钥后
    git add .
    git commit -m "Add testing repo and bob user"
    git push

    一旦你 push 到服务器,gitolite 会自动在服务器上创建相应的仓库,并根据你的 gitolite.conf 文件更新权限。

第 5 步:用户如何使用

其他用户(如 alice)需要做的是:

  1. 生成自己的 SSH 密钥。
  2. 将自己的公钥文件(alice.pub)发给管理员。
  3. 管理员将 alice.pub 放入 gitolite-admin/keydir/ 目录,并更新 gitolite.conf(比如给 alice 某个仓库的权限),push
  4. 之后,alice 就可以通过 SSH 克隆和操作仓库了:
    # alice 在自己的电脑上
    git clone git@server_ip:testing

使用 Gitea(现代化、带 Web 界面)

Gitea 是一个独立的二进制文件,安装和配置都非常简单,并且提供了漂亮的 Web 界面。

第 1 步:安装必要的依赖

# 更新软件包列表
sudo apt update
# 安装 git 和其他依赖
sudo apt install git -y
# 安装用于构建 Gitea 的工具(如果下载预编译包则不需要)
sudo apt install install golang-go -y

第 2 步:创建 git 用户

gitolite 一样,我们使用一个专门的 git 用户来运行 Gitea。

sudo adduser --system --shell /bin/bash --group --home /home/git git

第 3 步:下载并安装 Gitea

  1. Gitea 官网 的下载页面找到适合 Linux AMD64 的最新版本链接。
  2. 使用 wget 下载到 /tmp 目录:
    # 替换下面的 URL 为最新的下载链接
    wget -O /tmp/gitea https://dl.gitea.io/gitea/1.21.1/gitea-1.21.1-linux-amd64
  3. 将下载的二进制文件移动到 /usr/local/bin 并赋予可执行权限:
    sudo mv /tmp/gitea /usr/local/bin/
    sudo chmod +x /usr/local/bin/gitea

第 4 步:创建配置文件和数据目录

  1. 切换到 git 用户:

    sudo su - git
  2. 创建 Gitea 的配置和数据目录:

    mkdir -p /home/git/gitea/{custom,data,indexers,log,public}
  3. 创建一个默认的 app.ini 配置文件:

    /usr/local/bin/gitea web --install --custom-path /home/git/gitea/custom --config /home/git/gitea/custom/conf/app.ini

    这条命令会生成一个配置文件在 /home/git/gitea/custom/conf/app.ini,你可以编辑这个文件来修改端口、数据库等设置,默认情况下,它会使用 SQLite 数据库,非常适合快速上手。

第 5 步:创建 Systemd 服务

为了让 Gitea 作为服务在后台运行,我们需要创建一个 systemd 服务文件。

  1. 退出 git 用户,回到 root:

    exit
  2. 创建并编辑服务文件:

    sudo nano /etc/systemd/system/gitea.service
  3. 粘贴进去:

    [Unit]
    Description=Gitea (Git with a cup of tea)
    After=syslog.target network.target
    After=postgresql.service mysql.service mariadb.service
    Requires=postgresql.service mysql.service mariadb.service
    [Service]
    # Run Gitea under the 'git' user
    User=git
    Group=git
    # Start Gitea
    ExecStart=/usr/local/bin/gitea web --config /home/git/gitea/custom/conf/app.ini
    WorkingDirectory=/home/git/gitea
    Restart=always
    Environment=USER=git HOME=/home/git
    [Install]
    WantedBy=multi-user.target
  4. 启动并启用 Gitea 服务:

    sudo systemctl daemon-reload
    sudo systemctl start gitea
    sudo systemctl enable gitea
  5. 检查服务状态:

    sudo systemctl status gitea

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

第 6 步:通过 Web 界面完成初始配置

  1. 打开你的浏览器,访问 http://<你的服务器IP>:3000,Gitea 默认监听 3000 端口。
  2. 你会看到一个安装向导页面。
    • 数据库:保持默认的 SQLite 即可。
    • 应用名称:填写你的 Git 服务名称。
    • 仓库根路径:保持默认 /home/git/gitea/repos
    • SSH 服务器域名和端口:SSH 端口不是 22,请填写正确的域名和端口。
    • Gitea URL:填写完整的 URL,http://your_server_ip:3000
    • 管理员账户:创建你的管理员用户名、密码和邮箱。
  3. 点击 “安装 Gitea” 按钮。

安装完成后,你就可以登录 Web 界面,创建仓库、添加用户、管理组织等,体验和 GitHub/GitLab 类似的功能。

总结与选择

特性 gitolite Gitea
核心方式 基于 SSH 和配置文件管理 独立服务,带 Web UI
权限管理 非常精细,通过 gitolite.conf 通过 Web UI,支持团队、组织、成员管理
易用性 较高,需要熟悉 Git 和 SSH 非常高,图形化界面,一目了然
功能 专注于 Git 仓库的权限控制 功能全面,问题跟踪、Wiki、CI/CD 集成等
适用场景 命令行爱好者,需要极致权限控制的团队,资源有限的旧服务器 个人开发者,小团队,希望有类似 GitHub 体验的用户

如何选择?

  • 如果你喜欢命令行,追求轻量级极致的权限控制,并且不介意手动管理配置文件,gitolite 是一个非常好的选择。
  • 如果你希望快速搭建,并且需要一个友好的 Web 界面来管理用户和仓库,甚至未来可能需要集成更多功能(如任务管理),Gitea 绝对是更现代、更推荐的选择,对于绝大多数用户来说,Gitea 的体验会好得多。
分享:
扫描分享到社交APP
上一篇
下一篇