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 原理與運用

相關文章
相關標籤/搜索