GitLab架构概述

软件交付

GitLab有两个软件发行版:开源版社区版(CE)和开芯企业版(EE)。GitLab在不同的订阅

新版本的GitLab在稳定分支中发布,主分支用于前沿开发。

有关信息,请参见GitLab发布过程

EE和CE都需要一些名为gitlab-shell和Gitaly的附加组件。这些组件可从gitlab-shell吉塔分别存储库。新版本通常是标签,但留在主分支上将为您提供最新的稳定版本。新版本通常与GitLab CE的发布时间大致相同,但被认为是关键的非正式安全更新除外。

实体办公室类比

你可以把GitLab想象成一个实体办公室。

存储库是GitLab处理的货物。它们可以储存在仓库里。它可以是硬盘,也可以是更复杂的东西,比如NFS文件系统;

Nginx就像前台一样。用户来到Nginx并请求由办公室工作人员完成的操作;

数据库是一系列金属文件柜,资料包括:

  • 仓库中的货物(元数据、问题、合并请求等);
  • 来到前台的用户(权限)

复述,是一个带有“小隔间”的交流板,可以容纳办公室工作人员的任务;

Sidekiq主要负责发送电子邮件的员工。它从Redis通信板接收任务;

独角兽工人是一个处理快速/平凡任务的员工。他们与通信委员会(Redis)一起工作。他们的工作描述:

  • 通过检查存储在Redis“cubby hole”中的用户会话来检查权限;
  • 为Sidekiq安排任务;
  • 从仓库里拿东西或者搬东西;

GitLab-shell是第三种worker,它从传真机(SSH)而不是前台(HTTP)接受命令。GitLab-shell通过“通信板”(Redis)与Sidekiq通信,并直接或通过前台向独角兽工作人员询问快速问题。

吉塔是一个后台,专门用于访问磁盘以高效地执行git操作,并保存昂贵操作结果的副本。所有的git操作都要经过意大利。

GitLab企业版(应用程序)是办公室运行所依据的流程和业务实践的集合。

系统布局

当提到~ git在图片中,它指的是git用户的主目录,通常是/home/git

GitLab主要安装在/home/git用户主目录为git用户。在主目录中是gitlabhq服务器软件和存储库所在的位置(尽管存储库位置是可配置的)。

裸存储库位于/home/git/repositories。GitLab是一个ruby on rails应用程序,因此内部工作的细节可以通过研究ruby on rails应用程序的工作原理来学习。

要通过SSH服务存储库,有一个名为gitlab-shell的附加应用程序安装在/home/git/gitlab-shell

组件

编辑图(仅适用于GitLab团队成员)

典型的GitLab安装在GNU/Linux上。它使用Nginx或Apache作为web前端来代理传递独角兽web服务器。默认情况下,Unicorn和前端之间的通信是通过Unix域套接字进行的,但也支持通过TCP转发请求。web前端访问/home/git/gitlab/public绕过Unicorn服务器来提供静态页面,上传(例如头像图像或附件)和预编译资产。GitLab提供网页和GitLab API使用Unicorn web服务器。它使用Sidekiq作为作业队列,而作业队列又使用redis作为非持久性数据库后端,用于处理作业信息、元数据和传入作业。

GitLab web应用程序使用MySQL或PostgreSQL来保存持久的数据库信息(例如用户,权限,问题,其他元数据)。GitLab存储它所服务的裸git存储库/home/git/repositories默认情况下。它还将默认的分支和钩子信息保存在裸存储库中。

当通过HTTP/HTTPS提供存储库时,GitLab利用GitLab API来解析授权和访问以及服务git对象。

附加组件gitlab-shell通过SSH为存储库提供服务。它管理其中的SSH密钥/home/git/.ssh/authorized_keys不应该手工编辑。GitLab -shell通过Gitaly访问裸存储库,为git对象提供服务,并与redis通信,将作业提交给Sidekiq供GitLab处理。GitLab -shell查询GitLab API来确定授权和访问。

Gitaly从GitLab -shell和GitLab web应用程序执行git操作,并为GitLab web应用程序提供API,从git获取属性(例如title, branches, tags,其他元数据)和blob(例如diffs, commits, files)。

你也可能对GitLab.com的生产架构

安装文件夹摘要

总结一下的目录结构。git用户主目录

流程

Ps x / grep '^git'

GitLab有几个组件要操作。作为系统用户(即,任何非系统用户)git用户)它需要一个持久的数据库(MySQL/PostreSQL)和redis数据库。它还使用Apache httpd或Nginx来proxypass Unicorn。随着git用户启动Sidekiq和Unicorn(一个运行在端口上的简单ruby HTTP服务器)8080默认情况下)。在GitLab用户下,通常有4个进程:unicorn_rails主(1)过程,unicorn_rails工人(2流程),sidekiq(1)过程。

库访问

存储库可以通过HTTP或SSH访问。HTTP克隆/推/拉使用GitLab API, SSH克隆由GitLab -shell处理(前面解释过)。

故障排除

有关更多信息,请参阅README。

初始化服务脚本

GitLab初始化脚本启动和停止Unicorn和Sidekiq。

/etc/init.d/gitlab用法:service gitlab {start|stop|restart|reload|status}

Redis(键值存储/非持久化数据库)

/etc/init.d/redis用法:/etc/init.d /复述,{开始|停止状态| |重启| condrestart | try-restart}

SSH守护进程

/etc/init.d/sshd用法:/etc/init.d / sshd{开始|停止|重启|重载|才| condrestart | try-restart |状态}

Web服务器(以下之一)

/etc/init.d/httpd用法:httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}/etc/init.d/nginx美元用法:nginx {start|stop|restart|reload|force-reload|status|configtest}

持久化数据库(以下之一)

/etc/init.d/mysqld用法:/etc/init.d / mysqld{开始|停止状态| |重启| condrestart | try-restart |重载|才}/etc/init.d/postgresql美元用法:/etc/init.D /postgresql {start|stop|restart|reload|force-reload|status} [version ..]

记录服务的位置

gitlabhq(包括Unicorn和Sidekiq日志)

  • /home/git/gitlab/log/包含application.logproduction.logsidekiq.logunicorn.stdout.loggithost.logunicorn.stderr.log正常。

gitlab-shell

  • /home/git/gitlab-shell / gitlab-shell.log

ssh

  • /var/log/auth.logauth log(在Ubuntu上)。
  • /var/log/secure授权日志(在RHEL上)。

nginx

  • /var/log/nginx/包含错误和访问日志。

Apache httpd

  • Apache日志说明
  • /var/log/apache2/包含错误和输出日志(在Ubuntu上)。
  • /var/log/httpd/包含错误和输出日志(RHEL)。

复述,

  • /var/log/redis/redis.log这里也有对数旋转的对数。

PostgreSQL

  • /var/log/postgresql/*

MySQL

  • /var/log/mysql/*
  • /var/log/mysql.*

GitLab特定的配置文件

GitLab的配置文件位于/home/git/gitlab/config/*。常用的配置文件包括:

  • gitlab.yml- GitLab配置。
  • unicorn.rb- Unicorn web服务器设置。
  • 的形式—数据库连接设置。

Gitlab-shell有一个配置文件/home/git/gitlab-shell / config.yml

维护任务

GitLab提供rake任务,您可以使用这些任务查看版本信息,并对配置进行快速检查,以确保在应用程序中正确配置。看到维护rake任务。简而言之,要做到以下几点:

Sudo -i -u gitcd gitlabbundle exec rake gitlab:env:info RAILS_ENV=productionbundle exec rake gitlab:检查RAILS_ENV=生产

注意:建议登录git用户使用Sudo -i -u gitSudo su - git。虽然gitlabhq提供的sudo命令在Ubuntu中工作,但它们并不总是在RHEL中工作。

GitLab.com

我们还详细介绍了我们的GitLab.com架构但除非你拥有数百万用户,否则这可能是过高的。

Baidu
map