数据API 产品矩阵 案例 关于
掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

搭建私有可协作的 Git 服务器

本文将介绍如何在腾讯云 CVM 上搭建一个私有可协作的 Git 服务器。文中操作也适用于其他云服务商提供的服务器资源,具体配置时请注意操作系统的异同。

为什么?


搭建私有 Git 服务器,对于个人部署 Web 应用来说并不是必须的,你完全可以跳过这一步骤,使用 Github 管理自己的应用仓库。

这次回迁过程中选择自己搭建,一是出于练习的目的,二是发现国内拉取 Github 仓库速度较慢。这点大家在使用各种国外资源库时想必都有体会。

另外,如果你是一名移动开发者,而且应用收费的话,使用私有 Git 服务器可以很好地保护你的代码。

Gitolite


能够托管 Git 仓库的软件有很多,如 Gitosis、GitList、Gitlab 等,其中不少还有比较好看的图形界面。但在本文中,我们选择的是一个图形界面的项目:Gitolite。

Gitolite 可以帮助你管理对私有 Git 服务器的访问权限,有如下特点:

  • 服务器上只有一个 Unix 用户
  • 允许多个 gitolite 用户访问
  • 这些 gitolite 用户不是服务器上的真实用户
  • 因此没有 shell 权限
  • 管理各个仓库的访问权限
  • 无需 root 即可安装
  • 通过 sshd 进行用户验证

安装 Gitolite


上一篇的最后,我们在安装 oh-my-zsh 时已经安装了 Git。接下来只要安装 Gitolite 即可。

在 Debian 8 系统上,键入如下命令:

sudo apt-get install gitolite3

在安装过程中,它会要求你选择用来管理 Gitolite 的公钥地址。我们暂时不做选择。

接下来,我们将创建一个系统级别用户,专门用来管理 gitolite。该用户的名称可以设置为 git,方便协作者记忆。我们不设置密码,这样就只能使用 su 命令来访问 git 用户。

sudo adduser --system --shell /usr/bin/zsh --gecos 'git version control' --group --disabled-password --home /home/git git

我喜欢给新用户也使用 zsh,接着把管理用户 earlgrey 中的 .zshrc 设置复制到 git 用户。

sudo cp .zshrc /home/git/.zshrc

配置密钥对


在本地电脑上生成一个用于管理 Gitolite 的 SSH 密钥对,你可以继续使用上一篇中生成的密钥对,但推荐单独生成一个。生成密钥对时,注意更改保存地址和文件名称,不要覆盖之前的密钥对。

假设最终生成的密钥对名称为 git_rsa,我们可以这样将公钥复制到 Git 服务器:

scp ~/.ssh/git_rsa.pub earlgrey@qcloud-cvm-ip:/tmp/git-admin.pub

配置 Gitolite


接下来,我们以普通用户登录服务器。再通过 su 命令登录 git 用户,使用刚才复制的公钥来初始化 Gitolite。

sudo su - git
gitolite setup -pk /tmp/git-admin.pub

管理 Gitolite


下面可以回到本地,开始管理 Gitolite。这主要是通过修改 gitolite-admin 仓库来实现。

首先,我们从刚配置好的 Git 服务器上克隆该库到本地:

git clone git@qcloud-cvm-ip:gitolite-admin

这会在当前目录下创建一个叫做 gitolite-admin 的目录。我们可以通过修改该目录下的文件,对服务器的访问策略做出修改。

添加新用户


为了与同事或其他人员进行写作,我们需要给项目添加新用户。为此,就需要他们提供公钥。Gitolite 会将用户名与同名的公钥关联起来。假设我们要添加一个名为 pythontg 的用户。

在本地机器上,我们切换到 gitolite-admin 目录,看看目录下都有些什么文件:

cd gitolite-admin
ls

输出结果显示,目录中共有两个文件夹:conf 和 keydir。keydir 就是用于保存用户公钥的。

我们将从 pythontg 用户那里得到的公钥,复制到该目录下:

cp /path/to/pythontg/public/key.pub ~/gitolite-admin/keydir/pythontg.pub

然后将新文件添加到 git,并提交更改:

git add keydir/pythontg.pub
git commit -m 'New user pythontg added'
git push

配置权限


完成上面的操作之后,你可能会看到下面这样的警告信息:

remote: 
remote:         ***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: pythontg(pythontg.pub)

该信息表示新用户没有在配置文件中出现。这意味着,虽然 Gitolite 已经知道新建了这么一个用户,但是还没有为新用户创建任何权限。

编辑 ~/gitolite-admin/conf/gitolite.conf 文件,并为其创建一个新仓库:

repo    gitolite-admin
        RW+     =   git-admin

repo    testing
        RW+     =   @all

repo    pythontg
        RW+     =   pythontg

Gitolite 使用 repo 关键词 + 仓库名,指定 git 仓库。并在下方编辑权限类型,以及拥有权限的用户。

@all 是用户组的名称,这里是一个特殊的用户组,表示所有的 gitolite 用户。

权限的定义如下:

  • R 表示只读
  • RW 表示可读或推送更改,但不能删除 git ref
  • RW+ 表示可读、可写,而且可以删除 git ref

推送修改后,我们就成功为新用户创建了一个仓库,并赋予了充足的权限。

用户 pythontg 可以这样在本地克隆该库:

git clone git@qcloud-cvm-ip:pythontg

纯粹个人使用的 Git 服务器


到此为止,我们已经完成了 Gitolite 的配置,拥有了一个可供多名用户协作的私有 Git 服务器。我们按照上面的类似步骤,将应用的代码库添加到 Gitolite,并推送到服务器上。

如果你只想要一个供个人使用的 Git 服务器,那么只需要在拥有 SSH 登陆权限的账户下创建一个裸仓库(bare repository)即可。

mkdir -p /var/repo
sudo chmod 700 /var/repo
cd /var/repo
git init --bare codingpy.git

然后在本地机器上,进入你已有的应用目录。如果已经有本地 Git 仓库,可以修改 remote 设置:

git remote set-url origin earlgrey@qcloud-cvm-ip:/var/repo/codingpy.git

如果是一个新仓库,可以这样操作:

git init && git remote add origin earlgrey@qcloud-cvm-ip:/var/repo/codingpy.git

上述命令中的用户名、IP 地址及仓库地址,请根据自身的情况修改。

结语


到目前为止,Git 服务器的配置就完成了。参考上述操作,我将编程派网站的仓库放置到了新的服务器上,再也不用忍受慢速 Git 拉取了。

编程派.jpg

原文来自:编程派

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务
搭建私有可协作的 Git 服务器
发布:2016-11-04 15:07:23

本文将介绍如何在腾讯云 CVM 上搭建一个私有可协作的 Git 服务器。文中操作也适用于其他云服务商提供的服务器资源,具体配置时请注意操作系统的异同。

为什么?


搭建私有 Git 服务器,对于个人部署 Web 应用来说并不是必须的,你完全可以跳过这一步骤,使用 Github 管理自己的应用仓库。

这次回迁过程中选择自己搭建,一是出于练习的目的,二是发现国内拉取 Github 仓库速度较慢。这点大家在使用各种国外资源库时想必都有体会。

另外,如果你是一名移动开发者,而且应用收费的话,使用私有 Git 服务器可以很好地保护你的代码。

Gitolite


能够托管 Git 仓库的软件有很多,如 Gitosis、GitList、Gitlab 等,其中不少还有比较好看的图形界面。但在本文中,我们选择的是一个图形界面的项目:Gitolite。

Gitolite 可以帮助你管理对私有 Git 服务器的访问权限,有如下特点:

  • 服务器上只有一个 Unix 用户
  • 允许多个 gitolite 用户访问
  • 这些 gitolite 用户不是服务器上的真实用户
  • 因此没有 shell 权限
  • 管理各个仓库的访问权限
  • 无需 root 即可安装
  • 通过 sshd 进行用户验证

安装 Gitolite


上一篇的最后,我们在安装 oh-my-zsh 时已经安装了 Git。接下来只要安装 Gitolite 即可。

在 Debian 8 系统上,键入如下命令:

sudo apt-get install gitolite3

在安装过程中,它会要求你选择用来管理 Gitolite 的公钥地址。我们暂时不做选择。

接下来,我们将创建一个系统级别用户,专门用来管理 gitolite。该用户的名称可以设置为 git,方便协作者记忆。我们不设置密码,这样就只能使用 su 命令来访问 git 用户。

sudo adduser --system --shell /usr/bin/zsh --gecos 'git version control' --group --disabled-password --home /home/git git

我喜欢给新用户也使用 zsh,接着把管理用户 earlgrey 中的 .zshrc 设置复制到 git 用户。

sudo cp .zshrc /home/git/.zshrc

配置密钥对


在本地电脑上生成一个用于管理 Gitolite 的 SSH 密钥对,你可以继续使用上一篇中生成的密钥对,但推荐单独生成一个。生成密钥对时,注意更改保存地址和文件名称,不要覆盖之前的密钥对。

假设最终生成的密钥对名称为 git_rsa,我们可以这样将公钥复制到 Git 服务器:

scp ~/.ssh/git_rsa.pub earlgrey@qcloud-cvm-ip:/tmp/git-admin.pub

配置 Gitolite


接下来,我们以普通用户登录服务器。再通过 su 命令登录 git 用户,使用刚才复制的公钥来初始化 Gitolite。

sudo su - git
gitolite setup -pk /tmp/git-admin.pub

管理 Gitolite


下面可以回到本地,开始管理 Gitolite。这主要是通过修改 gitolite-admin 仓库来实现。

首先,我们从刚配置好的 Git 服务器上克隆该库到本地:

git clone git@qcloud-cvm-ip:gitolite-admin

这会在当前目录下创建一个叫做 gitolite-admin 的目录。我们可以通过修改该目录下的文件,对服务器的访问策略做出修改。

添加新用户


为了与同事或其他人员进行写作,我们需要给项目添加新用户。为此,就需要他们提供公钥。Gitolite 会将用户名与同名的公钥关联起来。假设我们要添加一个名为 pythontg 的用户。

在本地机器上,我们切换到 gitolite-admin 目录,看看目录下都有些什么文件:

cd gitolite-admin
ls

输出结果显示,目录中共有两个文件夹:conf 和 keydir。keydir 就是用于保存用户公钥的。

我们将从 pythontg 用户那里得到的公钥,复制到该目录下:

cp /path/to/pythontg/public/key.pub ~/gitolite-admin/keydir/pythontg.pub

然后将新文件添加到 git,并提交更改:

git add keydir/pythontg.pub
git commit -m 'New user pythontg added'
git push

配置权限


完成上面的操作之后,你可能会看到下面这样的警告信息:

remote: 
remote:         ***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: pythontg(pythontg.pub)

该信息表示新用户没有在配置文件中出现。这意味着,虽然 Gitolite 已经知道新建了这么一个用户,但是还没有为新用户创建任何权限。

编辑 ~/gitolite-admin/conf/gitolite.conf 文件,并为其创建一个新仓库:

repo    gitolite-admin
        RW+     =   git-admin

repo    testing
        RW+     =   @all

repo    pythontg
        RW+     =   pythontg

Gitolite 使用 repo 关键词 + 仓库名,指定 git 仓库。并在下方编辑权限类型,以及拥有权限的用户。

@all 是用户组的名称,这里是一个特殊的用户组,表示所有的 gitolite 用户。

权限的定义如下:

  • R 表示只读
  • RW 表示可读或推送更改,但不能删除 git ref
  • RW+ 表示可读、可写,而且可以删除 git ref

推送修改后,我们就成功为新用户创建了一个仓库,并赋予了充足的权限。

用户 pythontg 可以这样在本地克隆该库:

git clone git@qcloud-cvm-ip:pythontg

纯粹个人使用的 Git 服务器


到此为止,我们已经完成了 Gitolite 的配置,拥有了一个可供多名用户协作的私有 Git 服务器。我们按照上面的类似步骤,将应用的代码库添加到 Gitolite,并推送到服务器上。

如果你只想要一个供个人使用的 Git 服务器,那么只需要在拥有 SSH 登陆权限的账户下创建一个裸仓库(bare repository)即可。

mkdir -p /var/repo
sudo chmod 700 /var/repo
cd /var/repo
git init --bare codingpy.git

然后在本地机器上,进入你已有的应用目录。如果已经有本地 Git 仓库,可以修改 remote 设置:

git remote set-url origin earlgrey@qcloud-cvm-ip:/var/repo/codingpy.git

如果是一个新仓库,可以这样操作:

git init && git remote add origin earlgrey@qcloud-cvm-ip:/var/repo/codingpy.git

上述命令中的用户名、IP 地址及仓库地址,请根据自身的情况修改。

结语


到目前为止,Git 服务器的配置就完成了。参考上述操作,我将编程派网站的仓库放置到了新的服务器上,再也不用忍受慢速 Git 拉取了。

编程派.jpg

原文来自:编程派

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

选择想要的接口, 看看能免费获取多少次调用 选择(单选)或填写想要的接口
  • 短信API服务
  • 银行卡四元素检测[简]
  • 身份证实名认证
  • 手机状态查询
  • 三网手机实名制认证[简]
  • 身份证OCR识别
  • 证件识别
  • 企业工商信息
短信API服务
  • 短信API服务
  • 银行卡四元素检测[简]
  • 身份证实名认证
  • 手机状态查询
  • 三网手机实名制认证[简]
  • 身份证OCR识别
  • 证件识别
  • 企业工商信息
  • 确定
选择您的身份
请选择寻找接口的目的
预计每月调用量
请选择预计每月调用量
产品研发的阶段
请选择产品研发的阶段
×

前往领取
电话 0512-88869195
提需求
×
企业用户认证,
可获得1000次免费调用
注册登录 > 企业账户认证 > 领取接口包
企业用户认证领取接口包 立即领取
× 企业用户认证,
可获得1000次免费调用,立即领取>
数 据 驱 动 未 来
Data Drives The Future