在服务器上部署自己的 Git 服务,并为团队分配账号和仓库

Git 是开发人员广泛使用的版本控制工具,GitHub、GitLab 和 Bitbucket 等托管服务为我们提供了强大的功能。然而,在某些情况下,出于隐私、数据安全或自定义需求的考虑,您可能希望在自己的服务器上部署 Git 服务。本篇博客将介绍如何在服务器上部署 Git 服务,并为团队分配不同的账号和仓库。

部署环境准备

在开始之前,您需要确保以下条件:

  1. 一台 Linux 服务器 (如 Ubuntu 20.04)。
  2. SSH 服务已开启。
  3. 基础的 Linux 命令行操作经验。
  4. 一个具有 root 或 sudo 权限的用户。

第一步:安装 Git

在大多数 Linux 发行版中,Git 可以通过包管理工具直接安装。使用以下命令进行安装:

sudo apt update
sudo apt install git

安装完成后,可以通过以下命令检查 Git 是否安装成功:

git --version

它会返回类似 git version 2.25.1 这样的版本号,表明 Git 已成功安装。

第二步:创建 Git 用户

为了更好地管理和隔离 Git 服务,我们建议为 Git 服务创建一个独立的用户。例如,创建一个名为 git 的用户:

sudo adduser git

在创建用户时,系统会提示输入该用户的密码和一些基本信息,您可以根据需要进行填写。

第三步:配置 SSH 访问

Git 仓库的访问通常通过 SSH 来进行,接下来我们需要为每个团队成员配置 SSH 公钥认证。

1. 收集 SSH 公钥

每个团队成员都需要生成并提供自己的 SSH 公钥。可以通过以下命令生成 SSH 密钥对:

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

生成后,公钥通常位于 ~/.ssh/id_rsa.pub,团队成员应将此文件的内容发送给您。

2. 添加 SSH 公钥到 Git 用户

git 用户的家目录下,创建一个 .ssh 目录并添加每个用户的 SSH 公钥到 authorized_keys 文件中。

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

将每个成员的公钥粘贴到 authorized_keys 文件中,每个公钥一行。例如:

echo "ssh-rsa AAAAB3Nza... user1" >> /home/git/.ssh/authorized_keys
echo "ssh-rsa AAAAB3Nza... user2" >> /home/git/.ssh/authorized_keys

这样,所有的团队成员都可以通过 SSH 登录 Git 用户。

第四步:创建 Git 仓库

每个项目都将作为一个裸仓库(bare repository)存在,这意味着它没有工作目录,只用于远程推送和拉取代码。

1. 创建仓库目录

首先,为 Git 仓库创建一个存储目录,例如 /home/git/repositories

sudo -u git mkdir /home/git/repositories

2. 创建裸仓库

假设您要为项目 project1 创建一个仓库,您可以使用以下命令:

sudo -u git git init --bare /home/git/repositories/project1.git

这将创建一个裸仓库,其他开发人员可以通过该仓库进行推送和拉取操作。

3. 设置仓库权限

确保仓库目录属于 git 用户,并且权限正确:

sudo chown -R git:git /home/git/repositories/project1.git

第五步:为团队成员分配仓库权限

通过 SSH 配置,我们已经为每个团队成员提供了登录 Git 用户的权限。接下来,通过将不同的仓库分配给特定成员,可以实现权限控制。

1. 使用 Gitolite 进行权限管理

为了更方便地管理多个用户和仓库的权限,我们可以使用 Gitolite,一个强大的 Git 服务器管理工具。安装 Gitolite 的步骤如下:

sudo apt install gitolite3

安装后,配置 Gitolite 管理权限。首先,将管理员(例如,您自己的 SSH 公钥)放到服务器上,并初始化 Gitolite:

sudo -u git cp /path/to/your_admin_ssh_key.pub /home/git/your_admin_ssh_key.pub
sudo -u git gl-setup /home/git/your_admin_ssh_key.pub

Gitolite 安装完成后,您可以通过克隆 Gitolite 的管理仓库来管理权限:

git clone git@your_server:gitolite-admin.git

2. 修改权限

Gitolite 的权限管理非常灵活。克隆管理仓库后,编辑 conf/gitolite.conf 文件,添加您的仓库和用户:

repo project1
    RW+     =   admin
    RW      =   user1
    R       =   user2

这意味着 admin 拥有读写和强制推送权限,user1 拥有读写权限,user2 只能读取代码。

编辑完成后,提交并推送更改:

git add .
git commit -m "Configure access for project1"
git push

此时,Gitolite 将自动应用权限更改,团队成员可以按照分配的权限访问对应的仓库。

第六步:团队成员克隆和使用仓库

团队成员可以通过 SSH 克隆仓库。例如,user1 可以使用以下命令克隆 project1

git clone git@your_server:/home/git/repositories/project1.git

从现在起,团队成员可以像使用 GitHub 或 GitLab 那样,使用 Git 进行代码提交、推送和拉取。

总结

通过以上步骤,您已经成功在服务器上部署了自己的 Git 服务,并通过 SSH 和 Gitolite 实现了多用户和仓库的管理。相比于公有的 Git 托管服务,自己搭建的 Git 服务器更加灵活,且能更好地控制数据隐私和权限。

未来,您可以根据需求进一步扩展功能,例如配置 HTTP/HTTPS 访问、使用 Gogs 或 GitLab 这样的自托管工具提供 Web 界面,甚至结合 CI/CD 工具实现自动化部署流程

标签: Linux, Git

相关文章

Linux下的SSH服务配置与安全使用指南

重要提示:本文只是我日常使用的参考,请你先在本地做好测试,以免修改后不能正常登录服务器。 尤其是密钥登录的情况,一定要先将公钥放到服务器对应目录中SSH(Secure Shell)是一种加密网络...

macOS下使用UTM安装Alpine Linux虚拟机

在macOS下使用UTM(Universal Turing Machine)安装Alpine Linux虚拟机是一个相对简单的过程,但需要一些基本的配置和步骤。以下是详细的指南,涵盖了从安装UT...

Linux下swap分区的使用及配置

在Linux系统中,Swap分区用于在物理内存(RAM)不足时,将部分内存数据转移到硬盘上,以释放内存空间。Swap分区对于系统的稳定运行至关重要,尤其是在内存资源有限的情况下。本文将详细介绍如...

如何实现让我们部署的Go应用在进程挂掉之后自动重启

在软件开发和部署过程中,确保应用的高可用性是至关重要的。对于使用Go语言开发的应用来说,实现在进程异常终止后自动重启是提高服务稳定性的有效策略之一。下面将围绕如何实现Go应用在挂掉之后自动重启进...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件