GitLab系列1 基础功能及架构简介

本文将介绍 GitLab 的基础及架构的简介,这里假设读者已经使用过代码托管平台,并使用过 git 版本控制工具html

基础功能

GitLab 是目前最煊赫一时的代码托管类型的开源项目(严格来讲如今应该是 devops 类型的开源项目了,但最广为人知的功能仍是代码托管),拥有相对庞大的社区。本小节将介绍 GitLab 提供的最基础的代码托管功能git

代码托管,顾名思义就是将咱们本地的代码托管至远程仓库进行管理,这样方便团队开发与协做,也有利于用户及时同步远程仓库来自其余同事更新的代码至本地,因此最最基础的业务场景即: git clone or git pull or git fetchgit push ,前者是将远程仓库代码克隆或更新至本地,后者是将本地的代码变更推送至远程仓库算法

访问 gitlab 首页,注册一个 gitlab 帐号,填写基本的用户名、邮箱及密码信息便可注册,这里要注意邮箱很重要,GitLab 是用邮箱认用户的shell


注册成功后登陆,将看到以下页面,显示的是当前登陆用户的项目列表数据库


GitLab 的项目是一个很大的概念,它包揽了项目管理、wiki 文档、代码托管、持续集成/交付等功能,但一个项目只能与一个仓库关联,而且建立项目时必须初始化仓库缓存


这样,咱们就能进入到刚刚建立的项目中,从左侧菜单项能够看到项目提供了不少功能,这里就不一一介绍了,由于重点是在代码托管这个功能bash


到目前为止,咱们至关于在远程服务器建立了一个代码仓库,可是它如何与本地进行关联呢,或者说,我本地执行 git clone 或 git push 操做,远程服务器怎么认得我呢?注意上图的橙色提示就明白,远程服务器须要用户上传本地的 SSH 公钥来识别用户是谁服务器

这里先插入一段对 SSH 公钥登陆原理的介绍,其实整个过程主要使用了公钥加密、私钥解密的对称加密算法:用户将本身本机的 SSH 公钥上传至远程服务器上,登陆的时候远程服务器向用户发送一段随机序列,用户用本身本机的 SSH 私钥加密后发回远程服务器,远程服务器用事先储存的公钥进行解密,若是成功就证实用户是可信的,容许你登陆而且再也不要求密码架构



咱们得新建 SSH 公钥才能经过 SSH 拉取代码,本地生成 ssh 密钥对的方法请自行搜索app


只有将本身本地密钥上传后,咱们才能经过 ssh 密钥的方式克隆或更新远程仓库的代码

除了 ssh 密钥之外,咱们也能使用 https 的方式克隆或更新代码,区别在于 https 的方式须要输入 GitLab 的帐号名和密码

# ssh 方式
git clone git@gitlab.com:BradeHyj/ToyProject.git
# https 方式
git clone https://gitlab.com/BradeHyj/ToyProject.git
复制代码

至此,咱们已经将代码托管最最基础的功能给介绍完毕:新建代码仓库以及本地仓库的关联。能够发现,对于 GitLab 而言,其访问入口不只仅是只有 http/https ,还应该有 ssh

架构简介

本小节将简单介绍 GitLab 的单机部署架构图及其相应组件


上图是官网贴出的 GitLab 架构图,官网将 GitLab 类比为一个公司办公室:

  1. The repositories(代码仓库)是 GitLab 管理的货物,它们被存储于仓库中,此仓库能够是硬盘,也多是更复杂的 NFS 文件系统


  2. Nginx相似 GitLab 的前台。用户来到前台发起请求,此请求交由给办公室的工做人员处理


  3. The database(数据库)是放置各类元数据文件的橱柜,其内容包含仓库货物的元数据信息(如合并请求、议题等);访问前台的用户的信息及权限;等等


  4. Redis是带有“小洞”(cubby holes,看下图应该秒懂了吧,只可意会不可言传系列)的通信板,它包含了办公室工做人员须要执行的任务


  5. Sidekiq是一类主要处理发送邮件任务的工做人员,他们从 Redis 通信板中获取任务执行
  6. A Unicorn worker是一类处理耗时短的普通任务请求的工做人员。他们的工做职责:经过检测存储在 Redis “小洞”的用户会话来校验用户权限;指定任务交由 Sidekiq 工做人员执行;从货物仓库中获取或移动元件;等等
  7. GitLab-shell是办公室的第三类工做人员,它不是从前台(HTTP)接受命令,而是从传真机(SSH)。GitLab-shell 工做人员借由 Redis 通信板与 Sidekiq 工做人员交流,有时也会直接或者经过前台询问 Unicorn 工做者的问题


  8. Gitaly至关于办公室的后台,它擅长访问磁盘并高效执行 git 操做,并缓存耗时操做的结果。全部的 git 操做都经由 Gitaly 处理

以上组件的相互协同及关联以下图所示,它们共同组成了 GitLab 的软件架构,能够看到此架构的两个关键入口:HTTP/HTTPS(TCP 80,443)SSH(TCP 22)


架构不会是完美的设计,而更应该是可迭代的进化,每一个组件的存在必然有想要解决的问题,后续 GitLab 系列将逐一介绍各个组件“存在”的意义

附录

参考连接

GitLab 官方文档

阮一峰 SSH 原理与运用

相关文章
相关标签/搜索